spree_api 5.6.1 → 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 (540) 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 -2
  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 +19 -4
  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 +2 -2
  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 +71 -8
  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/data_requests_controller.rb +78 -0
  251. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
  252. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
  253. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
  254. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
  255. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
  256. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
  257. data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
  258. data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
  259. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
  260. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
  261. data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
  262. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
  263. data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
  264. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
  265. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
  266. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
  267. data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
  268. data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
  269. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
  270. data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
  271. data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
  272. data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
  273. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
  274. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
  275. data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
  276. data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
  277. data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
  278. data/app/models/spree/api/data_request_urls.rb +25 -0
  279. data/app/models/spree/api/digital_link_urls.rb +26 -0
  280. data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
  281. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  282. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  283. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  284. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  285. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  286. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  294. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  295. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  296. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  297. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  298. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
  299. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  300. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  301. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  302. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  304. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  305. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  306. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  307. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  308. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  309. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  310. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  311. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  312. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  314. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  315. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  316. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  318. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  319. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  322. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  323. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  325. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  326. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  327. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  328. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
  329. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  330. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  331. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  333. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  335. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  336. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  337. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  338. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  339. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
  340. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  341. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  342. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  343. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  345. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  346. data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
  347. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  348. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  349. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  350. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  351. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  352. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  353. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  354. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  356. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  357. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  358. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  359. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  360. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  362. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  363. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  364. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  365. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  366. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  367. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
  368. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  369. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  370. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  371. data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
  372. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  373. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
  374. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  375. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  376. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  379. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  380. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  381. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  382. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  383. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  384. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  385. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  386. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  387. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
  389. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  390. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  392. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  393. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  394. data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
  395. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  396. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  397. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  398. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  399. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  400. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  401. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  402. data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
  403. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  404. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  405. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  406. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  407. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  408. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  409. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  410. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  412. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  413. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  414. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  415. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  416. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  417. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  418. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  419. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  421. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  422. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  423. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  424. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  425. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  426. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  427. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  428. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  429. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  430. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  431. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  432. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  433. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  434. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  435. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  436. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  437. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  438. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  440. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  441. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  442. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  443. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  444. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  445. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  446. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  447. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  448. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  449. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  450. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  451. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  452. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  453. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  454. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  455. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  456. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  457. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  463. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  465. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  466. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  468. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  469. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  470. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  471. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  472. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  473. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  474. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  475. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  476. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  477. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  478. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  479. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  480. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  481. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  482. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  483. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  484. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  487. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  488. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  489. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  490. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  491. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  492. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  493. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  494. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  495. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  496. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  497. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  498. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  499. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  500. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  501. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  502. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  503. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  504. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  505. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  506. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  507. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  508. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  509. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  510. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  511. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  512. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  513. data/config/brakeman.ignore +1 -1
  514. data/config/initializers/typelizer.rb +51 -4
  515. data/config/locales/en.yml +5 -0
  516. data/config/routes.rb +730 -22
  517. data/lib/spree/api/configuration.rb +2 -7
  518. data/lib/spree/api/dependencies.rb +173 -227
  519. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  520. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  521. data/lib/spree/api.rb +10 -4
  522. data/lib/typelizer/open_enums.rb +35 -0
  523. metadata +341 -27
  524. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  525. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  526. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  527. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  528. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  529. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  530. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  531. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  532. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  533. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  535. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  536. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  537. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  538. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  539. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  540. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -0,0 +1,105 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ class DigitalLinksController < Store::BaseController
