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
@@ -7,24 +7,36 @@ module Spree
7
7
  scoped_resource :refunds
8
8
 
9
9
  # POST /api/v3/admin/orders/:order_id/refunds
10
+ #
11
+ # Deliberately not wrapped in with_order_lock: the workflow calls
12
+ # the gateway from an external_step, and holding a row lock across
13
+ # a network round trip is exactly what that boundary exists to
14
+ # prevent. Refund#perform! is a no-op on a credited refund, so a
15
+ # double submit cannot credit twice.
10
16
  def create
11
- with_order_lock do
12
- payment = @parent.payments.accessible_by(current_ability, :update).find_by_prefix_id!(params[:payment_id])
13
- reason = Spree::RefundReason.accessible_by(current_ability, :show).find_by_prefix_id!(params[:refund_reason_id]) if params[:refund_reason_id].present?
14
- reason ||= Spree::RefundReason.accessible_by(current_ability, :show).first
15
-
16
- @resource = payment.refunds.build(
17
- amount: params[:amount],
18
- reason: reason,
19
- transaction_id: nil
20
- )
21
- authorize_resource!(@resource, :create)
22
-
23
- if @resource.save
24
- render json: serialize_resource(@resource), status: :created
25
- else
26
- render_validation_error(@resource.errors)
27
- end
17
+ payment = settlement_payments.accessible_by(current_ability, :update).find_by_prefix_id!(params[:payment_id])
18
+ # Scoped to the store, not just the ability — a reason id from
19
+ # another store must 404, not attach.
20
+ reason = current_store.refund_reasons.accessible_by(current_ability, :show).find_by_prefix_id!(params[:refund_reason_id]) if params[:refund_reason_id].present?
21
+ reason ||= current_store.refund_reasons.accessible_by(current_ability, :show).first
22
+
23
+ authorize_resource!(payment.refunds.build(amount: params[:amount], reason: reason), :create)
24
+
25
+ result = Spree.refund_create_workflow.call(
26
+ payment: payment,
27
+ amount: params[:amount],
28
+ reason: reason,
29
+ refunder: try_spree_current_user,
30
+ # Names which order is being refunded. Only matters when the
31
+ # payment is shared by a split checkout, where it covers several
32
+ # and the payment cannot say which one this is for.
33
+ order: @parent
34
+ )
35
+
36
+ if result.success?
37
+ render json: serialize_resource(result.value), status: :created
38
+ else
39
+ render_result_error(result)
28
40
  end
29
41
  end
30
42
 
@@ -38,8 +50,17 @@ module Spree
38
50
  Spree.api.admin_refund_serializer
39
51
  end
40
52
 
53
+ # Every refund names the order it put right, so this reads the same
54
+ # for an ordinary order and for one placed in a split checkout,
55
+ # whose payments belong to its group rather than to itself.
41
56
  def scope
42
- Spree::Refund.where(payment_id: @parent.payment_ids)
57
+ Spree::Refund.where(order_id: @parent.id)
58
+ end
59
+
60
+ # The payments that can settle this order — its own, or its group's
61
+ # when it was placed alongside others.
62
+ def settlement_payments
63
+ @parent.settlement_payments
43
64
  end
44
65
 
45
66
  def collection_includes
