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.
Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +28 -0
  3. data/Rakefile +1 -1
  4. data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
  6. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
  7. data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
  8. data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
  9. data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
  10. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
  11. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
  12. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
  13. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
  14. data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
  15. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
  16. data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
  17. data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
  18. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
  19. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
  20. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
  21. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
  22. data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
  23. data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
  24. data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
  25. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
  26. data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
  27. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
  28. data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
  29. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
  30. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
  31. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
  32. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
  33. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
  34. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
  35. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
  36. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
  37. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
  38. data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
  39. data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
  40. data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
  41. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
  42. data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
  43. data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
  44. data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
  45. data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
  46. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
  47. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
  48. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
  49. data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
  50. data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
  51. data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
  52. data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
  53. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
  54. data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
  55. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
  56. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
  57. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
  58. data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
  59. data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -1
  60. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
  61. data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
  62. data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
  63. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
  64. data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
  65. data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
  66. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
  67. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
  68. data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
  69. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
  70. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
  71. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
  72. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
  73. data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
  74. data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
  75. data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
  76. data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
  77. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +21 -5
  78. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
  79. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
  81. data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
  82. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
  83. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
  84. data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
  85. data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
  86. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
  87. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
  88. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
  89. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
  90. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
  91. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
  92. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
  93. data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
  94. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
  95. data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
  96. data/app/controllers/spree/api/v3/admin/exports_controller.rb +11 -9
  97. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
  98. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
  99. data/app/controllers/spree/api/v3/admin/imports_controller.rb +107 -16
  100. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
  101. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
  102. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
  103. data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
  104. data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
  105. data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
  106. data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
  107. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
  108. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
  109. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
  110. data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
  111. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
  112. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
  113. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
  114. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
  115. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
  116. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
  117. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
  118. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
  119. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
  120. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
  121. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
  122. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
  123. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
  124. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
  125. data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
  126. data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
  127. data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
  128. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
  129. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
  130. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
  131. data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
  132. data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
  133. data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
  134. data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
  135. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
  136. data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
  137. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
  138. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
  139. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
  140. data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
  141. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
  142. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
  143. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
  144. data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
  145. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
  146. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
  147. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
  148. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
  149. data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
  150. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
  151. data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
  152. data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
  153. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
  154. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
  155. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
  156. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
  157. data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
  158. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
  159. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
  160. data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
  161. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
  162. data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
  163. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
  164. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
  165. data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
  166. data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
  167. data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
  168. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
  169. data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
  170. data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
  171. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
  172. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
  173. data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
  174. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
  175. data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
  176. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
  177. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
  178. data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
  179. data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
  180. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
  181. data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
  182. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
  183. data/app/controllers/spree/api/v3/base_controller.rb +59 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
  185. data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
  186. data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
  187. data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
  188. data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
  189. data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
  190. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
  191. data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
  192. data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
  193. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
  194. data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
  195. data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
  196. data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
  197. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
  198. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
  199. data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
  200. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
  201. data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
  202. data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
  203. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
  204. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
  205. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
  206. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
  207. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
  208. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
  209. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
  210. data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
  211. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
  212. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
  213. data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
  214. data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
  215. data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
  216. data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
  217. data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
  218. data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
  219. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
  220. data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
  221. data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
  222. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
  223. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
  224. data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
  225. data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
  226. data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
  227. data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
  228. data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
  229. data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
  230. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
  231. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
  232. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
  233. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
  234. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
  235. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
  236. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
  237. data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
  238. data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
  239. data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
  240. data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
  241. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
  242. data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
  243. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
  244. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
  245. data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
  246. data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
  247. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
  248. data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
  249. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
  250. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +7 -0
  251. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
  252. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
  253. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
  254. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
  255. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
  256. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
  257. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
  258. data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
  259. data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
  260. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
  261. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
  262. data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
  263. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
  264. data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
  265. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
  266. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
  267. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
  268. data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
  269. data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
  270. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +11 -3
  271. data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
  272. data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
  273. data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
  274. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
  275. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
  276. data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
  277. data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
  278. data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
  279. data/app/models/spree/api/data_request_urls.rb +25 -0
  280. data/app/models/spree/api/digital_link_urls.rb +26 -0
  281. data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
  282. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  283. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +20 -4
  284. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  285. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  286. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  294. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  295. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  296. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  297. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  298. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  299. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
  300. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  301. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  302. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  304. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  305. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  306. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  307. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  308. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  309. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  310. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  311. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  312. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +7 -3
  313. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  314. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  315. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  316. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  318. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  319. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  322. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  323. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  325. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  326. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  327. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  328. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  329. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
  330. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  331. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  333. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  335. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  336. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  337. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  338. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  339. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  340. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
  341. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  342. data/app/serializers/spree/api/v3/admin/media_serializer.rb +56 -3
  343. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  345. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  346. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  347. data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
  348. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  349. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  350. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  351. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  352. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  353. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  354. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  356. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  357. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  358. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  359. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  360. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  362. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  363. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  364. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  365. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  366. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  367. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  368. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
  369. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  370. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  371. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  372. data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
  373. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  374. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
  375. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  376. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  379. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  380. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  381. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  382. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  383. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  384. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  385. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  386. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  387. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  389. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
  390. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  392. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  393. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  394. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  395. data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
  396. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  397. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  398. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  399. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  400. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  401. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  402. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  403. data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
  404. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  405. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  406. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  407. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  408. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  409. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  410. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  412. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  413. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  414. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  415. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  416. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  417. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  418. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  419. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  421. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  422. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  423. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  424. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  425. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  426. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  427. data/app/serializers/spree/api/v3/export_serializer.rb +9 -1
  428. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  429. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  430. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  431. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  432. data/app/serializers/spree/api/v3/import_row_serializer.rb +7 -2
  433. data/app/serializers/spree/api/v3/import_serializer.rb +27 -4
  434. data/app/serializers/spree/api/v3/invitation_serializer.rb +15 -2
  435. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  436. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  437. data/app/serializers/spree/api/v3/media_event_serializer.rb +28 -0
  438. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  439. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  440. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  441. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  442. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  443. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  444. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  445. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  446. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  447. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  448. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  449. data/app/serializers/spree/api/v3/product_filter_sort_option_serializer.rb +2 -2
  450. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  451. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  452. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  453. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  454. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  455. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  456. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  457. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  458. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  459. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  463. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  464. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  465. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  466. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  467. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  468. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  469. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  470. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  471. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  472. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  473. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  474. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  475. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  476. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  477. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  478. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  479. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  480. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  481. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  482. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  483. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  484. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  485. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  486. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  487. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  488. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  489. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  490. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  491. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  492. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  493. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  494. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  495. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  496. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  497. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  498. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  499. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  500. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  501. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  502. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  503. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -10
  504. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  505. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +7 -4
  506. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  507. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  508. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  509. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  510. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  511. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +12 -5
  512. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  513. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  514. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  515. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  516. data/config/brakeman.ignore +1 -1
  517. data/config/initializers/typelizer.rb +51 -4
  518. data/config/locales/en.yml +5 -0
  519. data/config/routes.rb +731 -22
  520. data/lib/spree/api/configuration.rb +2 -7
  521. data/lib/spree/api/dependencies.rb +173 -227
  522. data/lib/spree/api/openapi/schema_helper.rb +197 -13
  523. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  524. data/lib/spree/api.rb +10 -4
  525. data/lib/typelizer/open_enums.rb +35 -0
  526. metadata +341 -27
  527. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  528. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  529. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  530. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  531. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  532. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  533. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  534. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  535. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  536. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  537. data/app/serializers/spree/api/v3/asset_serializer.rb +0 -20
  538. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  539. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  540. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  541. data/app/serializers/spree/api/v3/report_serializer.rb +0 -28
  542. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  543. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  544. 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