6
+ # Lets the Disk service build absolute URLs from the current request;
7
+ # remote services (S3 et al.) sign without it.
8
+ include ActiveStorage::SetCurrent
9
+
10
+ allow_guest_storefront_access!
11
+ skip_before_action :authenticate_api_key!
12
+ before_action :set_resource
13
+
14
+ # GET /api/v3/store/digital_links/:token
15
+ #
16
+ # Hands the customer their deliverable: a redirect to a short-lived
17
+ # signed URL (an uploaded file, an external link) or an inline body (a
18
+ # license key). The provider decides which; this controller only
19
+ # settles authorization and renders the shape.
20
+ def show
21
+ if (delivery = authorized_delivery)
22
+ @resource.publish_event('digital_link.downloaded')
23
+ render_delivery(delivery)
24
+ else
25
+ render_error(
26
+ code: ERROR_CODES[:digital_link_expired],
27
+ message: 'Download link expired or invalid',
28
+ status: :forbidden
29
+ )
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ # Everything that can refuse is settled before the click is spent: the
36
+ # link must permit a download, the window must be open, the provider
37
+ # must actually produce a deliverable (a provider that errors or has
38
+ # nothing refuses cleanly), and only then is the click consumed under
39
+ # the lock. So a dry provider or a missing file never burns an
40
+ # allowance.
41
+ #
42
+ # @return [Spree::DigitalDelivery, nil]
43
+ def authorized_delivery
44
+ return unless @resource.authorizable?
45
+
46
+ window = signed_url_window
47
+ return if window <= 0
48
+
49
+ delivery = safe_deliver(window)
50
+ return unless delivery&.present?
51
+ return unless @resource.authorize!
52
+
53
+ delivery
54
+ end
55
+
56
+ # A provider is external I/O; an exception must refuse, not 500, and
57
+ # must not spend the click (it hasn't been spent yet at this point).
58
+ def safe_deliver(window)
59
+ @resource.digital_asset.deliver(@resource, expires_in: window)
60
+ rescue StandardError => e
61
+ Rails.logger.error("Digital delivery failed for #{@resource.prefixed_id}: #{e.class}: #{e.message}")
62
+ nil
63
+ end
64
+
65
+ def render_delivery(delivery)
66
+ if delivery.redirect?
67
+ redirect_to delivery.redirect_url, allow_other_host: true
68
+ else
69
+ send_data delivery.inline_value,
70
+ type: delivery.content_type.presence || 'application/octet-stream',
71
+ disposition: 'inline'
72
+ end
73
+ end
74
+
75
+ # The signed URL is a bearer credential, so it must never outlive the
76
+ # link that authorized it — otherwise an expired link keeps handing
77
+ # out working URLs for the rest of the store's window.
78
+ def signed_url_window
79
+ window = current_store.preferred_digital_asset_link_expire_time.seconds
80
+ return window unless (expiry = @resource.expires_at)
81
+
82
+ [window, expiry - Time.current].min
83
+ end
84
+
85
+ # The download token is the request's credential and selects the
86
+ # store (tokens are globally unique via has_secure_token) — no
87
+ # publishable key accompanies emailed download links, so there is no
88
+ # other credential to derive store context from.
89
+ def set_resource
90
+ @resource = digital_link_scope.find_by!(token: params[:token])
91
+ Spree::Current.store = current_store
92
+ end
93
+
94
+ def digital_link_scope
95
+ Spree::DigitalLink
96
+ end
97
+
98
+ def current_store
99
+ @current_store ||= @resource&.store || super
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -3,28 +3,24 @@ module Spree
3
3
  module V3
4
4
  module Store
5
5
  module Markets
6
+ # Uncached for the same reason as the top-level countries endpoint.
6
7
  class CountriesController < Store::BaseController
7
8
  allow_guest_storefront_access!
8
- include Spree::Api::V3::HttpCaching
9
9
 
10
10
  before_action :load_market
11
11
 
12
12
  # GET /api/v3/store/markets/:market_id/countries
13
13
  def index
14
- countries = @market.countries.order(:name)
15
-
16
- return unless cache_collection(countries)
17
-
18
14
  render json: {
19
- data: countries.map { |country| serialize_country(country) }
15
+ data: @market.countries.map { |country| serialize_country(country) }
20
16
  }
21
17
  end
22
18
 
23
19
  # GET /api/v3/store/markets/:market_id/countries/:id
24
20
  def show
25
- country = @market.countries.find_by!(iso: params[:id].upcase)
26
-
27
- return unless cache_resource(country)
21
+ iso = params[:id].to_s.upcase
22
+ country = @market.countries.find { |candidate| candidate.iso == iso }
23
+ raise ActiveRecord::RecordNotFound if country.nil?
28
24
 
29
25
  render json: serialize_country(country)
30
26
  end
@@ -8,7 +8,7 @@ module Spree
8
8
 
9
9
  # GET /api/v3/store/markets
10
10
  def index
11
- markets = current_store.markets.includes(:countries).order(:position)
11
+ markets = current_store.markets.includes(:market_countries).ordered
12
12
 
13
13
  return unless cache_collection(markets)
14
14
 
@@ -19,7 +19,7 @@ module Spree
19
19
 
20
20
  # GET /api/v3/store/markets/:id
21
21
  def show
22
- market = current_store.markets.includes(:countries).find_by_prefix_id!(params[:id])
22
+ market = current_store.markets.includes(:market_countries).find_by_prefix_id!(params[:id])
23
23
 