@@ -0,0 +1,70 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # Returns on a completed order. Every status change goes through its
7
+ # own member action rather than mass assignment, because each one is
8
+ # a workflow with its own arguments — receiving carries the
9
+ # quantities the warehouse counted, refunding carries a method and
10
+ # an amount.
11
+ class ReturnsController < BaseController
12
+ include Spree::Api::V3::Orders::ReturnActions
13
+
14
+ # Returns are a subject of the `orders` catalog resource (see
15
+ # Spree::PermissionConfiguration), so `read_orders`/`write_orders`
16
+ # gate these endpoints — matching the cross-order ReturnsController.
17
+ # Declaring `:returns` here would name a key no catalog knows: the
18
+ # JWT gate would silently no-op and a `write_orders` secret key
19
+ # would be wrongly denied.
20
+ scoped_resource :orders
21
+
22
+ before_action :set_resource, only: [:show, :update, :approve, :receive, :refund, :cancel]
23
+
24
+ # PATCH /api/v3/admin/orders/:order_id/returns/:id
25
+ #
26
+ # Editable fields only — status moves through the member actions.
27
+ def update
28
+ if @resource.update(permitted_params)
29
+ render json: serialize_resource(@resource.reload)
30
+ else
31
+ render_validation_error(@resource.errors)
32
+ end
33
+ end
34
+
35
+ protected
36
+
37
+ def serializer_class
38
+ Spree.api.admin_return_serializer
39
+ end
40
+
41
+ # `documents` resolves the provider through the returned units and
42
+ # reads the labels it produced, so both are preloaded: without them
43
+ # a page of returns is a query per row.
44
+ def collection_includes
45
+ [
46
+ :reason, :stock_location, :deliveries,
47
+ { shipping_labels: { file_attachment: :blob } },
48
+ { return_line_items: [:variant, :line_item, { fulfillment_item: :fulfillment }] }
49
+ ]
50
+ end
51
+
52
+ def permitted_params
53
+ params.permit(:memo, :reason_id, :stock_location_id, metadata: {})
54
+ end
55
+
56
+ private
57
+
58
+ # Any of the store's warehouses the caller may see.
59
+ def stock_location_for_create
60
+ return nil if create_params[:stock_location_id].blank?
61
+
62
+ current_store.stock_locations.accessible_by(current_ability, :show).
63
+ find_by_prefix_id!(create_params[:stock_location_id])
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -14,7 +14,7 @@ module Spree
14
14
  # credit up to the order total.
15
15
  def create
16
16
  with_order_lock do
17
- result = Spree.checkout_add_store_credit_service.call(
17
+ result = Spree.store_credit_apply_service.call(
18
18
  order: @parent,
19
19
  amount: params[:amount].try(:to_f)
20
20
  )
@@ -30,7 +30,7 @@ module Spree
30
30
  # DELETE /api/v3/admin/orders/:order_id/store_credits
31
31
  def destroy
32
32
  with_order_lock do
33
- result = Spree.checkout_remove_store_credit_service.call(order: @parent)
33
+ result = Spree.store_credit_remove_service.call(order: @parent)
34
34
 
35
35
  if result.success?
36
36
  head :no_content
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # The registration the order was taxed against, frozen at completion.
7
+ # Read-only because the row is: staff investigating why an invoice was
8
+ # zero-rated need to see the number and the verdict behind it, not
9
+ # change what the invoice already says.
10
+ class TaxIdentifiersController < BaseController
11
+ # A singular nested resource: there is no :id to look up, and the
12
+ # inherited lookup would reach for a plural association that does
13
+ # not exist. Mirrors Orders::StoreCreditsController.
14
+ skip_before_action :set_resource, raise: false
15
+
16
+ scoped_resource :orders
17
+
18
+ # GET /api/v3/admin/orders/:order_id/tax_identifier
19
+ def show
20
+ return head :not_found if @parent.tax_identifier.nil?
21
+
22
+ authorize_resource!(@parent.tax_identifier, :show)
23
+
24
+ render json: serialize_resource(@parent.tax_identifier)
25
+ end
26
+
27
+ protected
28
+
29
+ def model_class
30
+ Spree::TaxIdentifier
31
+ end
32
+
33
+ def serializer_class
34
+ Spree.api.admin_tax_identifier_serializer
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module Orders
6
+ # Read-only: tax lines are written exclusively by the tax provider.
7
+ class TaxLinesController < BaseController
8
+ scoped_resource :orders
9
+
10
+ protected
11
+
12
+ def model_class
13
+ Spree::TaxLine
14
+ end
15
+
16
+ def serializer_class
17
+ Spree.api.admin_tax_line_serializer
18
+ end
19
+
20
+ def scope
21
+ @parent.tax_lines
22
+ end
23
+
24
+ def collection_includes
25
+ [:tax_rate, :line_item, :fulfillment, :fee]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,8 +7,14 @@ module Spree
7
7
 
8
8
  scoped_resource :orders
9
9
 
10
+ # The order accepts a `po_document` signed blob id and streams it back.
11
+ include ActiveStorage::SetCurrent
12
+
13
+ # A tampered signed id would otherwise surface as a 500.
14
+ rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_po_document
15
+
10
16
  skip_before_action :set_resource, only: [:index, :create]
11
- before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :resume, :resend_confirmation]
17
+ before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links, :po_document]
12
18
 
