spree_api 6.0.0.beta4 → 6.0.0.rc2

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 (531) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -48
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  6. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
  8. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
  10. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
  11. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  12. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
  14. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  15. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  16. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  17. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  18. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  19. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  20. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  21. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
  22. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  23. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
  24. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  25. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  26. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
  27. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  28. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  29. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  30. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  31. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  32. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  33. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  34. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  35. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
  36. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  37. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
  38. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  39. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
  40. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
  41. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
  42. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  43. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  44. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
  45. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  46. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
  47. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  48. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
  49. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
  50. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  51. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
  52. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
  53. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
  54. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
  55. data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
  56. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  57. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
  58. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
  59. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
  60. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
  61. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  62. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
  63. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  64. data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
  65. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  66. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  67. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
  68. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
  69. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  70. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
  71. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  72. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
  73. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
  74. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
  75. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
  76. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  77. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  78. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
  79. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  80. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  81. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  82. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  83. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  84. data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
  85. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  86. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  87. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
  88. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  89. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  90. data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
  91. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  92. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
  93. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  94. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  95. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
  96. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  97. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
  98. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
  99. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
  100. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  101. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  102. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
  103. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
  104. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  105. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
  106. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
  107. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
  108. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  109. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  110. data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
  111. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  112. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
  113. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  114. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  115. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
  116. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
  117. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  118. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
  119. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
  120. data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
  121. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
  122. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
  123. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  124. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
  125. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  126. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  127. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  128. data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
  129. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  130. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  131. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
  132. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
  133. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  134. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  135. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  136. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  137. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
  138. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
  139. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  140. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  141. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
  142. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
  143. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  144. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  145. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  146. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  147. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  148. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  149. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  150. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  151. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  152. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  153. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
  154. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  155. data/app/controllers/spree/api/v3/base_controller.rb +12 -0
  156. data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
  157. data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
  158. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  159. data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
  160. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  161. data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
  162. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  163. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  164. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
  165. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  166. data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
  167. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  168. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  169. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  170. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  171. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  172. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
  173. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  174. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  175. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  176. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  177. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
  178. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  179. data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
  180. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  181. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
  182. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  183. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  184. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  185. data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
  186. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  187. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
  188. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
  189. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
  190. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
  191. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
  192. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
  193. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
  194. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
  195. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  196. data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
  197. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
  198. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  199. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  200. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  201. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
  202. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
  203. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  204. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
  205. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  206. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  207. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  208. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
  209. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
  210. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  211. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  212. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  213. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  214. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  215. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
  216. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
  217. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
  218. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  219. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  220. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
  221. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  222. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  223. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  224. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  225. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  226. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  227. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  228. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  229. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  230. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  231. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  232. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  233. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  234. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  235. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  236. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  237. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  238. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  239. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  240. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  241. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  242. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  243. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
  244. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  245. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  246. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  247. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  248. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  249. data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
  250. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  251. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  252. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  253. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  254. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
  255. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  256. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  257. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  258. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  259. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
  260. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  261. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  263. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  264. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  265. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
  266. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  267. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  268. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  270. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
  271. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  272. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  273. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
  274. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  275. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  276. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  277. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  279. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  280. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  281. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  282. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  283. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  284. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  285. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  286. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  287. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
  288. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  289. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  290. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  291. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  292. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  293. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
  294. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
  295. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  296. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  297. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
  298. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  299. data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
  300. data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
  301. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  302. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
  303. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  304. data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
  305. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  306. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
  307. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
  308. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  309. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  310. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  311. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
  312. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  313. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
  314. data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
  315. data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
  316. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  317. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  318. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
  319. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
  320. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
  321. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
  322. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
  324. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  325. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
  326. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  327. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
  328. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  329. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  330. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
  331. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  332. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  333. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
  334. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
  335. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
  336. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  337. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
  338. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
  339. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  340. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  341. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  342. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  343. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
  344. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
  345. data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
  346. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
  347. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
  348. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  349. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
  350. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
  351. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  352. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
  353. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  354. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  355. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  356. data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
  357. data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
  358. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  359. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
  360. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
  361. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  362. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  363. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  364. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  365. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  366. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  367. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
  368. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  369. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  370. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  371. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
  372. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
  373. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
  374. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  375. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  376. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  377. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  378. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  379. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
  380. data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
  381. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  382. data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
  383. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  384. data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
  385. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  386. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  387. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  388. data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
  389. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  390. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  391. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  392. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
  393. data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
  394. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  395. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  396. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  397. data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
  398. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  399. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  400. data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
  401. data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
  402. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  403. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  404. data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
  405. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  406. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  407. data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
  408. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
  409. data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
  410. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  411. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  412. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  413. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  414. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  415. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  416. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  417. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
  418. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
  419. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  420. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  421. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  422. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
  423. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  424. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  425. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  426. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  427. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  428. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  429. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  430. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
  431. data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
  432. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  433. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
  434. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
  435. data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
  436. data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
  437. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  438. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
  439. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  440. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  441. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
  442. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  443. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  444. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
  445. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  446. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  447. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  448. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  449. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  450. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  451. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  452. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  453. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
  454. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
  455. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  456. data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
  457. data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
  458. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  459. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  460. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  461. data/app/services/spree/api/v3/filter_table.rb +337 -0
  462. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  463. data/app/services/spree/api/v3/request_schema.rb +430 -0
  464. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  465. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  466. data/config/initializers/pagy.rb +1 -1
  467. data/config/initializers/typelizer.rb +7 -9
  468. data/config/locales/ar.yml +15 -0
  469. data/config/locales/be.yml +15 -0
  470. data/config/locales/bg.yml +15 -0
  471. data/config/locales/ca.yml +15 -0
  472. data/config/locales/cs.yml +15 -0
  473. data/config/locales/da.yml +15 -0
  474. data/config/locales/de-CH.yml +11 -0
  475. data/config/locales/de.yml +15 -0
  476. data/config/locales/el.yml +15 -0
  477. data/config/locales/en.yml +5 -40
  478. data/config/locales/es-CL.yml +10 -0
  479. data/config/locales/es-EC.yml +11 -0
  480. data/config/locales/es-MX.yml +12 -0
  481. data/config/locales/es.yml +15 -0
  482. data/config/locales/et.yml +15 -0
  483. data/config/locales/fa.yml +15 -0
  484. data/config/locales/fi.yml +15 -0
  485. data/config/locales/fr.yml +15 -0
  486. data/config/locales/hu.yml +15 -0
  487. data/config/locales/id.yml +15 -0
  488. data/config/locales/it.yml +15 -0
  489. data/config/locales/ja.yml +15 -0
  490. data/config/locales/km.yml +15 -0
  491. data/config/locales/ko.yml +15 -0
  492. data/config/locales/ku.yml +15 -0
  493. data/config/locales/lt.yml +15 -0
  494. data/config/locales/lv.yml +15 -0
  495. data/config/locales/nb.yml +15 -0
  496. data/config/locales/ne.yml +15 -0
  497. data/config/locales/nl.yml +15 -0
  498. data/config/locales/pl.yml +15 -0
  499. data/config/locales/pt-BR.yml +13 -0
  500. data/config/locales/pt.yml +15 -0
  501. data/config/locales/ro.yml +15 -0
  502. data/config/locales/ru.yml +15 -0
  503. data/config/locales/sk.yml +15 -0
  504. data/config/locales/sl-SI.yml +15 -0
  505. data/config/locales/sv.yml +15 -0
  506. data/config/locales/th.yml +15 -0
  507. data/config/locales/tr.yml +15 -0
  508. data/config/locales/uk.yml +15 -0
  509. data/config/locales/vi.yml +15 -0
  510. data/config/locales/zh-CN.yml +15 -0
  511. data/config/locales/zh-TW.yml +15 -0
  512. data/config/routes.rb +54 -102
  513. data/lib/spree/api/configuration.rb +5 -0
  514. data/lib/spree/api/dependencies.rb +54 -274
  515. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  516. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  517. data/lib/spree/api/openapi/schema_helper.rb +127 -81
  518. data/lib/spree/api/preference_families.rb +46 -0
  519. data/lib/spree/api/preference_types.rb +138 -0
  520. data/lib/spree/api/typelizer_generation.rb +39 -0
  521. data/lib/spree/api/webhook_event_types.rb +140 -0
  522. data/lib/spree/api.rb +0 -2
  523. data/lib/tasks/filters.rake +12 -0
  524. data/lib/typelizer/open_enums.rb +10 -0
  525. metadata +125 -40
  526. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  527. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  528. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  529. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
  530. data/config/i18n-tasks.yml +0 -40
  531. data/config/initializers/alba.rb +0 -5