24
24
  return unless cache_resource(market)
25
25
 
@@ -28,8 +28,8 @@ module Spree
28
28
 
29
29
  # GET /api/v3/store/markets/resolve?country=DE
30
30
  def resolve
31
- country_iso = params[:country]&.upcase
32
- country = Spree::Country.find_by!(iso: country_iso)
31
+ country_code = params[:country]&.upcase
32
+ country = Spree::Country.find_by_iso!(country_code)
33
33
  market = current_store.market_for_country(country)
34
34
 
35
35
  raise ActiveRecord::RecordNotFound unless market
@@ -8,13 +8,13 @@ module Spree
8
8
  within: Spree::Api::Config[:rate_limit_window].seconds,
9
9
  store: Rails.cache,
10
10
  only: [:create, :verify, :request_unsubscribe],
11
- with: RATE_LIMIT_RESPONSE
11
+ with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_register]) }
12
12
 
13
13
  # POST /api/v3/store/newsletter_subscribers
14
14
  def create
15
15
  subscriber = Spree::NewsletterSubscriber.subscribe(
16
16
  email: params[:email],
17
- user: current_user,
17
+ customer: current_user,
18
18
  store: current_store,
19
19
  redirect_url: validated_redirect_url
20
20
  )
@@ -69,12 +69,12 @@ module Spree
69
69
  )
70
70
  end
71
71
 
72
- linked_user = subscriber.user
72
+ linked_customer = subscriber.customer
73
73
  subscriber.destroy!
74
74
 
75
75
  # Keep accepts_email_marketing in sync, but only when no subscriptions remain.
76
- if linked_user&.accepts_email_marketing? && Spree::NewsletterSubscriber.where(user_id: linked_user.id).none?
77
- linked_user.update(accepts_email_marketing: false)
76
+ if linked_customer&.accepts_email_marketing? && Spree::NewsletterSubscriber.where(customer_id: linked_customer.id).none?
77
+ linked_customer.update(accepts_email_marketing: false)
78
78
  end
79
79
 
80
80
  head :no_content
@@ -92,7 +92,7 @@ module Spree
92
92
  email: subscriber.email,
93
93
  unsubscribe_token: subscriber.generate_token_for(:unsubscribe),
94
94
  store_id: current_store.prefixed_id,
95
- customer_id: subscriber.user&.prefixed_id
95
+ customer_id: subscriber.customer&.prefixed_id
96
96
  }
97
97
 
98
98
  redirect_url = validated_redirect_url
@@ -115,9 +115,8 @@ module Spree
115
115
  def find_owned_subscriber
116
116
  return unless current_user
117
117
 
118
- Spree::NewsletterSubscriber.
119
- for_store(current_store).
120
- accessible_by(current_ability, :destroy).
118
+ storefront_access_policy.
119
+ scope(Spree::NewsletterSubscriber.for_store(current_store)).
121
120
  find_by_prefix_id(params[:id])
122
121
  end
123
122
 
