spree_api 5.6.0 → 6.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +28 -0
- data/Rakefile +1 -1
- data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
- data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
- data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
- data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
- data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
- data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
- data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
- data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
- data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
- data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
- data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
- data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
- data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
- data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
- data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
- data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
- data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
- data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
- data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
- data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -1
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
- data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
- data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
- data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
- data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
- data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
- data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
- data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +11 -9
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +107 -16
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
- data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
- data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
- data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
- data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
- data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
- data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
- data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
- data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
- data/app/controllers/spree/api/v3/base_controller.rb +59 -16
- data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
- data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
- data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
- data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
- data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
- data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
- data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
- data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
- data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
- data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
- data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
- data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
- data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
- data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
- data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
- data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
- data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
- data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
- data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
- data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
- data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +7 -0
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
- data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
- data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
- data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
- data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
- data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
- data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
- data/app/controllers/spree/api/v3/store/products/filters_controller.rb +11 -3
- data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
- data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
- data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
- data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
- data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
- data/app/models/spree/api/data_request_urls.rb +25 -0
- data/app/models/spree/api/digital_link_urls.rb +26 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
- data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
- data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +7 -3
- data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
- data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +56 -3
- data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
- data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
- data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
- data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
- data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
- data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
- data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/export_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/import_row_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/import_serializer.rb +27 -4
- data/app/serializers/spree/api/v3/invitation_serializer.rb +15 -2
- data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/media_event_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/product_filter_sort_option_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
- data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
- data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
- data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
- data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
- data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
- data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -10
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +7 -4
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +12 -5
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
- data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
- data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
- data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
- data/config/brakeman.ignore +1 -1
- data/config/initializers/typelizer.rb +51 -4
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +731 -22
- data/lib/spree/api/configuration.rb +2 -7
- data/lib/spree/api/dependencies.rb +173 -227
- data/lib/spree/api/openapi/schema_helper.rb +197 -13
- data/lib/spree/api/testing_support/v3/base.rb +45 -15
- data/lib/spree/api.rb +10 -4
- data/lib/typelizer/open_enums.rb +35 -0
- metadata +341 -27
- data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
- data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
- data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
- data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
- data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
- data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
- data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
- data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
- data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/asset_serializer.rb +0 -20
- data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
- data/app/serializers/spree/api/v3/report_serializer.rb +0 -28
- data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
- data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
- data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
|
@@ -98,7 +98,7 @@ module Spree
|
|
|
98
98
|
# is intentionally dropped — only CSV is supported and Rails' request
|
|
99
99
|
# format would otherwise overwrite the model's enum.
|
|
100
100
|
def permitted_params
|
|
101
|
-
attrs = params.permit(:type, :record_selection, :results_url)
|
|
101
|
+
attrs = params.permit(*model_additional_permitted_attributes, :type, :record_selection, :results_url)
|
|
102
102
|
raw = params[:search_params]
|
|
103
103
|
attrs[:search_params] = raw.respond_to?(:to_unsafe_h) ? raw.to_unsafe_h : raw if raw.present?
|
|
104
104
|
attrs
|
|
@@ -106,17 +106,19 @@ module Spree
|
|
|
106
106
|
|
|
107
107
|
# Returns the registered Export subclass matching `name`, or nil.
|
|
108
108
|
#
|
|
109
|
-
#
|
|
110
|
-
#
|
|
111
|
-
#
|
|
112
|
-
#
|
|
113
|
-
#
|
|
114
|
-
#
|
|
109
|
+
# Takes the API shorthand (`"products"`), the same value the
|
|
110
|
+
# serializer emits. The fully-qualified class name is also accepted so
|
|
111
|
+
# a `type` read back from the API round-trips either way.
|
|
112
|
+
#
|
|
113
|
+
# The class comes from `available_types` (a trusted in-process
|
|
114
|
+
# registry), not from the request — `name` is only used to *select* an
|
|
115
|
+
# entry in the allowlist, which also keeps the data flow legible to
|
|
116
|
+
# static analyzers (no `constantize` on user input at all).
|
|
115
117
|
def resolve_export_type(name)
|
|
116
118
|
return nil if name.blank?
|
|
117
119
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
name = name.to_s
|
|
121
|
+
Spree::Export.available_types.find { |type| type.api_type == name }
|
|
120
122
|
end
|
|
121
123
|
|
|
122
124
|
private
|
|
@@ -9,7 +9,7 @@ module Spree
|
|
|
9
9
|
# `store` and `created_by` are auto-stamped by `build_resource` in
|
|
10
10
|
# `Spree::Api::V3::ResourceController`, so create requests only need
|
|
11
11
|
# to include user-facing attributes (amount, currency, expires_at,
|
|
12
|
-
# optional code, optional
|
|
12
|
+
# optional code, optional customer_id).
|
|
13
13
|
class GiftCardsController < ResourceController
|
|
14
14
|
scoped_resource :gift_cards
|
|
15
15
|
|
|
@@ -24,7 +24,8 @@ module Spree
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def permitted_params
|
|
27
|
-
params.permit(:code, :amount, :expires_at,
|
|
27
|
+
params.permit(*model_additional_permitted_attributes, :code, :amount, :expires_at,
|
|
28
|
+
:customer_id, :currency)
|
|
28
29
|
end
|
|
29
30
|
end
|
|
30
31
|
end
|
|
@@ -26,10 +26,15 @@ module Spree
|
|
|
26
26
|
def create
|
|
27
27
|
@resource = build_resource
|
|
28
28
|
authorize_resource!(@resource, :create)
|
|
29
|
+
# After authorization: a 404 for an unknown list must not tell a
|
|
30
|
+
# caller without import rights whether the id exists.
|
|
31
|
+
assign_price_list(@resource)
|
|
29
32
|
|
|
30
33
|
if @resource.save
|
|
31
34
|
begin
|
|
32
|
-
@resource
|
|
35
|
+
result = Spree.import_start_mapping_workflow.call(import: @resource)
|
|
36
|
+
|
|
37
|
+
return render_service_error(result.error) unless result.success?
|
|
33
38
|
rescue ::CSV::MalformedCSVError, EncodingError => e
|
|
34
39
|
@resource.update_columns(status: 'failed', processing_errors: e.message, updated_at: Time.current)
|
|
35
40
|
return render_error(
|
|
@@ -72,7 +77,10 @@ module Spree
|
|
|
72
77
|
apply_mappings!(@resource)
|
|
73
78
|
|
|
74
79
|
if @resource.mapping_done?
|
|
75
|
-
@resource
|
|
80
|
+
result = Spree.import_complete_mapping_workflow.call(import: @resource)
|
|
81
|
+
|
|
82
|
+
return render_service_error(result.error) unless result.success?
|
|
83
|
+
|
|
76
84
|
render json: serialize_resource(@resource)
|
|
77
85
|
else
|
|
78
86
|
missing = @resource.required_fields - @resource.mappings.mapped.pluck(:schema_field)
|
|
@@ -96,7 +104,11 @@ module Spree
|
|
|
96
104
|
@resource = find_resource
|
|
97
105
|
authorize_resource!(@resource, :update)
|
|
98
106
|
|
|
99
|
-
if
|
|
107
|
+
return if refuse_seller_owned!
|
|
108
|
+
|
|
109
|
+
result = Spree.import_retry_failed_rows_workflow.call(import: @resource)
|
|
110
|
+
|
|
111
|
+
if result.success?
|
|
100
112
|
render json: serialize_resource(@resource)
|
|
101
113
|
else
|
|
102
114
|
render_error(
|
|
@@ -136,7 +148,7 @@ module Spree
|
|
|
136
148
|
|
|
137
149
|
# GET /api/v3/admin/imports/template?type=Spree::Imports::Products
|
|
138
150
|
#
|
|
139
|
-
# CSV header row for the type's schema (including the
|
|
151
|
+
# CSV header row for the type's schema (including the custom_field
|
|
140
152
|
# columns available for the model) — the "Download template" link
|
|
141
153
|
# in the admin dashboard.
|
|
142
154
|
def template
|
|
@@ -150,13 +162,50 @@ module Spree
|
|
|
150
162
|
)
|
|
151
163
|
end
|
|
152
164
|
|
|
153
|
-
|
|
154
|
-
send_data
|
|
155
|
-
filename:
|
|
165
|
+
import = klass.new
|
|
166
|
+
send_data import.template_csv,
|
|
167
|
+
filename: import.template_csv_filename,
|
|
156
168
|
type: 'text/csv',
|
|
157
169
|
disposition: 'attachment'
|
|
158
170
|
end
|
|
159
171
|
|
|
172
|
+
# GET /api/v3/admin/imports/example?type=products
|
|
173
|
+
#
|
|
174
|
+
# Redirects to the populated example CSV for the type — the counterpart
|
|
175
|
+
# to `template` above. 404s for a type that ships no example file.
|
|
176
|
+
#
|
|
177
|
+
# The client can't build this URL itself: it is pinned to the
|
|
178
|
+
# installed Spree version, and exposing that version over the API
|
|
179
|
+
# would fingerprint the deployment for anyone matching CVEs. Resolving
|
|
180
|
+
# it here keeps the version server-side.
|
|
181
|
+
def example
|
|
182
|
+
klass = resolve_import_type(params[:type])
|
|
183
|
+
url = klass&.sample_csv_url
|
|
184
|
+
|
|
185
|
+
unless url
|
|
186
|
+
return render_error(
|
|
187
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:record_not_found],
|
|
188
|
+
message: 'No example CSV for this import type',
|
|
189
|
+
status: :not_found
|
|
190
|
+
)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
redirect_to url, allow_other_host: true, status: :found
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# DELETE /api/v3/admin/imports/:id
|
|
197
|
+
#
|
|
198
|
+
# An operator deletes their own imports. A seller's is theirs to
|
|
199
|
+
# remove — see `refuse_seller_owned!`.
|
|
200
|
+
def destroy
|
|
201
|
+
@resource = find_resource
|
|
202
|
+
authorize_resource!(@resource, :destroy)
|
|
203
|
+
|
|
204
|
+
return if refuse_seller_owned!
|
|
205
|
+
|
|
206
|
+
super
|
|
207
|
+
end
|
|
208
|
+
|
|
160
209
|
protected
|
|
161
210
|
|
|
162
211
|
def model_class
|
|
@@ -200,8 +249,8 @@ module Spree
|
|
|
200
249
|
|
|
201
250
|
def build_resource
|
|
202
251
|
klass = resolve_import_type(permitted_params[:type]) || Spree::Import
|
|
203
|
-
attrs = permitted_params.except(:type).merge(
|
|
204
|
-
|
|
252
|
+
attrs = permitted_params.except(:type, :price_list_id).merge(
|
|
253
|
+
store: current_store,
|
|
205
254
|
user: acting_admin_user
|
|
206
255
|
)
|
|
207
256
|
# The done email links back to results_url — allowed origins only.
|
|
@@ -210,24 +259,66 @@ module Spree
|
|
|
210
259
|
end
|
|
211
260
|
|
|
212
261
|
def permitted_params
|
|
213
|
-
params.permit(:type, :attachment, :preferred_delimiter, :results_url)
|
|
262
|
+
params.permit(*model_additional_permitted_attributes, :type, :attachment, :preferred_delimiter, :results_url, :price_list_id)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# A price-list import writes into one list, named by its prefixed id.
|
|
266
|
+
# Resolved through the current store, so another store's list is a
|
|
267
|
+
# 404 rather than a write into it; a type without a list ignores the
|
|
268
|
+
# parameter. `permitted_params` does not normalize, so the raw
|
|
269
|
+
# prefixed id is what arrives here.
|
|
270
|
+
def assign_price_list(import)
|
|
271
|
+
return unless import.respond_to?(:price_list=)
|
|
272
|
+
|
|
273
|
+
prefixed_id = permitted_params[:price_list_id]
|
|
274
|
+
return if prefixed_id.blank?
|
|
275
|
+
|
|
276
|
+
import.price_list = current_store.price_lists.find_by_prefix_id!(prefixed_id)
|
|
214
277
|
end
|
|
215
278
|
|
|
216
279
|
# Returns the registered Import subclass matching `name`, or nil.
|
|
217
280
|
#
|
|
218
|
-
#
|
|
219
|
-
#
|
|
220
|
-
#
|
|
281
|
+
# Takes the API shorthand (`"products"`), the same value the
|
|
282
|
+
# serializer emits. The fully-qualified class name is also accepted so
|
|
283
|
+
# a `type` read back from the API round-trips either way.
|
|
284
|
+
#
|
|
285
|
+
# The class comes from `available_types` (a trusted in-process
|
|
286
|
+
# registry), not from the request — `name` is only used to *select* an
|
|
287
|
+
# entry in the allowlist (same pattern as
|
|
221
288
|
# ExportsController#resolve_export_type).
|
|
222
289
|
def resolve_import_type(name)
|
|
223
290
|
return nil if name.blank?
|
|
224
291
|
|
|
225
|
-
|
|
226
|
-
|
|
292
|
+
name = name.to_s
|
|
293
|
+
Spree::Import.available_types.find { |type| type.api_type == name }
|
|
227
294
|
end
|
|
228
295
|
|
|
229
296
|
private
|
|
230
297
|
|
|
298
|
+
# Refuses a write against an import one of this store's sellers ran,
|
|
299
|
+
# rendering 422 and answering true so the caller returns.
|
|
300
|
+
#
|
|
301
|
+
# An operator can see every import in their marketplace — that is the
|
|
302
|
+
# point of the store-scoped list, and it is what makes a seller's
|
|
303
|
+
# failed rows debuggable. Acting on one is different: a retry re-runs
|
|
304
|
+
# writes into the seller's own catalog, and nothing on the import
|
|
305
|
+
# would record that the operator, rather than the seller, caused
|
|
306
|
+
# them. So reads span the store and writes stay with whoever owns the
|
|
307
|
+
# row.
|
|
308
|
+
#
|
|
309
|
+
# @return [Boolean]
|
|
310
|
+
def refuse_seller_owned!
|
|
311
|
+
return false if @resource.seller_id.blank?
|
|
312
|
+
|
|
313
|
+
render_error(
|
|
314
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
315
|
+
message: Spree.t(:cannot_modify_seller_import, scope: 'api',
|
|
316
|
+
default: "This import belongs to a seller. It can be viewed here, but only the seller can retry or delete it."),
|
|
317
|
+
status: :unprocessable_content
|
|
318
|
+
)
|
|
319
|
+
true
|
|
320
|
+
end
|
|
321
|
+
|
|
231
322
|
# Imports require a user: row processors resolve records through
|
|
232
323
|
# `import.current_ability`. JWT requests use the signed-in admin;
|
|
233
324
|
# API-key requests attribute to the key's creator when that is an
|
|
@@ -241,7 +332,7 @@ module Spree
|
|
|
241
332
|
|
|
242
333
|
def import_class
|
|
243
334
|
case action_name
|
|
244
|
-
when 'create', 'template' then resolve_import_type(params[:type])
|
|
335
|
+
when 'create', 'template', 'example' then resolve_import_type(params[:type])
|
|
245
336
|
else find_resource.class
|
|
246
337
|
end
|
|
247
338
|
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Credential records for provider gems (delivery rates, tax, ...) —
|
|
6
|
+
# one per (store, type). The types endpoint is the dashboard's
|
|
7
|
+
# gallery source; activation is verified by the model
|
|
8
|
+
# (verify-before-activate), so a failed connection surfaces as a
|
|
9
|
+
# plain 422 on `active`.
|
|
10
|
+
class IntegrationsController < ResourceController
|
|
11
|
+
include Spree::Api::V3::Admin::SubclassedResource
|
|
12
|
+
|
|
13
|
+
scoped_resource :integrations
|
|
14
|
+
|
|
15
|
+
subclassed_via -> { Spree::Integration.registered_classes },
|
|
16
|
+
unknown_type_error: 'unknown_integration_type'
|
|
17
|
+
|
|
18
|
+
# GET /api/v3/admin/integrations/types
|
|
19
|
+
# Pure registry discovery — which integrations are installed and how
|
|
20
|
+
# they're configured. Deliberately carries no per-store connected
|
|
21
|
+
# state: clients cache this long-lived and read live connection
|
|
22
|
+
# state from the integrations list instead.
|
|
23
|
+
def types
|
|
24
|
+
authorize! :create, model_class
|
|
25
|
+
|
|
26
|
+
render json: { data: Spree::Integration.discovery_entries }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# POST /api/v3/admin/integrations/:id/test
|
|
30
|
+
# Live connection check; nothing is persisted.
|
|
31
|
+
def test
|
|
32
|
+
@resource = find_resource
|
|
33
|
+
authorize_resource!(@resource, :update)
|
|
34
|
+
|
|
35
|
+
connected = @resource.can_connect?
|
|
36
|
+
render json: { connected: connected, error_message: connected ? nil : @resource.connection_error_message }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
|
|
41
|
+
def model_class
|
|
42
|
+
Spree::Integration
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def serializer_class
|
|
46
|
+
Spree.api.admin_integration_serializer
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def permitted_params
|
|
50
|
+
params.permit(*model_additional_permitted_attributes, :type, :active, preferences: {})
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# `types` is read-only discovery — maps to the read scope.
|
|
54
|
+
def read_actions
|
|
55
|
+
super + %w[types]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def build_subclassed_resource(klass, attrs)
|
|
61
|
+
current_store.integrations.build(attrs.merge(type: klass.sti_name))
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -14,7 +14,7 @@ module Spree
|
|
|
14
14
|
within: Spree::Api::Config[:rate_limit_window].seconds,
|
|
15
15
|
store: Rails.cache,
|
|
16
16
|
only: [:lookup, :accept],
|
|
17
|
-
with:
|
|
17
|
+
with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_login]) }
|
|
18
18
|
|
|
19
19
|
# GET /api/v3/admin/auth/invitations/:id/lookup?token=:token
|
|
20
20
|
def lookup
|
|
@@ -32,13 +32,13 @@ module Spree
|
|
|
32
32
|
return if performed?
|
|
33
33
|
|
|
34
34
|
@invitation.invitee = user
|
|
35
|
-
@invitation
|
|
35
|
+
result = Spree.invitation_accept_workflow.call(invitation: @invitation)
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
return render_service_error(result.error) unless result.success?
|
|
38
|
+
|
|
39
|
+
refresh_token = Spree::RefreshToken.create_for(user, audience: JWT_AUDIENCE_ADMIN, request_env: request_env_for_token)
|
|
38
40
|
set_refresh_cookie(refresh_token)
|
|
39
41
|
render json: auth_response(user)
|
|
40
|
-
rescue ActiveRecord::RecordInvalid => e
|
|
41
|
-
render_validation_error(e.record.errors)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
private
|
|
@@ -9,7 +9,9 @@ module Spree
|
|
|
9
9
|
class InvitationsController < ResourceController
|
|
10
10
|
include Spree::Api::V3::Admin::RoleGrantGuard
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
# Staff management is the escalation path — its own scope pair,
|
|
13
|
+
# grantable separately from store configuration (6.0-admin-rbac.md).
|
|
14
|
+
scoped_resource :staff
|
|
13
15
|
|
|
14
16
|
# POST /api/v3/admin/invitations
|
|
15
17
|
# Guards against inviting a new staff member straight into the admin
|
|
@@ -67,6 +69,8 @@ module Spree
|
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
# `email` and `role_id` are flat — `role_id` accepts a prefixed ID.
|
|
72
|
+
# No extension union: an invitation carries only the role grant, which is
|
|
73
|
+
# the authorization surface itself, not extensible resource data.
|
|
70
74
|
def permitted_params
|
|
71
75
|
attrs = params.permit(:email, :role_id)
|
|
72
76
|
if attrs[:role_id].present? && Spree::PrefixedId.prefixed_id?(attrs[:role_id])
|
|
@@ -6,7 +6,9 @@ module Spree
|
|
|
6
6
|
# current store (its supported_locales_list), so the dashboard's locale
|
|
7
7
|
# switcher enumerates locales instead of hardcoding them.
|
|
8
8
|
class LocalesController < Admin::BaseController
|
|
9
|
-
|
|
9
|
+
# Reference data the dashboard shell needs regardless of the caller's
|
|
10
|
+
# grant — exempt from the key gate like `/tags` and `/countries`.
|
|
11
|
+
skip_scope_check!
|
|
10
12
|
|
|
11
13
|
# GET /api/v3/admin/locales
|
|
12
14
|
def index
|
|
@@ -7,8 +7,8 @@ module Spree
|
|
|
7
7
|
# `scope` chain narrows appropriately when we restrict to
|
|
8
8
|
# `current_store.markets`.
|
|
9
9
|
#
|
|
10
|
-
# `
|
|
11
|
-
# wire and translated by model setters (`Spree::Market#
|
|
10
|
+
# `country_codes` and `supported_locales` are accepted as arrays on the
|
|
11
|
+
# wire and translated by model setters (`Spree::Market#country_codes=`,
|
|
12
12
|
# `#supported_locales=`).
|
|
13
13
|
class MarketsController < ResourceController
|
|
14
14
|
scoped_resource :settings
|
|
@@ -24,14 +24,18 @@ module Spree
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def collection_includes
|
|
27
|
-
[:
|
|
27
|
+
[:market_countries]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def scope
|
|
31
|
+
super.ordered
|
|
28
32
|
end
|
|
29
33
|
|
|
30
34
|
def permitted_params
|
|
31
35
|
normalize_params(
|
|
32
36
|
params.permit(
|
|
33
|
-
:name, :currency, :default_locale, :tax_inclusive,
|
|
34
|
-
:default, :position, supported_locales: [],
|
|
37
|
+
:name, :currency, :default_locale, :tax_inclusive, :tax_provider,
|
|
38
|
+
:default, :position, supported_locales: [], country_codes: []
|
|
35
39
|
)
|
|
36
40
|
)
|
|
37
41
|
end
|
|
@@ -3,6 +3,8 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Admin
|
|
5
5
|
class MeController < Admin::BaseController
|
|
6
|
+
include Spree::Api::V3::PermissionSerialization
|
|
7
|
+
|
|
6
8
|
skip_scope_check!
|
|
7
9
|
|
|
8
10
|
before_action :require_current_user!
|
|
@@ -63,39 +65,11 @@ module Spree
|
|
|
63
65
|
def me_response
|
|
64
66
|
{
|
|
65
67
|
user: admin_user_serializer.new(current_user, params: serializer_params).to_h,
|
|
66
|
-
permissions: serialize_permissions(current_ability)
|
|
68
|
+
permissions: serialize_permissions(current_ability),
|
|
69
|
+
permission_keys: serialize_permission_keys(current_ability)
|
|
67
70
|
}
|
|
68
71
|
end
|
|
69
72
|
|
|
70
|
-
# Serializes CanCanCan's rules into a flat, JSON-safe list of permission rules.
|
|
71
|
-
#
|
|
72
|
-
# - Rule order is preserved so the frontend matcher can apply
|
|
73
|
-
# CanCanCan's "last matching rule wins" semantics.
|
|
74
|
-
# - Per-record conditions are NOT serialized (they often reference
|
|
75
|
-
# scopes or blocks that don't translate to JSON). The frontend
|
|
76
|
-
# receives `has_conditions: true` as a hint that the action might
|
|
77
|
-
# be denied at the per-record level — in practice the SPA shows
|
|
78
|
-
# the action optimistically and handles 403 from the API.
|
|
79
|
-
def serialize_permissions(ability)
|
|
80
|
-
ability.send(:rules).map do |rule|
|
|
81
|
-
{
|
|
82
|
-
allow: rule.base_behavior,
|
|
83
|
-
actions: Array(rule.actions).map(&:to_s),
|
|
84
|
-
subjects: Array(rule.subjects).map { |s| s.is_a?(Class) ? s.name : s.to_s },
|
|
85
|
-
has_conditions: rule_has_conditions?(rule)
|
|
86
|
-
}
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def rule_has_conditions?(rule)
|
|
91
|
-
return true if rule.block.present?
|
|
92
|
-
conditions = rule.conditions
|
|
93
|
-
return false if conditions.nil?
|
|
94
|
-
return !conditions.empty? if conditions.respond_to?(:empty?)
|
|
95
|
-
|
|
96
|
-
true
|
|
97
|
-
end
|
|
98
|
-
|
|
99
73
|
def admin_user_serializer
|
|
100
74
|
Spree.api.admin_admin_user_serializer
|
|
101
75
|
end
|