- # The constantize target comes from `available_types` (a trusted
110
- # in-process registry), not from the request — `name` is only used
111
- # to *select* an entry in the allowlist. This keeps the data flow
112
- # from user input → trusted-string → `constantize` legible to
113
- # static analyzers (CodeQL otherwise flags the inverse pattern of
114
- # gating user input with `include?` before calling `constantize`).
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
- target = Spree::Export.available_types.map(&:to_s).find { |t| t == name.to_s }
119
- target&.constantize
120
+ name = name.to_s
121
+ Spree::Export.available_types.find { |type| type.api_type == name }
120
122
  end
121
123
 
122
124
  private
@@ -22,7 +22,7 @@ module Spree
22
22
  end
23
23
 
24
24
  def permitted_params
25
- params.permit(:prefix, :codes_count, :amount, :expires_at, :currency)
25
+ params.permit(*model_additional_permitted_attributes, :prefix, :codes_count, :amount, :expires_at, :currency)
26
26
  end
27
27
  end
28
28
  end
@@ -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 user_id).
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, :user_id, :currency)
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.start_mapping!
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.complete_mapping!
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 @resource.retry_failed_rows
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 metafield
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
- headers = klass.new.schema_fields.map { |field| field[:name] }
154
- send_data ::CSV.generate_line(headers),
155
- filename: "#{klass.name.demodulize.underscore}_import_template.csv",
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
- owner: current_store,
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
- # The constantize target comes from `available_types` (a trusted
219
- # in-process registry), not from the request — `name` is only used
220
- # to *select* an entry in the allowlist (same pattern as
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
- target = Spree::Import.available_types.map(&:to_s).find { |t| t == name.to_s }
226
- target&.constantize
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: RATE_LIMIT_RESPONSE
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.accept!
35
+ result = Spree.invitation_accept_workflow.call(invitation: @invitation)
36
36
 
37
- refresh_token = Spree::RefreshToken.create_for(user, request_env: request_env_for_token)
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
- scoped_resource :settings
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
- scoped_resource :settings
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
- # `country_isos` and `supported_locales` are accepted as arrays on the
11
- # wire and translated by model setters (`Spree::Market#country_isos=`,
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
- [:countries]
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: [], country_isos: []
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