@@ -0,0 +1,94 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ # Customer self-service claims — reporting a damaged, missing or
7
+ # wrong item. Approving, denying and resolving are the merchant's,
8
+ # through the Admin API.
9
+ #
10
+ # Whether a customer may file a claim is store policy and belongs in
11
+ # a `claims.create.validate` hook rather than here.
12
+ class ClaimsController < Store::ResourceController
13
+ def create
14
+ result = Spree.claim_create_workflow.call(
15
+ order: @parent,
16
+ items: items_for_create,
17
+ reason: reason_for_create,
18
+ memo: create_params[:memo]
19
+ )
20
+
21
+ if result.success?
22
+ render json: serialize_resource(result.value), status: :created
23
+ else
24
+ render_result_error(result)
25
+ end
26
+ end
27
+
28
+ protected
29
+
30
+ def model_class
31
+ Spree::Claim
32
+ end
33
+
34
+ def serializer_class
35
+ Spree.api.claim_serializer
36
+ end
37
+
38
+ def scope
39
+ @parent.claims.order(created_at: :desc)
40
+ end
41
+
42
+ def collection_includes
43
+ [{ claim_line_items: :variant }]
44
+ end
45
+
46
+ def set_parent
47
+ cart_pk = Spree::Cart.decode_own_prefixed_id(params[:order_id])
48
+ @parent = if cart_pk
49
+ order_scope.find_by!(cart_id: cart_pk)
50
+ else
51
+ order_scope.find_by_prefix_id!(params[:order_id])
52
+ end
53
+ end
54
+
55
+ # Authorization is the parent order's — see the returns
56
+ # controller for why a second record-level check is wrong here.
57
+ def set_resource
58
+ @resource = find_resource
59
+ end
60
+
61
+ def order_scope
62
+ storefront_access_policy.scope(current_store.orders.complete, token: order_token)
63
+ end
64
+
65
+ def create_params
66
+ @create_params ||= params.permit(:memo, :reason_id,
67
+ items: [:line_item_id, :quantity, :description])
68
+ end
69
+
70
+ private
71
+
72
+ def items_for_create
73
+ Array(create_params[:items]).map do |item|
74
+ {
75
+ line_item: @parent.line_items.find_by_prefix_id!(item[:line_item_id]),
76
+ quantity: item[:quantity].to_i,
77
+ description: item[:description]
78
+ }
79
+ end
80
+ end
81
+
82
+ # Read through the store so a reason belonging to another store
83
+ # 404s rather than being silently attached.
84
+ def reason_for_create
85
+ return nil if create_params[:reason_id].blank?
86
+
87
+ current_store.claim_reasons.find_by_prefix_id!(create_params[:reason_id])
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,116 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ # Customer self-service returns. A customer can open a return and
7
+ # see the ones they opened; everything after that — approving,
8
+ # receiving, refunding — is the merchant's to do through the Admin
9
+ # API.
10
+ #
11
+ # Whether a customer may open a return at all is store policy, and
12
+ # belongs in a `returns.create.validate` hook rather than here.
13
+ class ReturnsController < Store::ResourceController
14
+ include Spree::Api::V3::StreamsShippingLabel
15
+
16
+ # Re-declaring the filter replaces the inherited options, so the
17
+ # standard actions are listed alongside the label download.
18
+ before_action :set_resource, only: [:show, :update, :destroy, :label]
19
+
20
+ # GET /api/v3/store/orders/:order_id/returns/:id/label
21
+ #
22
+ # The customer's return label, streamed to whoever owns the order.
23
+ # The label row itself is never serialized to the storefront —
24
+ # its cost and provider ids are merchant data — only the file.
25
+ def label
26
+ shipping_label = @resource.active_shipping_label
27
+ return head :not_found if shipping_label.nil?
28
+
29
+ stream_shipping_label(shipping_label) { head :not_found }
30
+ end
31
+
32
+ def create
33
+ result = Spree.return_create_workflow.call(
34
+ order: @parent,
35
+ items: items_for_create,
36
+ reason: reason_for_create,
37
+ memo: create_params[:memo]
38
+ )
39
+
40
+ if result.success?
41
+ render json: serialize_resource(result.value), status: :created
42
+ else
43
+ render_result_error(result)
44
+ end
45
+ end
46
+
47
+ protected
48
+
49
+ def model_class
50
+ Spree::Return
51
+ end
52
+
53
+ def serializer_class
54
+ Spree.api.return_serializer
55
+ end
56
+
57
+ def scope
58
+ @parent.returns.order(created_at: :desc)
59
+ end
60
+
61
+ def collection_includes
62
+ [{ return_line_items: :variant }]
63
+ end
64
+
65
+ # Authorization is the parent order's: set_parent already proved
66
+ # this customer owns it (by JWT or guest token), and the scope is
67
+ # that order's own returns.
68
+ def set_resource
69
+ @resource = find_resource
70
+ end
71
+
72
+ def read_actions
73
+ %w[index show label]
74
+ end
75
+
76
+ # The order is the customer's own — by JWT or by guest token,
77
+ # mirroring Store::OrdersController.
78
+ def set_parent
79
+ cart_pk = Spree::Cart.decode_own_prefixed_id(params[:order_id])
80
+ @parent = if cart_pk
81
+ order_scope.find_by!(cart_id: cart_pk)
82
+ else
83
+ order_scope.find_by_prefix_id!(params[:order_id])
84
+ end
85
+ end
86
+
87
+ def order_scope
88
+ storefront_access_policy.scope(current_store.orders.complete, token: order_token)
89
+ end
90
+
91
+ def create_params
92
+ @create_params ||= params.permit(:memo, :reason_id, items: [:fulfillment_item_id, :quantity])
93
+ end
94
+
95
+ private
96
+
97
+ def items_for_create
98
+ Array(create_params[:items]).map do |item|
99
+ {
100
+ fulfillment_item: @parent.fulfillment_items.find_by_prefix_id!(item[:fulfillment_item_id]),
101
+ quantity: item[:quantity].to_i
102
+ }
103
+ end
104
+ end
105
+
106
+ def reason_for_create
107
+ return nil if create_params[:reason_id].blank?
108
+
109
+ current_store.return_reasons.find_by_prefix_id!(create_params[:reason_id])
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,46 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ module Orders
6
+ # Read-only: an order's registration is the snapshot taken when it was
7
+ # placed, and an invoice has to keep saying what it said.
8
+ class TaxIdentifiersController < Store::BaseController
9
+ # GET /api/v3/store/orders/:order_id/tax_identifier
10
+ def show
11
+ return head :not_found if order.tax_identifier.nil?
12
+
13
+ render json: serialize_resource(order.tax_identifier)
14
+ end
15
+
16
+ protected
17
+
18
+ def serializer_class
19
+ Spree.api.tax_identifier_serializer
20
+ end
21
+
22
+ private
23
+
24
+ # The order is the customer's own — by JWT or by guest token,
25
+ # mirroring Store::Orders::ReturnsController. The scope is the
26
+ # enforcement: an order the caller does not own is simply not found.
27
+ def order
28
+ @order ||= begin
29
+ cart_pk = Spree::Cart.decode_own_prefixed_id(params[:order_id])
30
+ if cart_pk
31
+ order_scope.find_by!(cart_id: cart_pk)
32
+ else
33
+ order_scope.find_by_prefix_id!(params[:order_id])
34
+ end
35
+ end
36
+ end
37
+
38
+ def order_scope
39
+ storefront_access_policy.scope(current_store.orders.complete, token: order_token)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -13,30 +13,27 @@ module Spree
13
13
 