@@ -0,0 +1,430 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # What one write endpoint accepts, declared once. The controller permits
5
+ # from it, the API reference documents it, and the SDK request types are
6
+ # generated from the reference, so the three cannot disagree.
7
+ #
8
+ # request_params :product do |body|
9
+ # body.attribute :name, :string, required: true, on: :create
10
+ # body.attribute :status, :string, choices: Spree::Product::STATUSES, open: true
11
+ # body.attribute :category_ids, :array, of: :id
12
+ # body.attribute :metadata, :hash
13
+ # body.attribute :prices, :array, of: Spree::Api::V3::PriceRequestSchema
14
+ # body.attribute :options, :array do |option|
15
+ # option.attribute :name, :string, required: true
16
+ # end
17
+ # end
18
+ #
19
+ # The vocabulary is the `preference` one: a type symbol, `of:` for what
20
+ # an `:array` holds, `choices:` for a closed list (`open: true` when
21
+ # extensions may extend it), `:hash` for any keys. `required: true` is
22
+ # required on both actions; add `on: :create` to require it when
23
+ # creating only. `only: :create` (or `:update`) accepts the field on one
24
+ # action alone. `permit: false` documents a field the controller reads
25
+ # from the raw params itself. `format:` documents a string's format
26
+ # (`email`, `uri`). `deprecated: 'Use country_code. Removed in 6.1.'`
27
+ # keeps a field working while the API reference and the SDK types flag it.
28
+ class RequestSchema
29
+ KINDS = {
30
+ string: { type: :string },
31
+ integer: { type: :integer },
32
+ # Measurements a client sends as JSON numbers (weights, dimensions,
33
+ # coordinates). Money is never a number: use `decimal`.
34
+ number: { type: :number },
35
+ # Amounts, rates and quantities with decimals travel as canonical
36
+ # decimal strings, never JSON numbers (see Spree::Money::Rounding).
37
+ decimal: { type: :string, format: :decimal, pattern: '^-?\d+(\.\d+)?$' },
38
+ boolean: { type: :boolean },
39
+ date: { type: :string, format: :date },
40
+ datetime: { type: :string, format: :'date-time' },
41
+ id: { type: :string },
42
+ any: {},
43
+ # ISO codes, from the closed lists below.
44
+ country: { type: :string },
45
+ currency: { type: :string },
46
+ locale: { type: :string }
47
+ }.freeze
48
+
49
+ # The ISO lists a `country` or `currency` field takes, published once
50
+ # per API as a named component — the same `CountryCode` and
51
+ # `CurrencyCode` types the serializers declare, so a value read from
52
+ # a response is the type a request takes.
53
+ CODE_LISTS = {
54
+ country: ['CountryCode', -> { Spree::IsoData.country_codes }],
55
+ currency: ['CurrencyCode', -> { Spree::Money::Rounding::CURRENCY_CODES }],
56
+ locale: ['LocaleCode', -> { Spree::Locales::ALL }]
57
+ }.freeze
58
+
59
+ ACTIONS = %i[create update].freeze
60
+
61
+ OPEN_LIST_NOTE = 'The values listed are the built-in ones; extensions may add more.'.freeze
62
+
63
+ class Field
64
+ attr_reader :name, :kind, :array, :required, :nullable, :description, :example, :enum, :open, :only, :schema,
65
+ :permit, :format, :deprecated
66
+
67
+ def initialize(name, kind, array: false, required: false, nullable: false, description: nil,
68
+ example: nil, enum: nil, open: false, only: nil, schema: nil, permit: true, format: nil,
69
+ deprecated: nil)
70
+ raise ArgumentError, "deprecated: says what to use instead (#{name})" if deprecated == true
71
+
72
+ raise ArgumentError, "open: needs an enum: list of the built-in values (#{name})" if open && enum.nil?
73
+
74
+ unless required.in?([true, false, :create])
75
+ raise ArgumentError, "required: must be true, false or :create (#{name})"
76
+ end
77
+ raise ArgumentError, "only: must be :create or :update (#{name})" if only && !only.in?(ACTIONS)
78
+
79
+ @name = name.to_sym
80
+ @kind = kind
81
+ @array = array
82
+ @required = required
83
+ @nullable = nullable
84
+ @description = description
85
+ @example = example
86
+ @enum = enum&.map(&:to_s)
87
+ @open = open
88
+ @only = only
89
+ @schema = schema
90
+ @permit = permit
91
+ @format = format
92
+ @deprecated = deprecated
93
+ end
94
+
95
+ # @param action [Symbol, nil]
96
+ def accepted_on?(action)
97
+ only.nil? || action.nil? || only == action
98
+ end
99
+
100
+ # @param action [Symbol, nil]
101
+ def required_on?(action)
102
+ required == true || (required == :create && action == :create)
103
+ end
104
+
105
+ # This field, required on `on` (`:create`) or always. A field
106
+ # already required always stays required always.
107
+ #
108
+ # @param on [Symbol, nil] `:create`, or nil for every action
109
+ # @return [Field]
110
+ def required_copy(on)
111
+ copy = dup
112
+ copy.instance_variable_set(:@required, required == true ? true : on || true)
113
+ copy
114
+ end
115
+
116
+ # A hash of any keys, such as `metadata` or `provider_settings`.
117
+ def free_object?
118
+ kind == :object && schema.nil?
119
+ end
120
+ end
121
+
122
+ attr_reader :name, :fields
123
+
124
+ # The types an attribute takes: the scalars above, plus `:hash` (any
125
+ # keys), `:object` (a block or a `shape:`) and `:array` (`of:` a type
126
+ # or a shape, or a block of fields).
127
+ TYPES = (KINDS.keys + %i[hash object array]).freeze
128
+
129
+ # A shape shared between several endpoints (a price, an address),
130
+ # published as its own component so each SDK has one type for it.
131
+ #
132
+ # @param name [String] the component name, such as `PriceParams`
133
+ # @return [RequestSchema]
134
+ def self.shape(name, &block)
135
+ raise ArgumentError, "a shape's name ends in Params (#{name})" unless name.to_s.end_with?('Params')
136
+
137
+ new(name, &block)
138
+ end
139
+
140
+ # A shape several endpoints share is a class in app/request_schemas,
141
+ # declared the way a model declares its attributes:
142
+ #
143
+ # class Spree::Api::V3::PriceRequestSchema < Spree::Api::V3::RequestSchema
144
+ # publishes 'PriceParams'
145
+ #
146
+ # attribute :currency, :currency, required: true
147
+ # end
148
+ #
149
+ # A subclass starts from its parent's attributes, so the Admin API's
150
+ # address extends the shared one. Without `publishes` the class is a
151
+ # set of attributes other declarations include rather than a type of
152
+ # its own.
153
+ class << self
154
+ # @param name [String] the component name, ending in `Params`
155
+ def publishes(name)
156
+ raise ArgumentError, "a shape's name ends in Params (#{name})" unless name.to_s.end_with?('Params')
157
+ raise ArgumentError, "#{self.name}: `publishes` goes before the attributes" if @definition
158
+
159
+ @published_name = name.to_s
160
+ end
161
+
162
+ # @return [RequestSchema] what the class declares
163
+ def definition
164
+ @definition ||= new(@published_name).tap do |schema|
165
+ schema.include_attributes(superclass) if superclass < RequestSchema
166
+ end
167
+ end
168
+
169
+ # @param value [RequestSchema, Class] an instance or a declared class
170
+ # @return [RequestSchema, nil]
171
+ def resolve(value)
172
+ value.is_a?(Class) ? value.definition : value
173
+ end
174
+
175
+ %i[attribute include_attributes require_attributes external_references].each do |method|
176
+ define_method(method) { |*args, **options, &block| definition.public_send(method, *args, **options, &block) }
177
+ end
178
+ end
179
+
180
+ # @param name [String, Symbol, nil] the resource, `product` publishing
181
+ # `ProductCreateParams` and `ProductUpdateParams`; or a name ending
182
+ # in `Params`, published as given for every action
183
+ # @yieldparam schema [RequestSchema] the schema, to declare attributes on
184
+ def initialize(name = nil)
185
+ @name = name&.to_s
186
+ @fields = {}
187
+ yield self if block_given?
188
+ end
189
+
190
+ # Declares one attribute of the body.
191
+ #
192
+ # @param name [Symbol]
193
+ # @param type [Symbol] one of TYPES
194
+ # @param of [Symbol, Class, RequestSchema, nil] what an `:array` holds:
195
+ # a scalar type, or a shared shape
196
+ # @param shape [Class, RequestSchema, nil] what an `:object` holds
197
+ # @param as [String, nil] publishes a block's object (or the objects
198
+ # of an `:array`) as a component of this name
199
+ # @param choices [Array, nil] the values the attribute takes
200
+ # @param required [Boolean]
201
+ # @param on [Symbol, nil] `:create` to require it only when creating
202
+ # @yieldparam schema [RequestSchema] a nested object's attributes
203
+ def attribute(name, type, of: nil, shape: nil, as: nil, choices: nil, required: false, on: nil, **options, &block)
204
+ raise ArgumentError, "#{name}: unknown type #{type.inspect}; use one of #{TYPES.join(', ')}" unless TYPES.include?(type)
205
+ raise ArgumentError, "#{name}: `on:` scopes `required: true` and is `:create`" if on && (!required || on != :create)
206
+
207
+ options = options.merge(required: on || required, enum: choices)
208
+ nested = nested_schema(type, of: of, shape: shape, as: as, &block)
209
+
210
+ case type
211
+ when :array then add_array(name, of, nested, options)
212
+ when :object
213
+ raise ArgumentError, "#{name}: an :object needs a block or `shape:`; use :hash for any keys" unless nested
214
+
215
+ add(Field.new(name, :object, schema: nested, **options))
216
+ when :hash then add(Field.new(name, :object, **options))
217
+ else add(Field.new(name, type, **options))
218
+ end
219
+ end
220
+
221
+ # The identities a record has in external systems, which the Admin API
222
+ # reads from the raw params (Admin::Concerns::ExternalReferences).
223
+ def external_references
224
+ attribute :external_references, :hash, permit: false, description: <<~TEXT.squish
225
+ Identities the record has in external systems, keyed by system: the same
226
+ `{ system: external_id }` map the Admin API renders, so what you read can be
227
+ sent straight back. Systems you do not name keep the reference they have.
228
+ A list of `{ system, external_id }` entries is accepted too.
229
+ TEXT
230
+ end
231
+
232
+ # Adds the attributes of another schema, for endpoints that extend a
233
+ # shared set.
234
+ #
235
+ # @param other [RequestSchema, Class]
236
+ def include_attributes(other)
237
+ RequestSchema.resolve(other).fields.each_value { |field| add(field) }
238
+ end
239
+
240
+ # Marks attributes this schema took from another as required, for an
241
+ # endpoint whose model needs what the shared set leaves optional.
242
+ #
243
+ # @param names [Array<Symbol>]
244
+ # @param on [Symbol, nil] `:create` to require them only when creating
245
+ # @return [void]
246
+ def require_attributes(*names, on: nil)
247
+ raise ArgumentError, '`on:` is :create' if on && on != :create
248
+
249
+ names.each do |name|
250
+ field = fields.fetch(name) { raise ArgumentError, "#{name} is not an attribute of this schema" }
251
+ fields[name] = field.required_copy(on)
252
+ end
253
+ @permit_lists = nil
254
+ end
255
+
256
+ # The `params.permit` list for an action.
257
+ #
258
+ # @param action [Symbol, String, nil] `create` or `update`; nil
259
+ # accepts every field
260
+ # @return [Array<Symbol, Hash>]
261
+ def permit_list(action = nil)
262
+ action = action&.to_sym
263
+ (@permit_lists ||= {})[action] ||= build_permit_list(action).freeze
264
+ end
265
+
266
+ # The JSON Schema of the request body for an action.
267
+ #
268
+ # @param action [Symbol, String, nil]
269
+ # @return [Hash]
270
+ def json_schema(action = nil)
271
+ action = action&.to_sym
272
+ fields = fields_for(action)
273
+ required = fields.select { |field| field.required_on?(action) }.map { |field| field.name.to_s }
274
+
275
+ schema = { type: :object, properties: fields.to_h { |field| [field.name, property_schema(field)] } }
276
+ schema[:required] = required if required.any?
277
+ schema
278
+ end
279
+
280
+ # The component name published for an action.
281
+ #
282
+ # @param action [Symbol, String]
283
+ # @return [String]
284
+ def component_name(action)
285
+ return name if name.end_with?('Params')
286
+
287
+ "#{name.camelize}#{action.to_s.camelize}Params"
288
+ end
289
+
290
+ # Every named shape this schema reaches, nested ones included.
291
+ #
292
+ # @return [Array<RequestSchema>]
293
+ def shapes
294
+ fields.each_value.flat_map do |field|
295
+ next [] unless field.schema
296
+
297
+ nested = field.schema.shapes
298
+ shape?(field.schema) ? [field.schema, *nested] : nested
299
+ end.uniq
300
+ end
301
+
302
+ # The ISO code lists this schema's fields reach, nested ones included,
303
+ # as the components they publish.
304
+ #
305
+ # @return [Hash{String => Hash}]
306
+ def code_lists
307
+ fields.each_value.each_with_object({}) do |field, lists|
308
+ lists.merge!(field.schema.code_lists) if field.schema
309
+ next unless CODE_LISTS.key?(field.kind)
310
+
311
+ name, values = CODE_LISTS[field.kind]
312
+ lists[name] = { type: :string, enum: values.call }
313
+ end
314
+ end
315
+
316
+ def shape?(schema)
317
+ schema.name.present?
318
+ end
319
+
320
+ private
321
+
322
+ def nested_schema(type, of:, shape:, as:, &block)
323
+ return RequestSchema.resolve(shape) if shape
324
+ return RequestSchema.resolve(of) if of.is_a?(Class) || of.is_a?(RequestSchema)
325
+ return unless block
326
+
327
+ as ? RequestSchema.shape(as, &block) : RequestSchema.new(&block)
328
+ end
329
+
330
+ def add_array(name, of, nested, options)
331
+ return add(Field.new(name, :object, schema: nested, array: true, **options)) if nested
332
+
333
+ unless of.is_a?(Symbol) && KINDS.key?(of)
334
+ raise ArgumentError, "#{name}: an :array needs `of:` a scalar type or a shape, or a block of attributes"
335
+ end
336
+ # Rails permits a list of scalars, never a list of any-key hashes.
337
+ if of == :any && options.fetch(:permit, true)
338
+ raise ArgumentError, "#{name}: a list of :any values cannot be permitted; declare its items or use `permit: false`"
339
+ end
340
+
341
+ add(Field.new(name, of, array: true, **options))
342
+ end
343
+
344
+ def add(field)
345
+ raise ArgumentError, "#{field.name} is declared twice" if fields.key?(field.name)
346
+
347
+ @permit_lists = nil
348
+ fields[field.name] = field
349
+ end
350
+
351
+ def build_permit_list(action)
352
+ scalars = []
353
+ nested = []
354
+
355
+ fields_for(action).each do |field|
356
+ next unless field.permit
357
+
358
+ if field.schema
359
+ nested << { field.name => field.schema.permit_list }
360
+ elsif field.free_object?
361
+ nested << { field.name => {} }
362
+ elsif field.kind == :any
363
+ # A value of any JSON type: a scalar, a list or a hash.
364
+ scalars << field.name
365
+ nested << { field.name => [] } << { field.name => {} }
366
+ elsif field.array
367
+ nested << { field.name => [] }
368
+ else
369
+ scalars << field.name
370
+ end
371
+ end
372
+
373
+ scalars + nested
374
+ end
375
+
376
+
377
+ def fields_for(action)
378
+ fields.values.select { |field| field.accepted_on?(action) }
379
+ end
380
+
381
+ def property_schema(field)
382
+ item = item_schema(field)
383
+ description = [field.description, (OPEN_LIST_NOTE if field.open), deprecation_note(field)].compact.join(' ').presence
384
+ documentation = { description: description, example: field.example }.compact
385
+ documentation[:deprecated] = true if field.deprecated
386
+
387
+ if field.array
388
+ schema = { type: :array, items: item }.merge(documentation)
389
+ schema[:nullable] = true if field.nullable
390
+ return schema
391
+ end
392
+
393
+ # A $ref ignores the keys beside it, so a described or nullable
394
+ # reference wraps it.
395
+ if item.key?(:$ref) && (documentation.any? || field.nullable)
396
+ item = { allOf: [item] }
397
+ end
398
+
399
+ item = item.merge(documentation)
400
+ item[:nullable] = true if field.nullable
401
+ item
402
+ end
403
+
404
+ def deprecation_note(field)
405
+ "Deprecated: #{field.deprecated}" if field.deprecated
406
+ end
407
+
408
+ def item_schema(field)
409
+ return { '$ref': "#/components/schemas/#{CODE_LISTS[field.kind].first}" } if CODE_LISTS.key?(field.kind)
410
+
411
+ if field.schema
412
+ return { '$ref': "#/components/schemas/#{field.schema.name}" } if shape?(field.schema)
413
+
414
+ return field.schema.json_schema
415
+ end
416
+ return { type: :object, additionalProperties: true } if field.free_object?
417
+
418
+ schema = KINDS.fetch(field.kind).dup
419
+ schema[:format] = field.format if field.format
420
+ return schema unless field.enum
421
+ return schema.merge(enum: field.enum) unless field.open
422
+
423
+ # The same open list the serializers publish (`enum_type_name`):
424
+ # clients autocomplete the built-in values and still accept any other.
425
+ { anyOf: [schema.merge(enum: field.enum), schema] }
426
+ end
427
+ end
428
+ end
429
+ end
430
+ end
@@ -90,10 +90,14 @@ module Spree
90
90
  http_options = { open_timeout: TIMEOUT, read_timeout: TIMEOUT, verify_mode: ssl_verify_mode }
