spree_api 6.0.2 → 6.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/concerns/spree/api/v3/admin/embed_permissions.rb +5 -2
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -1
- data/app/controllers/concerns/spree/api/v3/security_headers.rb +3 -0
- data/app/controllers/spree/api/v3/admin/base_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +21 -4
- data/app/controllers/spree/api/v3/admin/diagnostics_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/me_controller.rb +0 -13
- data/app/controllers/spree/api/v3/admin/media_controller.rb +10 -0
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/products_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +39 -3
- data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +1 -3
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +24 -1
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +15 -1
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +4 -15
- data/app/controllers/spree/api/v3/seller/products/media_controller.rb +46 -0
- data/app/controllers/spree/api/v3/seller/products_controller.rb +4 -2
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +13 -5
- data/app/controllers/spree/api/v3/store/carts_controller.rb +10 -7
- data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/admin/diagnostics_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +6 -1
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +4 -1
- data/app/serializers/spree/api/v3/admin/promotion_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +12 -2
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/product_category_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/product_collection_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -2
- data/config/initializers/typelizer.rb +8 -19
- data/config/routes.rb +8 -1
- data/lib/spree/api/admin_document.rb +284 -0
- data/lib/spree/api/agent_operations.rb +300 -0
- data/lib/spree/api/agent_resource_map.rb +74 -14
- data/lib/spree/api/agent_write_schemas.rb +15 -51
- data/lib/spree/api/dependencies.rb +1 -1
- data/lib/spree/api/engine.rb +14 -1
- data/lib/spree/api/enum_types.rb +4 -1
- data/lib/spree/api/openapi/schema_helper.rb +3 -3
- data/lib/spree/api/sdk_types.rb +190 -0
- data/lib/spree/api/sdk_types_task.rb +68 -0
- data/lib/spree/api/testing_support/agent_tools.rb +35 -0
- data/lib/spree/api/testing_support/agent_tools_contract.rb +110 -0
- data/lib/spree/api/testing_support/deterministic_openapi.rb +147 -0
- data/lib/spree/api/testing_support/filter_parameters.rb +99 -0
- data/lib/spree/api/testing_support/openapi.rb +233 -0
- data/lib/spree/api/testing_support/openapi_tasks.rb +21 -0
- data/lib/spree/api/testing_support/sdk_method.rb +34 -0
- data/lib/spree/api/typelizer_generation.rb +39 -11
- data/lib/tasks/openapi.rake +5 -0
- data/lib/tasks/sdk_types.rake +6 -0
- data/lib/typelizer/open_enums.rb +13 -1
- data/openapi/admin.yaml +2241 -318
- data/openapi/store.yaml +125 -125
- metadata +26 -9
- data/lib/spree/api/agent_workflow_endpoints.rb +0 -113
|
@@ -5,6 +5,44 @@ module Spree
|
|
|
5
5
|
# place where the API's and the email serializers are all loaded: running
|
|
6
6
|
# it with any serializer missing would delete that serializer's types.
|
|
7
7
|
module TypelizerGeneration
|
|
8
|
+
# Serializers that exist only for the Admin API, kept out of the Store
|
|
9
|
+
# SDK. Event serializers stay in: they describe the `data` of the typed
|
|
10
|
+
# webhook events the Store SDK ships.
|
|
11
|
+
STORE_EXCLUDED = %w[Asset CartPromotion OrderPromotion Report TaxCategory].to_set.freeze
|
|
12
|
+
|
|
13
|
+
# The store-level types the Seller SDK carries because a seller
|
|
14
|
+
# serializer nests them (see the seller writer in the initializer).
|
|
15
|
+
SELLER_STORE_TYPES = %w[Category CustomField OptionType OptionValue Seller].to_set.freeze
|
|
16
|
+
|
|
17
|
+
# Typelizer's Alba plugin, taught the custom Alba types (see alba.rb);
|
|
18
|
+
# unmapped typed attributes crash generation.
|
|
19
|
+
#
|
|
20
|
+
# @return [Hash] Typelizer's `plugin_configs`
|
|
21
|
+
def self.plugin_configs
|
|
22
|
+
{
|
|
23
|
+
alba: {
|
|
24
|
+
ts_mapper: Typelizer::SerializerPlugins::Alba::ALBA_TS_MAPPER.merge(
|
|
25
|
+
'iso8601' => { type: :string },
|
|
26
|
+
'string' => { type: :string }
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# `interface` rather than `type`, so SDK consumers can extend generated
|
|
33
|
+
# types through declaration merging.
|
|
34
|
+
#
|
|
35
|
+
# @param dir [String, Pathname] a folder Typelizer wrote
|
|
36
|
+
def self.use_interfaces!(dir)
|
|
37
|
+
Dir[File.join(dir, '*.ts')].each do |file|
|
|
38
|
+
next if File.basename(file) == 'index.ts'
|
|
39
|
+
|
|
40
|
+
content = File.read(file)
|
|
41
|
+
updated = content.gsub(/^type (\w+) = \{/, 'interface \1 {')
|
|
42
|
+
File.write(file, updated) if updated != content
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
8
46
|
# @param serializer_dirs [Array<String, Pathname>] directories to load before generating
|
|
9
47
|
def self.call(serializer_dirs)
|
|
10
48
|
serializer_dirs.each { |dir| Rails.autoloaders.main.eager_load_dir(dir.to_s) }
|
|
@@ -17,19 +55,9 @@ module Spree
|
|
|
17
55
|
require 'typelizer/generator'
|
|
18
56
|
Typelizer::Generator.call(force: true)
|
|
19
57
|
|
|
20
|
-
# `interface` rather than `type`, so SDK consumers can extend generated
|
|
21
|
-
# types through declaration merging.
|
|
22
58
|
api_root = Spree::Api::Engine.root
|
|
23
59
|
[api_root.join('../../packages/sdk/src/types/generated'), api_root.join('../../packages/admin-sdk/src/types/generated'),
|
|
24
|
-
api_root.join('../../packages/admin-sdk/src/types/generated/emails')].each
|
|
25
|
-
Dir[File.join(dir, '*.ts')].each do |file|
|
|
26
|
-
next if File.basename(file) == 'index.ts'
|
|
27
|
-
|
|
28
|
-
content = File.read(file)
|
|
29
|
-
updated = content.gsub(/^type (\w+) = \{/, 'interface \1 {')
|
|
30
|
-
File.write(file, updated) if updated != content
|
|
31
|
-
end
|
|
32
|
-
end
|
|
60
|
+
api_root.join('../../packages/admin-sdk/src/types/generated/emails')].each { |dir| use_interfaces!(dir) }
|
|
33
61
|
|
|
34
62
|
# The typed webhook events in @spree/sdk, from the event catalog.
|
|
35
63
|
require Spree::Api::Engine.root.join('lib/spree/api/webhook_event_types').to_s
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# `spree task openapi:generate` (`bin/rails spree:openapi:generate`) in a Spree
|
|
2
|
+
# application: writes openapi/admin.yaml from the app's own rswag specs, so the
|
|
3
|
+
# admin endpoints it adds are documented, and each documented action is an
|
|
4
|
+
# agent tool. Extensions get the same task from extension_rake.
|
|
5
|
+
load File.expand_path('../spree/api/testing_support/openapi_tasks.rb', __dir__)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# `spree task sdk:serializer_types OUT=…` (`bin/rails spree:sdk:serializer_types`)
|
|
2
|
+
# in a Spree application: writes the response types of a package that extends
|
|
3
|
+
# the SDKs for the app's own endpoints, from the app's serializers. Extensions
|
|
4
|
+
# get the same task from extension_rake.
|
|
5
|
+
require 'spree/api/sdk_types_task'
|
|
6
|
+
Spree::Api::SdkTypesTask.new
|
data/lib/typelizer/open_enums.rb
CHANGED
|
@@ -19,6 +19,14 @@ module Typelizer
|
|
|
19
19
|
# the standard can add a country, a currency or a unit, and markets only
|
|
20
20
|
# accept the locales `Spree::Locales::ALL` lists.
|
|
21
21
|
module OpenEnums
|
|
22
|
+
class << self
|
|
23
|
+
# Where a named list's type is imported from. Spree's own SDKs re-export
|
|
24
|
+
# it from `@spree/sdk-core`; an extension's package (Spree::Api::SdkTypes)
|
|
25
|
+
# sets this to nil and defines its lists itself, open unless closed.
|
|
26
|
+
attr_accessor :source
|
|
27
|
+
end
|
|
28
|
+
self.source = '@spree/sdk-core'
|
|
29
|
+
|
|
22
30
|
CLOSED_TYPE_NAMES = %w[CountryCode CurrencyCode LocaleCode WeightUnit DimensionUnit].freeze
|
|
23
31
|
|
|
24
32
|
CLOSED_LIST_NAMES = %w[
|
|
@@ -61,7 +69,11 @@ module Typelizer
|
|
|
61
69
|
|
|
62
70
|
module Property
|
|
63
71
|
def enum_definition(...)
|
|
64
|
-
|
|
72
|
+
definition = super
|
|
73
|
+
return definition unless definition
|
|
74
|
+
return "type { #{enum_type_name} } from '#{OpenEnums.source}'" if OpenEnums.source
|
|
75
|
+
|
|
76
|
+
OpenEnums.closed?(enum_type_name) ? definition : "#{definition} | (string & {})"
|
|
65
77
|
end
|
|
66
78
|
|
|
67
79
|
# Typelizer skips rewriting a file whose digest is unchanged, and the
|