14
14
  private
15
15
 
16
+ # The cart's prefixed id stays the client's stable checkout handle:
17
+ # after completion it resolves here to the order created from that
18
+ # cart (Order#cart_id is unique; the order copies the cart token).
16
19
  def find_order!
17
- @order = scope.find_by_prefix_id!(params[:id])
18
- authorize!(:show, @order, order_token)
20
+ cart_pk = Spree::Cart.decode_own_prefixed_id(params[:id])
21
+ @order = cart_pk ? scope.find_by!(cart_id: cart_pk) : scope.find_by_prefix_id!(params[:id])
19
22
  end
20
23
 
24
+ # `market` and `fulfillments` are the withdrawal deadline's inputs and
25
+ # the serializer emits it on every response, so they are preloaded
26
+ # here rather than through `collection_includes` — this controller
27
+ # loads through `find_order!`, which never touches a collection.
21
28
  def scope
22
- base = current_store.orders.complete
23
-
24
- if current_user.present?
25
- base.where(user: current_user)
26
- elsif order_token.present?
27
- base.where(token: order_token)
28
- else
29
- base.none
30
- end
29
+ storefront_access_policy.
30
+ scope(current_store.orders.complete, token: order_token).
31
+ includes(:market, :fulfillments)
31
32
  end
32
33
 
33
34
  def serializer_class
34
35
  Spree.api.order_serializer
35
36
  end
36
-
37
- def order_token
38
- request.headers['x-spree-token']
39
- end
40
37
  end
41
38
  end
42
39
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  result = search_provider.filters(
12
12
  scope: filters_scope,
13
13
  query: search_query,
14
- filters: (search_filters || {}).merge('_category' => category)
14
+ filters: (search_filters || {}).merge('_category' => category, '_collection' => collection)
15
15
  )
16
16
 
17
17
  serialize_resource(result)
@@ -41,11 +41,12 @@ module Spree
41
41
  current_currency,
42
42
  current_locale,
43
43
  category&.cache_key_with_version,
44
+ collection&.cache_key_with_version,
44
45
  search_query,
45
46
  search_filters&.sort_by(&:first)&.to_json,
46
47
  max_updated,
47
48
  product_count,
48
- search_provider.metafield_schema.schema_version
49
+ search_provider.custom_field_schema.schema_version
49
50
  ]
50
51
 
51
52
  parts.compact.join('/')
@@ -57,13 +58,19 @@ module Spree
57
58
  # included).
58
59
  scope = current_store.products.available(Time.current, current_currency, include_preorderable: true)
59
60
  scope = scope.in_category(category) if category.present?
60
- scope.accessible_by(current_ability, :show)
61
+ scope = scope.in_collection(collection) if collection.present?
62
+ scope
61
63
  end