91
91
 
92
92
  # SSRF protection is disabled in development so webhooks can reach
93
- # localhost / host.docker.internal (the storefront running on the host).
94
- if Rails.env.development?
93
+ # localhost / host.docker.internal (the storefront running on the host),
94
+ # and for hosts the operator explicitly trusts
95
+ # (Spree::Api::Config.webhooks_allowed_internal_hosts).
96
+ if Rails.env.development? || Spree::WebhookEndpoint.allowed_internal_host?(@delivery.url)
95
97
  uri = URI.parse(@delivery.url)
96
- http = Net::HTTP.new(uri.host, uri.port)
98
+ # No proxy, as SsrfFilter: an egress proxy from the environment would
99
+ # carry this in-cluster (or localhost) request out of the network.
100
+ http = Net::HTTP.new(uri.hostname, uri.port, nil)
97
101
  http.use_ssl = uri.scheme == 'https'
98
102
  http_options.each { |k, v| http.send(:"#{k}=", v) }
99
103
 
@@ -17,19 +17,12 @@ module Spree
17
17
  class WebhookEventSubscriber < Spree::Subscriber
18
18
  subscribes_to '*'
19
19
 
20
- # Admin and seller auth events carry live credentials (password reset
21
- # tokens) and have no legitimate external consumer — core delivers those
22
- # emails itself. Never forward them to webhook endpoints, including '*'
23
- # subscriptions.
24
- NON_DELIVERABLE_EVENTS = %w[
25
- admin_user.password_reset_requested
26
- seller_user.password_reset_requested
27
- ].freeze
28
-
29
20
  def handle(event)