13
19
  # POST /api/v3/admin/orders
14
20
  def create
@@ -16,7 +22,8 @@ module Spree
16
22
 
17
23
  result = Spree.order_create_service.call(
18
24
  store: current_store,
19
- user: resolve_user,
25
+ customer: resolve_customer,
26
+ created_by: try_spree_current_user,
20
27
  params: order_create_params
21
28
  )
22
29
 
@@ -49,7 +56,7 @@ module Spree
49
56
  with_order_lock do
50
57
  result = Spree.order_complete_service.call(
51
58
  order: @resource,
52
- payment_pending: ActiveModel::Type::Boolean.new.cast(params[:payment_pending]),
59
+ payment_pending: params[:payment_pending].to_b,
53
60
  notify_customer: ActiveModel::Type::Boolean.new.cast(params[:notify_customer])
54
61
  )
55
62
 
@@ -64,8 +71,21 @@ module Spree
64
71
  # PATCH /api/v3/admin/orders/:id/cancel
65
72
  def cancel
66
73
  with_order_lock do
67
- @resource.canceled_by(try_spree_current_user)
68
- render json: serialize_resource(@resource.reload)
74
+ result = Spree.order_cancel_workflow.call(
75
+ order: @resource,
76
+ canceler: try_spree_current_user,
77
+ reason: cancel_reason,
78
+ note: params[:cancel_note].presence,
79
+ refund_payments: params[:refund_payments].to_b,
80
+ refund_amount: params[:refund_amount].presence,
81
+ notify_customer: params[:notify_customer].to_b
82
+ )
83
+
84
+ if result.success?
85
+ render json: serialize_resource(@resource.reload)
86
+ else
87
+ render_service_error(@resource.errors.presence || result.error)
88
+ end
69
89
  end
70
90
  end
71
91
 
@@ -77,22 +97,50 @@ module Spree
77
97
  end
78
98
  end
79
99
 
80
- # PATCH /api/v3/admin/orders/:id/resume
81
- def resume
82
- with_order_lock do
83
- @resource.resume!
84
- render json: serialize_resource(@resource.reload)
85
- end
86
- end
87
-
88
100
  # POST /api/v3/admin/orders/:id/resend_confirmation
89
101
  def resend_confirmation
90
- @resource.publish_event('order.completed')
102
+ @resource.publish_event('order.resend_confirmation_email')
91
103
  render json: serialize_resource(@resource)
92
104
  end
93
105
 
106
+ # POST /api/v3/admin/orders/:id/resend_digital_links
107
+ def resend_digital_links
108
+ @resource.publish_event('order.resend_digital_links_email')
109
+ render json: serialize_resource(@resource)
110
+ end
111
+
112
+ # GET /api/v3/admin/orders/:id/po_document
113
+ #
114
+ # The buyer's purchase order, streamed rather than redirected so the
115
+ # document is never reachable without admin credentials.
116
+ def po_document
117
+ unless @resource.po_document.attached?
118
+ return render_error(
119
+ code: ERROR_CODES[:validation_error],
120
+ message: Spree.t(:po_document_missing),
121
+ status: :unprocessable_content
122
+ )
123
+ end
124
+
125
+ send_data(
126
+ @resource.po_document.download,
127
+ filename: @resource.po_document.filename.to_s,
128
+ type: @resource.po_document.content_type || 'application/octet-stream',
129
+ disposition: 'attachment'
130
+ )
131
+ end
132
+
94
133
  protected
95
134
 
135
+ # Fetching the document is a read of the order, so it takes the read
136
+ # scope rather than being classed as a write for not being index or
137
+ # show.
138
+ READ_ACTIONS = %w[index show po_document].freeze
139
+
140
+ def read_actions
141
+ READ_ACTIONS
142
+ end
143
+
96
144
  def model_class
97
145
  Spree::Order
98
146
  end