62
64
 
63
65
  def category
64
66
  category_id = params[:category_id]
65
67
  @category ||= category_id.present? ? current_store.categories.find_by_param(category_id) : nil
66
68
  end
69
+
70
+ def collection
71
+ collection_id = params[:collection_id]
72
+ @collection ||= collection_id.present? ? current_store.collections.find_by_param(collection_id) : nil
73
+ end
67
74
  end
68
75
  end
69
76
  end
@@ -29,16 +29,35 @@ module Spree
29
29
  end
30
30
 
31
31
  def scope
32
- super.available(Time.current, Spree::Current.currency, include_preorderable: true)
32
+ base = super.available(Time.current, Spree::Current.currency, include_preorderable: true)
33
+
34
+ # Catalog narrowing for the buyer: their company's effective
35
+ # catalogs, their group's, or the channel default — union of
36
+ # assortments, resolved in one place
37
+ # (docs/plans/6.0-b2b-companies-and-catalogs.md).
38
+ Spree.products_for_context_service.call(
39
+ store: current_store,
40
+ channel: current_channel,
41
+ customer: current_user,
42
+ base: base
43
+ ).value
33
44
  end
34
45
 
35
46
  # these scopes are not automatically picked by ar_lazy_preload gem and we need to explicitly include them
36
47
  def scope_includes
37
48
  [
38
- product_publications: [],
39
- primary_media: [attachment_attachment: :blob],
40
- master: [:prices, stock_items: [:stock_location, :active_stock_reservations]],
41
- variants: [:prices, stock_items: [:stock_location, :active_stock_reservations]]
49
+ # `seller` is declared on both sides rather than left to lazy
50
+ # preloading: the buy box asks every variant who is selling it,
51
+ # and a variant with no seller of its own asks its product — so a
52
+ # listing would otherwise depend on ambient behaviour to avoid an
53
+ # N+1 on whichever of the two answers.
54
+ :seller,
55
+ {
56
+ product_publications: [],
57
+ primary_media: [attachment_attachment: :blob, poster_attachment: :blob],
58
+ default_variant: [:prices, stock_levels: [:stock_location, :active_stock_reservations]],
59
+ variants: [:prices, :seller, stock_levels: [:stock_location, :active_stock_reservations]]
60
+ }
42
61
  ]
43
62
  end
44
63
 
@@ -48,7 +67,7 @@ module Spree
48
67
  return @collection if @collection.present?
49
68
 
50
69
  result = search_provider.search_and_filter(
51
- scope: scope.includes(collection_includes).preload_associations_lazily.accessible_by(current_ability, :show),
70
+ scope: scope.includes(collection_includes).preload_associations_lazily,
52
71
  query: search_query,
53
72
  filters: search_filters,
54
73
  sort: sort_param,
@@ -6,8 +6,10 @@ module Spree
6
6
  # inheritance branches (V3::BaseController vs V3::ResourceController);
7
7
  # any concern added here MUST also be added to Store::BaseController.
8
8
  class ResourceController < Spree::Api::V3::ResourceController
9
+ include Spree::Api::V3::KeyStoreContext
9
10
  include Spree::Api::V3::ChannelResolution
10
11
  include Spree::Api::V3::StorefrontGating
12
+ include Spree::Api::V3::StorefrontAccess
11
13
 
12
14
  # The inherited +set_parent+/+set_resource+ callbacks were registered
13
15
  # before the two concerns above, so they'd run resource lookups ahead
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Store
5
+ # Public seller profiles.
6
+ #
7
+ # Read-only, and scoped to sellers a shopper can actually buy from: one
8
+ # still onboarding, suspended or away has nothing to show a customer,
9
+ # and listing them would advertise sellers whose products cannot be
10
+ # bought.
11
+ class SellersController < ResourceController
12
+ include Spree::Api::V3::HttpCaching
13
+
14
+ protected
15
+
16
+ def model_class
17
+ Spree::Seller
18
+ end
19
+
20
+ def serializer_class
21
+ Spree.api.seller_serializer
22
+ end
23
+
24
+ def scope
25
+ super.sellable
26
+ end
27
+
28
+ # By slug or prefixed ID, so a storefront can route
29
+ # `/sellers/sparks-audio` without holding an id.
30
+ def find_resource
31
+ id = params[:id]
32
+
33
+ if id.to_s.start_with?('sel_')
34
+ scope.find_by_prefix_id!(id)
35
+ else
36
+ scope.find_by!(slug: id)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end