30
21
  return unless Spree::Api::Config.webhooks_enabled
31
22
  return if event.store_id.blank?
32
- return if NON_DELIVERABLE_EVENTS.include?(event.name)
23
+ # Events declared `webhook: false` (staff and seller password reset
24
+ # requests) never leave Spree, whatever an endpoint subscribes to.
25
+ return unless Spree::Events.catalog.webhook?(event.name)
33
26
 
34
27
  # Only load the columns we need for matching and delivery
35
28
  endpoints = Spree::WebhookEndpoint
@@ -5,4 +5,4 @@
5
5
  Pagy::OPTIONS[:limit] = 25
6
6
 
7
7
  # Maximum number of items per page
8
- Pagy::OPTIONS[:max_limit] = 100
8
+ Pagy::OPTIONS[:client_limit] = 100
@@ -15,18 +15,16 @@ Rails.application.config.after_initialize do
15
15
  config.plugin_configs = {
16
16
  alba: {
17
17
  ts_mapper: Typelizer::SerializerPlugins::Alba::ALBA_TS_MAPPER.merge(
18
- 'iso8601' => { type: :string }
18
+ 'iso8601' => { type: :string },
19
+ 'string' => { type: :string }
19
20
  )
20
21
  }
21
22
  }
22
23
 
23
- # Serializers that exist only for Admin API or events — no Store API controller
24
+ # Serializers that exist only for the Admin API. Event serializers stay in:
25
+ # they describe the `data` of the typed webhook events the Store SDK ships.
24
26
  store_excluded = %w[
25
- Asset CartPromotion OrderPromotion
26
- StockLevel StockMovement StockTransfer
27
- Report Export Import ImportRow
28
- TaxCategory Exchange ExchangeLineItem
29
- SupplierEvent PurchaseOrderEvent StockReceiptEvent
27
+ Asset CartPromotion OrderPromotion Report TaxCategory
30
28
  ].to_set