@@ -101,13 +149,25 @@ module Spree
101
149
  Spree.api.admin_order_serializer
102
150
  end
103
151
 
104
- # Override scope — Order uses SingleStoreResource (for_store)
152
+ # Override scope — Order uses SingleStoreResource (for_store).
153
+ # Variant prices are preloaded here rather than via scope_includes,
154
+ # which this override bypasses; the serializer reads them per row.
105
155
  def scope
106
- current_store.orders.accessible_by(current_ability, :show).preload_associations_lazily
156
+ base = current_store.orders.accessible_by(current_ability, :show).
157
+ includes(line_items: { variant: :prices }).preload_associations_lazily
158
+
159
+ # Transient completion drafts (status draft + cart_id set) belong
160
+ # to in-flight checkouts, never to the admin. Admin drafts are the
161
+ # cart-less ones.
162
+ base.where(cart_id: nil).or(base.where.not(status: 'draft'))
107
163
  end
108
164
 
165
+ # Through find_resource, not find_by_prefix_id! directly, so the
166
+ # external:<system>:<id> addressing the concern provides reaches
167
+ # orders — an ERP that pushed its order number wants to read the
168
+ # order back by it.
109
169
  def set_resource
110
- @resource = scope.find_by_prefix_id!(params[:id])
170
+ @resource = find_resource
111
171
  @order = @resource # needed for OrderLock
112
172
  authorize_resource!(@resource)
113
173
  end
@@ -115,35 +175,81 @@ module Spree
115
175
  # Map state transition actions to :update permission
116
176
  def authorize_resource!(resource = @resource, action = action_name.to_sym)
117
177
  mapped_action = case action
118
- when :complete, :cancel, :approve, :resume, :resend_confirmation
178
+ when :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links
119
179
  :update
180
+ when :po_document
181
+ :show
120
182
  else
121
183
  action
122
184
  end
123
185
  authorize!(mapped_action, resource)
124
186
  end
125
187
 
188
+ # seller is preloaded because its id is read on every row and an
189
+ # expanded list renders the whole profile; order_group is not, since
190
+ # only its id is reported and that comes off the order's own column.
191
+ # Variant prices ride along because the admin line-item serializer
192
+ # reads the base catalog price for every row (the negotiated-price
193
+ # comparison); without it each line costs its own price query.
126
194
  def collection_includes
127
- [:line_items, :user, :channel, :rich_text_internal_note]
195
+ # `market` is the withdrawal deadline's other input. Fulfillments
196
+ # are loaded with their selected rate because the freight summary
197
+ # reads it — otherwise a page of orders costs a query per
198
+ # fulfillment for a field that is nil on every parcel order.
199
+ [:customer, :channel, :seller, :external_references, :cancel_reason,
200
+ :market, { fulfillments: :selected_delivery_rate },
201
+ { line_items: { variant: :prices } }, { po_document_attachment: :blob }]
202
+ end
203
+
204
+ # Read through the store's own vocabulary, so a reason belonging to
205
+ # another store is a 404 rather than a silent mislabel.
206
+ def cancel_reason
207
+ id = params[:cancel_reason_id].presence
208
+ return if id.nil?
209
+
210
+ current_store.order_cancellation_reasons.find_by_prefix_id!(id)
128
211
  end
129
212
 
130
213
  private
131
214
 
132
- def resolve_user
133
- customer_param = params[:customer_id].presence || params[:user_id].presence
215
+ def render_invalid_po_document
216
+ render_error(
217
+ code: ERROR_CODES[:validation_error],
218
+ message: Spree.t(:po_document_invalid_signed_id),
219
+ status: :unprocessable_content
220
+ )
221
+ end
222
+
223
+ def resolve_customer
224
+ customer_param = params[:customer_id].presence
134
225
  return unless customer_param
135
226
 
136
- Spree.user_class.find_by_param!(customer_param)
227
+ Spree.customer_class.
228
+ accessible_by(current_ability, :show).
229
+ find_by_prefix_id!(customer_param)
230
+ end
231
+
232
+ # An upsert arrives on the create action, so addresses come in under
233
+ # the create names. Translate them to the ones update accepts, or a
234
+ # replayed feed row would silently lose the address it sent.
235
+ def normalize_upsert_params!
236
+ # update runs under with_order_lock, which reads @order — normally
237
+ # set by set_resource, which the create path never runs.
238
+ @order = @resource
137
239
  end