31
29
 
32
30
  # Store SDK — no prefix, package provides namespace
@@ -34,7 +32,7 @@ Rails.application.config.after_initialize do
34
32
  c.output_dir = api_root.join('../../packages/sdk/src/types/generated')
35
33
  c.reject_class = ->(serializer:) {
36
34
  name = serializer.name.to_s
37
- name.include?('::Admin::') || name.include?('::Seller::') ||
35
+ !name.start_with?('Spree::Api::V3::') || name.include?('::Admin::') || name.include?('::Seller::') ||
38
36
  store_excluded.include?(name.sub(/\ASpree::Api::V3::/, '').sub(/Serializer\z/, ''))
39
37
  }
40
38
  c.serializer_name_mapper = ->(serializer) {
@@ -77,7 +75,7 @@ Rails.application.config.after_initialize do
77
75
  # serializer this branch inherits references them, so their types still
78
76
  # have to exist in the package.
79
77
  store_nested_for_seller = %w[
80
- Address Category CustomField OptionType OptionValue Price PriceHistory Seller
78
+ Category CustomField OptionType OptionValue Seller
81
79
  ].to_set
82
80
 
83
81
  config.writer(:seller) do |c|
@@ -0,0 +1,15 @@
1
+ ---
2
+ ar:
3
+ spree:
4
+ api:
5
+ cannot_delete: لا يمكن حذف %{model}
6
+ current_password_invalid: كلمة المرور الحالية غير صحيحة أو مفقودة
7
+ newsletter_verification_token_invalid: رمز التحقق من النشرة الإخبارية غير صالح أو انتهت صلاحيته.
8
+ password_reset_requested: إذا كان هناك حساب مرتبط بهذا البريد الإلكتروني، فقد تم إرسال تعليمات إعادة تعيين كلمة المرور.
9
+ password_reset_token_invalid: رمز إعادة تعيين كلمة المرور غير صالح أو انتهت صلاحيته.
10
+ record_not_found: "%{model} غير موجود"
11
+ unauthorized: أنت غير مخوّل لتنفيذ هذا الإجراء.
12
+ v3:
13
+ payments:
14
+ method_unavailable: طريقة الدفع هذه غير متاحة لهذا الطلب.
15
+ session_required: تتطلب طريقة الدفع هذه جلسة دفع. استخدم نقطة نهاية جلسات الدفع بدلًا من ذلك.
@@ -0,0 +1,15 @@
1
+ ---
2
+ be:
3
+ spree:
4
+ api:
5
+ cannot_delete: "%{model} немагчыма выдаліць"
6
+ current_password_invalid: Бягучы пароль няправільны або адсутнічае
7
+ newsletter_verification_token_invalid: Токен пацверджання рассылкі няправільны або яго тэрмін дзеяння скончыўся.
8
+ password_reset_requested: Калі для гэтай электроннай пошты існуе ўліковы запіс, інструкцыі па скіду пароля былі адпраўлены.
9
+ password_reset_token_invalid: Токен скіду пароля няправільны або яго тэрмін дзеяння скончыўся.
10
+ record_not_found: "%{model} не знойдзена"
11
+ unauthorized: Вы не маеце дазволу на выкананне гэтага дзеяння.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Гэты спосаб аплаты недаступны для гэтага заказу.
15
+ session_required: Гэты спосаб аплаты патрабуе плацёжнай сесіі. Замест гэтага скарыстайцеся канчатковым пунктам плацёжных сесій.
@@ -0,0 +1,15 @@
1
+ ---
2
+ bg:
3
+ spree:
4
+ api:
5
+ cannot_delete: "%{model} не може да бъде изтрит"
6
+ current_password_invalid: Текущата парола е невалидна или липсва
7
+ newsletter_verification_token_invalid: Токенът за потвърждение на бюлетина е невалиден или е изтекъл.
8
+ password_reset_requested: Ако съществува акаунт за този имейл, бяха изпратени инструкции за нулиране на паролата.
9
+ password_reset_token_invalid: Токенът за нулиране на паролата е невалиден или е изтекъл.
10
+ record_not_found: "%{model} не е намерен"
11
+ unauthorized: Нямате право да извършвате това действие.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Този начин на плащане не е наличен за тази поръчка.
15
+ session_required: Този начин на плащане изисква платежна сесия. Вместо това използвайте крайната точка за платежни сесии.
@@ -0,0 +1,15 @@
1
+ ---
2
+ ca:
3
+ spree:
4
+ api:
5
+ cannot_delete: No es pot eliminar %{model}
6
+ current_password_invalid: La contrasenya actual no és vàlida o falta
7
+ newsletter_verification_token_invalid: El token de verificació del butlletí no és vàlid o ha caducat.
8
+ password_reset_requested: Si existeix un compte per a aquest correu electrònic, s'han enviat les instruccions per restablir la contrasenya.
9
+ password_reset_token_invalid: El token de restabliment de contrasenya no és vàlid o ha caducat.
10
+ record_not_found: No s'ha trobat %{model}
11
+ unauthorized: No teniu autorització per dur a terme aquesta acció.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Aquest mètode de pagament no està disponible per a aquesta comanda.
15
+ session_required: Aquest mètode de pagament requereix una sessió de pagament. Utilitzeu el punt de connexió de sessions de pagament.
@@ -0,0 +1,15 @@
1
+ ---
2
+ cs:
3
+ spree:
4
+ api:
5
+ cannot_delete: "%{model} nelze odstranit"
6
+ current_password_invalid: Aktuální heslo je neplatné nebo chybí
7
+ newsletter_verification_token_invalid: Ověřovací token newsletteru je neplatný nebo vypršela jeho platnost.
8
+ password_reset_requested: Pokud pro tento e-mail existuje účet, byly odeslány pokyny k obnovení hesla.
9
+ password_reset_token_invalid: Token pro obnovení hesla je neplatný nebo vypršela jeho platnost.
10
+ record_not_found: "%{model} nebyl nalezen"
11
+ unauthorized: Nemáte oprávnění provést tuto akci.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Tato platební metoda není pro tuto objednávku dostupná.
15
+ session_required: Tato platební metoda vyžaduje platební relaci. Použijte prosím endpoint platebních relací.
@@ -0,0 +1,15 @@
1
+ ---
2
+ da:
3
+ spree:
4
+ api:
5
+ cannot_delete: "%{model} kan ikke slettes"
6
+ current_password_invalid: Den nuværende adgangskode er ugyldig eller mangler
7
+ newsletter_verification_token_invalid: Bekræftelsestokenet for nyhedsbrevet er ugyldigt eller er udløbet.
8
+ password_reset_requested: Hvis der findes en konto for den e-mail, er instruktioner til nulstilling af adgangskode blevet sendt.
9
+ password_reset_token_invalid: Tokenet til nulstilling af adgangskode er ugyldigt eller er udløbet.
10
+ record_not_found: "%{model} blev ikke fundet"
11
+ unauthorized: Du har ikke tilladelse til at udføre denne handling.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Denne betalingsmetode er ikke tilgængelig for denne ordre.
15
+ session_required: Denne betalingsmetode kræver en betalingssession. Brug i stedet endepunktet for betalingssessioner.
@@ -0,0 +1,11 @@
1
+ ---
2
+ de-CH:
3
+ spree:
4
+ api:
5
+ newsletter_verification_token_invalid: Der Newsletter-Bestätigungstoken ist ungültig oder abgelaufen.
6
+ password_reset_requested: Falls für diese E-Mail-Adresse ein Konto besteht, wurden Anweisungen zum Zurücksetzen des Passworts versendet.
7
+ password_reset_token_invalid: Der Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen.
8
+ v3:
9
+ payments:
10
+ method_unavailable: Diese Zahlungsart ist für diese Bestellung nicht verfügbar.
11
+ session_required: Diese Zahlungsart erfordert eine Zahlungssitzung. Verwenden Sie stattdessen den Endpunkt für Zahlungssitzungen.
@@ -0,0 +1,15 @@
1
+ ---
2
+ de:
3
+ spree:
4
+ api:
5
+ cannot_delete: "%{model} kann nicht gelöscht werden"
6
+ current_password_invalid: Aktuelles Passwort ist ungültig oder fehlt
7
+ newsletter_verification_token_invalid: Das Newsletter-Bestätigungstoken ist ungültig oder abgelaufen.
8
+ password_reset_requested: Falls ein Konto für diese E-Mail-Adresse besteht, wurden Anweisungen zum Zurücksetzen des Passworts versendet.
9
+ password_reset_token_invalid: Das Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen.
10
+ record_not_found: "%{model} nicht gefunden"
11
+ unauthorized: Sie sind nicht berechtigt, diese Aktion auszuführen.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Diese Zahlungsmethode ist für diese Bestellung nicht verfügbar.
15
+ session_required: Diese Zahlungsmethode erfordert eine Zahlungssitzung. Verwenden Sie stattdessen den Endpunkt für Zahlungssitzungen.
@@ -0,0 +1,15 @@
1
+ ---
2
+ el:
3
+ spree:
4
+ api:
5
+ cannot_delete: Δεν είναι δυνατή η διαγραφή του %{model}
6
+ current_password_invalid: Ο τρέχων κωδικός πρόσβασης είναι μη έγκυρος ή λείπει
7
+ newsletter_verification_token_invalid: Το token επαλήθευσης ενημερωτικού δελτίου είναι μη έγκυρο ή έχει λήξει.
8
+ password_reset_requested: Αν υπάρχει λογαριασμός για αυτό το email, έχουν σταλεί οδηγίες επαναφοράς κωδικού πρόσβασης.
9
+ password_reset_token_invalid: Το token επαναφοράς κωδικού πρόσβασης είναι μη έγκυρο ή έχει λήξει.
10
+ record_not_found: Δεν βρέθηκε %{model}
11
+ unauthorized: Δεν έχετε εξουσιοδότηση να εκτελέσετε αυτή την ενέργεια.
12
+ v3:
13
+ payments:
14
+ method_unavailable: Αυτή η μέθοδος πληρωμής δεν είναι διαθέσιμη για αυτή την παραγγελία.
15
+ session_required: Αυτή η μέθοδος πληρωμής απαιτεί μια συνεδρία πληρωμής. Χρησιμοποιήστε αντ' αυτού το σημείο πρόσβασης συνεδριών πληρωμής.