138
240
 
139
241
  def order_create_params
140
- normalize_params(
242
+ permitted = normalize_params(
141
243
  params.permit(
142
- :email, :customer_id, :user_id, :use_customer_default_address,
244
+ :email, :customer_id, :use_customer_default_address,
143
245
  :currency, :market_id, :channel_id, :locale,
144
246
  :customer_note, :internal_note,
247
+ # The buyer's own purchase-order reference, and the signed blob
248
+ # id of the document behind it — a PO arriving by email and
249
+ # keyed in is the draft-order flow plus these two fields.
250
+ :po_number, :po_document,
145
251
  :shipping_address_id, :billing_address_id,
146
- :preferred_stock_location_id,
252
+ :preferred_stock_location_id, :company_id,
147
253
  :coupon_code,
148
254
  metadata: {},
149
255
  tags: [],
@@ -152,36 +258,55 @@ module Spree
152
258
  items: item_permitted_keys
153
259
  )
154
260
  )
261
+ resolve_company_param(permitted)
155
262
  end
156
263
 
157
264
  def order_update_params
158
- normalize_params(
265
+ permitted = normalize_params(
159
266
  params.permit(
160
- :email, :customer_id, :user_id,
267
+ :email, :customer_id,
161
268
  :customer_note, :internal_note,
269
+ :po_number, :po_document,
162
270
  :currency, :locale, :market_id, :channel_id,
163
- :preferred_stock_location_id,
271
+ :preferred_stock_location_id, :company_id,
164
272
  metadata: {},
165
273
  tags: [],
166
- ship_address: address_permitted_keys,
167
- bill_address: address_permitted_keys,
274
+ shipping_address: address_permitted_keys,
275
+ billing_address: address_permitted_keys,
168
276
  items: item_permitted_keys
169
277
  )
170
278
  )
279
+ resolve_company_param(permitted)
280
+ end
281
+
282
+ # An incidental lookup like any other: resolved through the store so
283
+ # another tenant's node 404s instead of surfacing as a validation
284
+ # error (which would confirm the id exists). Reads the raw param —
285
+ # normalize_params has already decoded the prefixed id.
286
+ def resolve_company_param(permitted)
287
+ return permitted unless permitted.key?(:company_id)
288
+
289
+ permitted[:company_id] =
290
+ if params[:company_id].present?
291
+ current_store.companies.find_by_prefix_id!(params[:company_id]).id
292
+ else
293
+ nil
294
+ end
295
+ permitted
171
296
  end
172
297
 
173
298
  def address_permitted_keys
174
299
  [
175
300
  :firstname, :lastname, :first_name, :last_name,
176
301
  :address1, :address2, :city,
177
- :country_iso, :state_abbr, :country_id, :state_id,
302
+ :country_code, :state_code,
178
303
  :zipcode, :postal_code, :phone, :alternative_phone,
179
304
  :state_name, :company, :label
180
305
  ]
181
306
  end
182
307
 
183
308
  def item_permitted_keys
184
- [:variant_id, :quantity, { metadata: {} }]
309
+ [:variant_id, :quantity, :price, { metadata: {} }]
185
310
  end
186
311
  end
187
312
  end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The store's packaging vocabulary. Marking one row default makes it
6
+ # the box the store's own parcel quotes are built on; the model
7
+ # demotes whichever row held the flag before.
8
+ #
9
+ # On a marketplace this lists every row in the store, the operator's
10
+ # and each seller's, so `q[seller_id_eq]` narrows it to one owner. A
11
+ # row the operator writes here is the marketplace's: `seller_id` is
12
+ # not writable, and a seller's own packaging is theirs to edit through
13
+ # the seller API (docs/plans/6.0-seller-package-types.md).
14
+ class PackageTypesController < ResourceController
15
+ scoped_resource :package_types
16
+
17
+ protected
18
+
19
+ def model_class
20
+ Spree::PackageType
21
+ end
22
+
23
+ def serializer_class
24
+ Spree.api.admin_package_type_serializer
25
+ end
26
+
27
+ def collection_includes
28
+ [:seller]
29
+ end
30
+
31
+ def resource_permitted_attributes
32
+ [:name, :kind, :length, :width, :height, :dimensions_unit,
33
+ :weight, :max_weight, :weight_unit, :default, { metadata: {} }]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -60,7 +60,7 @@ module Spree
60
60
  # password. Revoke first, then mint the fresh token for this
61
61
  # browser (the auto-sign-in below).
62
62
  Spree::RefreshToken.revoke_all_for(user)
63
- refresh_token = Spree::RefreshToken.create_for(user, request_env: request_env_for_token)
63
+ refresh_token = Spree::RefreshToken.create_for(user, audience: JWT_AUDIENCE_ADMIN, request_env: request_env_for_token)
64
64
  set_refresh_cookie(refresh_token)
65
65
 
66
66
  render json: auth_response(user)
@@ -43,12 +43,23 @@ module Spree
43
43
  Spree.api.admin_payment_method_serializer
44
44
  end
45
45
 
46
- # Explicit allowlist per the v3 convention — flat params, no
47
- # reach into the global `Spree::PermittedAttributes` registry
48
- # (which is the legacy Rails admin's surface). `type` and
46
+ # Explicit allowlist per the v3 convention — flat params. `type` and
49
47
  # `preferences` are added by `SubclassedResource` on top.
48
+ # Deliberately NOT routed through `normalize_params`: gateway
49
+ # `preferences` are opaque provider values, and prefixed-ID resolution
50
+ # recurses into nested hashes — a Stripe `webhook_endpoint_id` like
51
+ # `we_1MqJ8b...` matches the prefixed-ID shape and would be decoded to
52
+ # an integer. `type` and `preferences` are added by `SubclassedResource`.
50
53
  def permitted_params
51
- params.permit(:name, :description, :active, :storefront_visible, :auto_capture, :position, metadata: {}, preferences: {})
54
+ params.permit(
55
+ :name, :description, :active, :storefront_visible, :auto_capture, :capture_method, :position,
56
+ *model_additional_permitted_attributes,
57
+ metadata: {}, preferences: {}
58
+ )
59
+ end
60
+
61
+ def scope
62
+ super.ordered
52
63
  end
53
64
 
54
65
  # `types` is read-only discovery — maps to the read scope + :show ability.
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # How this installation can pay its sellers, and which of those a store
6
+ # could use today.
7
+ #
8
+ # Discovery rather than CRUD: providers are classes registered in code,
9
+ # not rows — so there is no serializer, and each class describes itself
10
+ # (`to_api_hash`), the same shape `/tax_providers` uses.
11
+ #
12
+ # Whether a provider needs sellers to hold an account with it is the
13
+ # part worth surfacing at selection time: choosing one changes what a
14
+ # marketplace has to ask of its sellers before it can pay them, which
15
+ # is better known before the choice than after.
16
+ class PayoutProvidersController < BaseController
17
+ scoped_resource :settings
18
+
19
+ # GET /api/v3/admin/payout_providers
20
+ def index
21
+ render json: { data: Spree.payout_providers.map { |provider| provider.to_api_hash(current_store) } }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The permission catalog discovery endpoint — the vocabulary the role
6
+ # editor and the API-key scope picker render. It is vocabulary, not
7
+ # data, so any authenticated admin credential may read it (same class
8
+ # of exemption as `/tags`).
9
+ #
10
+ # Staff keys only. Both surfaces this feeds build something owned by
11
+ # the store — a store role, a secret key — and a key another audience
12
+ # holds (a seller's own profile or books) would render as an option
13
+ # that fails validation the moment it is picked.
14
+ class PermissionsController < Admin::BaseController
15
+ skip_scope_check!
16
+
17
+ # GET /api/v3/admin/permissions
18
+ def index
19
+ entries = Spree.permissions.entries
20
+
21
+ render json: {
22
+ data: entries.map { |entry| Spree.api.admin_permission_serializer.new(entry).to_h },
23
+ meta: { count: entries.size }
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end