@mercurjs/b2c-core 1.5.0 → 1.5.2
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.
- package/.medusa/server/src/api/admin/custom/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/custom/middlewares.js +8 -0
- package/.medusa/server/src/api/admin/custom/product-variants/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/custom/product-variants/middlewares.js +16 -0
- package/.medusa/server/src/api/admin/custom/product-variants/query-config.d.ts +7 -0
- package/.medusa/server/src/api/admin/custom/product-variants/query-config.js +48 -0
- package/.medusa/server/src/api/admin/custom/product-variants/route.d.ts +100 -0
- package/.medusa/server/src/api/admin/custom/product-variants/route.js +133 -0
- package/.medusa/server/src/api/admin/custom/product-variants/utils.d.ts +19 -0
- package/.medusa/server/src/api/admin/custom/product-variants/utils.js +31 -0
- package/.medusa/server/src/api/admin/custom/product-variants/validators.d.ts +327 -0
- package/.medusa/server/src/api/admin/custom/product-variants/validators.js +34 -0
- package/.medusa/server/src/api/admin/inventory-items/[id]/location-levels/[location_id]/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/inventory-items/[id]/location-levels/[location_id]/route.js +36 -0
- package/.medusa/server/src/api/admin/middlewares.js +13 -7
- package/.medusa/server/src/api/admin/notifications/route.js +8 -8
- package/.medusa/server/src/api/admin/orders/[id]/route.d.ts +3 -3
- package/.medusa/server/src/api/admin/orders/[id]/route.js +6 -6
- package/.medusa/server/src/api/admin/orders/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/orders/middlewares.js +17 -0
- package/.medusa/server/src/api/admin/products/validators.d.ts +98 -98
- package/.medusa/server/src/api/admin/reservations/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/reservations/middlewares.js +12 -0
- package/.medusa/server/src/api/admin/sellers/validators.d.ts +2 -2
- package/.medusa/server/src/api/admin/sellers/validators.js +9 -7
- package/.medusa/server/src/api/store/carts/[id]/line-items/[line_id]/route.js +2 -2
- package/.medusa/server/src/api/store/carts/[id]/promotions/route.js +3 -4
- package/.medusa/server/src/api/store/carts/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/store/carts/[id]/route.js +32 -0
- package/.medusa/server/src/api/store/carts/middlewares.js +4 -5
- package/.medusa/server/src/api/store/middlewares.js +11 -9
- package/.medusa/server/src/api/store/products/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/store/products/middlewares.js +13 -0
- package/.medusa/server/src/api/store/products/search/route.d.ts +81 -0
- package/.medusa/server/src/api/store/products/search/route.js +170 -0
- package/.medusa/server/src/api/store/products/validators.d.ts +36 -0
- package/.medusa/server/src/api/store/products/validators.js +17 -0
- package/.medusa/server/src/api/store/wishlist/middlewares.d.ts +1 -1
- package/.medusa/server/src/api/store/wishlist/middlewares.js +47 -25
- package/.medusa/server/src/api/store/wishlist/{[id]/product → product}/[reference_id]/route.d.ts +3 -9
- package/.medusa/server/src/api/store/wishlist/product/[reference_id]/route.js +65 -0
- package/.medusa/server/src/api/store/wishlist/route.d.ts +789 -28
- package/.medusa/server/src/api/store/wishlist/route.js +816 -37
- package/.medusa/server/src/api/vendor/campaigns/[id]/promotions/route.d.ts +22 -44
- package/.medusa/server/src/api/vendor/campaigns/[id]/promotions/route.js +31 -46
- package/.medusa/server/src/api/vendor/campaigns/middlewares.js +30 -18
- package/.medusa/server/src/api/vendor/campaigns/query-config.js +2 -2
- package/.medusa/server/src/api/vendor/campaigns/validators.d.ts +11 -0
- package/.medusa/server/src/api/vendor/campaigns/validators.js +6 -5
- package/.medusa/server/src/api/vendor/customer-groups/validators.js +1 -1
- package/.medusa/server/src/api/vendor/customers/route.js +2 -2
- package/.medusa/server/src/api/vendor/inventory-items/[id]/location-levels/[location_id]/route.d.ts +1 -2
- package/.medusa/server/src/api/vendor/inventory-items/[id]/location-levels/[location_id]/route.js +2 -5
- package/.medusa/server/src/api/vendor/inventory-items/[id]/location-levels/batch/route.js +2 -2
- package/.medusa/server/src/api/vendor/inventory-items/validators.d.ts +8 -8
- package/.medusa/server/src/api/vendor/me/route.d.ts +1 -2
- package/.medusa/server/src/api/vendor/me/route.js +1 -1
- package/.medusa/server/src/api/vendor/members/[id]/route.js +3 -3
- package/.medusa/server/src/api/vendor/orders/validators.d.ts +4 -4
- package/.medusa/server/src/api/vendor/payout-account/route.js +3 -2
- package/.medusa/server/src/api/vendor/price-lists/[id]/prices/route.d.ts +2 -2
- package/.medusa/server/src/api/vendor/price-lists/[id]/prices/route.js +2 -2
- package/.medusa/server/src/api/vendor/price-lists/route.d.ts +1 -1
- package/.medusa/server/src/api/vendor/price-lists/route.js +27 -8
- package/.medusa/server/src/api/vendor/price-lists/validators.d.ts +2 -2
- package/.medusa/server/src/api/vendor/product-collections/middlewares.js +2 -2
- package/.medusa/server/src/api/vendor/product-collections/route.d.ts +18 -0
- package/.medusa/server/src/api/vendor/product-collections/route.js +19 -1
- package/.medusa/server/src/api/vendor/product-collections/validators.d.ts +404 -15
- package/.medusa/server/src/api/vendor/product-collections/validators.js +18 -3
- package/.medusa/server/src/api/vendor/product-tags/route.d.ts +4 -1
- package/.medusa/server/src/api/vendor/product-tags/route.js +8 -8
- package/.medusa/server/src/api/vendor/product-types/validators.d.ts +153 -1
- package/.medusa/server/src/api/vendor/product-types/validators.js +6 -3
- package/.medusa/server/src/api/vendor/products/[id]/variants/[variant_id]/media/route.d.ts +3 -0
- package/.medusa/server/src/api/vendor/products/[id]/variants/[variant_id]/media/route.js +20 -0
- package/.medusa/server/src/api/vendor/products/batch/route.d.ts +34 -0
- package/.medusa/server/src/api/vendor/products/batch/route.js +79 -0
- package/.medusa/server/src/api/vendor/products/middlewares.js +19 -5
- package/.medusa/server/src/api/vendor/products/route.d.ts +8 -2
- package/.medusa/server/src/api/vendor/products/route.js +29 -21
- package/.medusa/server/src/api/vendor/products/utils.d.ts +35 -1
- package/.medusa/server/src/api/vendor/products/utils.js +148 -6
- package/.medusa/server/src/api/vendor/products/validators.d.ts +275 -99
- package/.medusa/server/src/api/vendor/products/validators.js +58 -2
- package/.medusa/server/src/api/vendor/promotions/route.d.ts +86 -2
- package/.medusa/server/src/api/vendor/promotions/route.js +116 -7
- package/.medusa/server/src/api/vendor/promotions/validators.d.ts +237 -38
- package/.medusa/server/src/api/vendor/promotions/validators.js +23 -5
- package/.medusa/server/src/api/vendor/reservations/middlewares.d.ts +4 -1
- package/.medusa/server/src/api/vendor/reservations/middlewares.js +23 -3
- package/.medusa/server/src/api/vendor/reservations/route.js +5 -3
- package/.medusa/server/src/api/vendor/reservations/validators.d.ts +45 -3
- package/.medusa/server/src/api/vendor/reservations/validators.js +5 -1
- package/.medusa/server/src/api/vendor/sellers/validators.js +1 -1
- package/.medusa/server/src/api/vendor/shipping-profiles/route.d.ts +31 -2
- package/.medusa/server/src/api/vendor/shipping-profiles/route.js +61 -10
- package/.medusa/server/src/api/vendor/shipping-profiles/validators.d.ts +92 -3
- package/.medusa/server/src/api/vendor/shipping-profiles/validators.js +10 -2
- package/.medusa/server/src/api/vendor/stock-locations/[id]/route.d.ts +1 -2
- package/.medusa/server/src/api/vendor/stock-locations/[id]/route.js +1 -1
- package/.medusa/server/src/api/vendor/stock-locations/validators.d.ts +10 -10
- package/.medusa/server/src/links/wishlist-product.js +3 -3
- package/.medusa/server/src/modules/payout/services/provider.js +1 -2
- package/.medusa/server/src/modules/seller/migrations/Migration20260114091400.d.ts +5 -0
- package/.medusa/server/src/modules/seller/migrations/Migration20260114091400.js +32 -0
- package/.medusa/server/src/modules/seller/service.js +2 -2
- package/.medusa/server/src/modules/seller/utils.d.ts +1 -1
- package/.medusa/server/src/modules/seller/utils.js +37 -10
- package/.medusa/server/src/shared/infra/http/middlewares/check-ownership.d.ts +16 -7
- package/.medusa/server/src/shared/infra/http/middlewares/check-ownership.js +26 -18
- package/.medusa/server/src/shared/infra/http/middlewares/index.d.ts +1 -0
- package/.medusa/server/src/shared/infra/http/middlewares/index.js +2 -1
- package/.medusa/server/src/shared/infra/http/middlewares/reject-seller-linked-stock-location.d.ts +19 -0
- package/.medusa/server/src/shared/infra/http/middlewares/reject-seller-linked-stock-location.js +28 -0
- package/.medusa/server/src/shared/infra/http/middlewares/vendor-promotions-rule-attribute-options-path-params-guard.js +2 -2
- package/.medusa/server/src/shared/infra/http/middlewares/vendor-promotions-rule-value-options-path-params-guard.js +2 -2
- package/.medusa/server/src/shared/infra/http/utils/products.js +9 -3
- package/.medusa/server/src/shared/infra/http/utils/unless-base-url.d.ts +1 -3
- package/.medusa/server/src/shared/infra/http/utils/unless-base-url.js +1 -1
- package/.medusa/server/src/subscribers/notification-seller-new-order.d.ts +1 -1
- package/.medusa/server/src/subscribers/notification-seller-new-order.js +44 -37
- package/.medusa/server/src/subscribers/payout-webhook.js +1 -1
- package/.medusa/server/src/subscribers/seller-status-changed.js +2 -3
- package/.medusa/server/src/utils/stock-locations.d.ts +9 -0
- package/.medusa/server/src/utils/stock-locations.js +231 -0
- package/.medusa/server/src/workflows/attribute/steps/update-attributes.js +1 -1
- package/.medusa/server/src/workflows/attribute/steps/validate-attribute-value.js +7 -3
- package/.medusa/server/src/workflows/attribute/utils/products-updated-handler.d.ts +3 -3
- package/.medusa/server/src/workflows/attribute/utils/products-updated-handler.js +17 -15
- package/.medusa/server/src/workflows/attribute/utils/validate-attribute-values-to-link.js +2 -2
- package/.medusa/server/src/workflows/cart/steps/create-order-set.js +1 -1
- package/.medusa/server/src/workflows/cart/utils/prepare-confirm-inventory-input.js +1 -1
- package/.medusa/server/src/workflows/cart/workflows/split-and-complete-cart.js +5 -7
- package/.medusa/server/src/workflows/configuration/steps/create-configuration-rule.js +1 -1
- package/.medusa/server/src/workflows/fulfillment-set/create-vendor-service-zone.js +2 -2
- package/.medusa/server/src/workflows/hooks/add-order-line-items-pricing-context.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/add-order-line-items-pricing-context.js +75 -0
- package/.medusa/server/src/workflows/hooks/fetch-shipping-option-pricing-context.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/fetch-shipping-option-pricing-context.js +97 -0
- package/.medusa/server/src/workflows/hooks/product-deleted.js +12 -5
- package/.medusa/server/src/workflows/order/steps/create-payout.js +1 -1
- package/.medusa/server/src/workflows/order/steps/validate-seller-payout-account.js +2 -2
- package/.medusa/server/src/workflows/payout/steps/update-payout-account.js +1 -1
- package/.medusa/server/src/workflows/price-list/steps/validate-vendor-price-list-prices.js +2 -2
- package/.medusa/server/src/workflows/price-list/workflows/create-vendor-price-list.js +2 -2
- package/.medusa/server/src/workflows/product/steps/update-product-status.js +7 -1
- package/.medusa/server/src/workflows/product-variants/helpers/product-variant-filter-helper.d.ts +24 -0
- package/.medusa/server/src/workflows/product-variants/helpers/product-variant-filter-helper.js +39 -0
- package/.medusa/server/src/workflows/product-variants/index.d.ts +3 -0
- package/.medusa/server/src/workflows/product-variants/index.js +20 -0
- package/.medusa/server/src/workflows/product-variants/steps/filter-variants-combined.d.ts +4 -0
- package/.medusa/server/src/workflows/product-variants/steps/filter-variants-combined.js +63 -0
- package/.medusa/server/src/workflows/product-variants/steps/get-seller-product-ids.d.ts +4 -0
- package/.medusa/server/src/workflows/product-variants/steps/get-seller-product-ids.js +28 -0
- package/.medusa/server/src/workflows/product-variants/steps/index.d.ts +2 -0
- package/.medusa/server/src/workflows/product-variants/steps/index.js +19 -0
- package/.medusa/server/src/workflows/product-variants/types.d.ts +10 -0
- package/.medusa/server/src/workflows/product-variants/types.js +3 -0
- package/.medusa/server/src/workflows/product-variants/workflows/index.d.ts +1 -0
- package/.medusa/server/src/workflows/product-variants/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/product-variants/workflows/list-filtered-product-variants.d.ts +31 -0
- package/.medusa/server/src/workflows/product-variants/workflows/list-filtered-product-variants.js +115 -0
- package/.medusa/server/src/workflows/promotions/steps/ensure-seller-product-rule-after-deletion.d.ts +8 -0
- package/.medusa/server/src/workflows/promotions/steps/ensure-seller-product-rule-after-deletion.js +87 -0
- package/.medusa/server/src/workflows/promotions/steps/index.d.ts +2 -0
- package/.medusa/server/src/workflows/promotions/steps/index.js +3 -1
- package/.medusa/server/src/workflows/promotions/steps/inject-seller-product-rule.d.ts +6 -0
- package/.medusa/server/src/workflows/promotions/steps/inject-seller-product-rule.js +43 -0
- package/.medusa/server/src/workflows/promotions/steps/verify-vendor-target-promotion-rules.d.ts +5 -0
- package/.medusa/server/src/workflows/promotions/steps/verify-vendor-target-promotion-rules.js +27 -11
- package/.medusa/server/src/workflows/promotions/utils/sync-seller-product-rule-values.d.ts +2 -0
- package/.medusa/server/src/workflows/promotions/utils/sync-seller-product-rule-values.js +165 -0
- package/.medusa/server/src/workflows/promotions/workflows/batch-vendor-promotion-rules.js +7 -2
- package/.medusa/server/src/workflows/promotions/workflows/create-vendor-promotion.js +4 -3
- package/.medusa/server/src/workflows/seller/steps/create-member.js +1 -1
- package/.medusa/server/src/workflows/seller/steps/create-payment-account.js +1 -1
- package/.medusa/server/src/workflows/seller/steps/create-payout-onboarding.js +1 -1
- package/.medusa/server/src/workflows/seller/steps/sync-stripe-account.js +1 -1
- package/.medusa/server/src/workflows/seller/steps/update-member-invite.js +3 -3
- package/.medusa/server/src/workflows/seller/steps/update-seller.js +2 -3
- package/.medusa/server/src/workflows/seller/steps/validate-products-to-import.d.ts +28 -23
- package/.medusa/server/src/workflows/seller/workflows/import-seller-products.js +2 -2
- package/.medusa/server/src/workflows/wishlist/steps/create-wishlist.js +1 -1
- package/package.json +1 -1
- package/.medusa/server/src/api/store/wishlist/[id]/product/[reference_id]/route.js +0 -61
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adminCustomMiddlewares = void 0;
|
|
4
|
+
const middlewares_1 = require("./product-variants/middlewares");
|
|
5
|
+
exports.adminCustomMiddlewares = [
|
|
6
|
+
...middlewares_1.adminProductVariantsFilteredMiddlewares,
|
|
7
|
+
];
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbS9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxnRUFBeUY7QUFFNUUsUUFBQSxzQkFBc0IsR0FBc0I7SUFDdkQsR0FBRyxxREFBdUM7Q0FDM0MsQ0FBQyJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adminProductVariantsFilteredMiddlewares = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const query_config_1 = require("./query-config");
|
|
6
|
+
const validators_1 = require("./validators");
|
|
7
|
+
exports.adminProductVariantsFilteredMiddlewares = [
|
|
8
|
+
{
|
|
9
|
+
method: ["GET"],
|
|
10
|
+
matcher: "/admin/custom/product-variants",
|
|
11
|
+
middlewares: [
|
|
12
|
+
(0, framework_1.validateAndTransformQuery)(validators_1.AdminGetProductVariantsParams, query_config_1.adminProductVariantQueryConfig.list),
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbS9wcm9kdWN0LXZhcmlhbnRzL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUdoRSxpREFBZ0U7QUFDaEUsNkNBQTZEO0FBRWhELFFBQUEsdUNBQXVDLEdBQXNCO0lBQ3hFO1FBQ0UsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2YsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxXQUFXLEVBQUU7WUFDWCxJQUFBLHFDQUF5QixFQUN2QiwwQ0FBNkIsRUFDN0IsNkNBQThCLENBQUMsSUFBSSxDQUNwQztTQUNGO0tBQ0Y7Q0FDRixDQUFDIn0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adminProductVariantQueryConfig = exports.adminProductVariantFields = void 0;
|
|
4
|
+
exports.adminProductVariantFields = [
|
|
5
|
+
"id",
|
|
6
|
+
"title",
|
|
7
|
+
"sku",
|
|
8
|
+
"barcode",
|
|
9
|
+
"ean",
|
|
10
|
+
"upc",
|
|
11
|
+
"allow_backorder",
|
|
12
|
+
"manage_inventory",
|
|
13
|
+
"hs_code",
|
|
14
|
+
"origin_country",
|
|
15
|
+
"mid_code",
|
|
16
|
+
"material",
|
|
17
|
+
"weight",
|
|
18
|
+
"length",
|
|
19
|
+
"height",
|
|
20
|
+
"width",
|
|
21
|
+
"metadata",
|
|
22
|
+
"variant_rank",
|
|
23
|
+
"product_id",
|
|
24
|
+
"created_at",
|
|
25
|
+
"updated_at",
|
|
26
|
+
"*prices",
|
|
27
|
+
"prices.currency_code",
|
|
28
|
+
"prices.amount",
|
|
29
|
+
"prices.min_quantity",
|
|
30
|
+
"prices.max_quantity",
|
|
31
|
+
"*inventory_items",
|
|
32
|
+
"inventory_items.required_quantity",
|
|
33
|
+
"inventory_items.inventory_item_id",
|
|
34
|
+
"*options",
|
|
35
|
+
"options.value",
|
|
36
|
+
"options.option_id",
|
|
37
|
+
"*product",
|
|
38
|
+
"product.title",
|
|
39
|
+
"product.handle",
|
|
40
|
+
"product.status",
|
|
41
|
+
];
|
|
42
|
+
exports.adminProductVariantQueryConfig = {
|
|
43
|
+
list: {
|
|
44
|
+
defaults: exports.adminProductVariantFields,
|
|
45
|
+
isList: true,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi9jdXN0b20vcHJvZHVjdC12YXJpYW50cy9xdWVyeS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSx5QkFBeUIsR0FBRztJQUN2QyxJQUFJO0lBQ0osT0FBTztJQUNQLEtBQUs7SUFDTCxTQUFTO0lBQ1QsS0FBSztJQUNMLEtBQUs7SUFDTCxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsVUFBVTtJQUNWLGNBQWM7SUFDZCxZQUFZO0lBQ1osWUFBWTtJQUNaLFlBQVk7SUFDWixTQUFTO0lBQ1Qsc0JBQXNCO0lBQ3RCLGVBQWU7SUFDZixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixtQ0FBbUM7SUFDbkMsbUNBQW1DO0lBQ25DLFVBQVU7SUFDVixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtDQUNqQixDQUFDO0FBRVcsUUFBQSw4QkFBOEIsR0FBRztJQUM1QyxJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsaUNBQXlCO1FBQ25DLE1BQU0sRUFBRSxJQUFJO0tBQ2I7Q0FDRixDQUFDIn0=
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
import { HttpTypes } from "@medusajs/framework/types";
|
|
3
|
+
import type { AdminGetProductVariantsParamsType } from "./validators";
|
|
4
|
+
/**
|
|
5
|
+
* @oas [get] /admin/custom/product-variants
|
|
6
|
+
* operationId: "AdminListProductVariantsFiltered"
|
|
7
|
+
* summary: "List Product Variants (Filtered)"
|
|
8
|
+
* description: "Retrieves a filtered list of product variants with advanced filtering options (seller, price, inventory)."
|
|
9
|
+
* x-authenticated: true
|
|
10
|
+
* parameters:
|
|
11
|
+
* - name: offset
|
|
12
|
+
* in: query
|
|
13
|
+
* schema:
|
|
14
|
+
* type: number
|
|
15
|
+
* required: false
|
|
16
|
+
* description: The number of items to skip before starting to collect the result set.
|
|
17
|
+
* - name: limit
|
|
18
|
+
* in: query
|
|
19
|
+
* schema:
|
|
20
|
+
* type: number
|
|
21
|
+
* required: false
|
|
22
|
+
* description: The number of items to return.
|
|
23
|
+
* - name: fields
|
|
24
|
+
* in: query
|
|
25
|
+
* schema:
|
|
26
|
+
* type: string
|
|
27
|
+
* required: false
|
|
28
|
+
* description: Comma-separated fields to include in the response.
|
|
29
|
+
* - name: seller_id
|
|
30
|
+
* in: query
|
|
31
|
+
* schema:
|
|
32
|
+
* type: string
|
|
33
|
+
* required: false
|
|
34
|
+
* description: Filter by seller ID.
|
|
35
|
+
* - name: has_price
|
|
36
|
+
* in: query
|
|
37
|
+
* schema:
|
|
38
|
+
* type: boolean
|
|
39
|
+
* required: false
|
|
40
|
+
* description: Filter variants that have prices.
|
|
41
|
+
* - name: has_inventory
|
|
42
|
+
* in: query
|
|
43
|
+
* schema:
|
|
44
|
+
* type: boolean
|
|
45
|
+
* required: false
|
|
46
|
+
* description: Filter variants that have inventory items.
|
|
47
|
+
* - name: has_stock_location
|
|
48
|
+
* in: query
|
|
49
|
+
* schema:
|
|
50
|
+
* type: boolean
|
|
51
|
+
* required: false
|
|
52
|
+
* description: Filter variants that have at least one inventory level in any stock location.
|
|
53
|
+
* - name: has_admin_stock_location
|
|
54
|
+
* in: query
|
|
55
|
+
* schema:
|
|
56
|
+
* type: boolean
|
|
57
|
+
* required: false
|
|
58
|
+
* description: Filter variants that have (or don't have) at least one admin-owned stock location (not linked to any seller).
|
|
59
|
+
* - name: q
|
|
60
|
+
* in: query
|
|
61
|
+
* schema:
|
|
62
|
+
* type: string
|
|
63
|
+
* required: false
|
|
64
|
+
* description: Search query for variant title or SKU.
|
|
65
|
+
* - name: order
|
|
66
|
+
* in: query
|
|
67
|
+
* schema:
|
|
68
|
+
* type: string
|
|
69
|
+
* required: false
|
|
70
|
+
* description: The order of the returned items.
|
|
71
|
+
* responses:
|
|
72
|
+
* "200":
|
|
73
|
+
* description: OK
|
|
74
|
+
* content:
|
|
75
|
+
* application/json:
|
|
76
|
+
* schema:
|
|
77
|
+
* type: object
|
|
78
|
+
* properties:
|
|
79
|
+
* variants:
|
|
80
|
+
* type: array
|
|
81
|
+
* description: Array of product variants.
|
|
82
|
+
* items:
|
|
83
|
+
* type: object
|
|
84
|
+
* description: Product variant object with details.
|
|
85
|
+
* count:
|
|
86
|
+
* type: integer
|
|
87
|
+
* description: The total number of items available
|
|
88
|
+
* offset:
|
|
89
|
+
* type: integer
|
|
90
|
+
* description: The number of items skipped before these items
|
|
91
|
+
* limit:
|
|
92
|
+
* type: integer
|
|
93
|
+
* description: The number of items per page
|
|
94
|
+
* tags:
|
|
95
|
+
* - Admin Product Variants
|
|
96
|
+
* security:
|
|
97
|
+
* - api_token: []
|
|
98
|
+
* - cookie_auth: []
|
|
99
|
+
*/
|
|
100
|
+
export declare const GET: (req: AuthenticatedMedusaRequest<AdminGetProductVariantsParamsType>, res: MedusaResponse<HttpTypes.AdminProductVariantListResponse>) => Promise<void>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const helpers_1 = require("@medusajs/medusa/api/admin/products/helpers");
|
|
5
|
+
const variant_inventory_quantity_1 = require("@medusajs/medusa/api/utils/middlewares/products/variant-inventory-quantity");
|
|
6
|
+
const stock_locations_1 = require("../../../../utils/stock-locations");
|
|
7
|
+
const list_filtered_product_variants_1 = require("../../../../workflows/product-variants/workflows/list-filtered-product-variants");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
/**
|
|
10
|
+
* @oas [get] /admin/custom/product-variants
|
|
11
|
+
* operationId: "AdminListProductVariantsFiltered"
|
|
12
|
+
* summary: "List Product Variants (Filtered)"
|
|
13
|
+
* description: "Retrieves a filtered list of product variants with advanced filtering options (seller, price, inventory)."
|
|
14
|
+
* x-authenticated: true
|
|
15
|
+
* parameters:
|
|
16
|
+
* - name: offset
|
|
17
|
+
* in: query
|
|
18
|
+
* schema:
|
|
19
|
+
* type: number
|
|
20
|
+
* required: false
|
|
21
|
+
* description: The number of items to skip before starting to collect the result set.
|
|
22
|
+
* - name: limit
|
|
23
|
+
* in: query
|
|
24
|
+
* schema:
|
|
25
|
+
* type: number
|
|
26
|
+
* required: false
|
|
27
|
+
* description: The number of items to return.
|
|
28
|
+
* - name: fields
|
|
29
|
+
* in: query
|
|
30
|
+
* schema:
|
|
31
|
+
* type: string
|
|
32
|
+
* required: false
|
|
33
|
+
* description: Comma-separated fields to include in the response.
|
|
34
|
+
* - name: seller_id
|
|
35
|
+
* in: query
|
|
36
|
+
* schema:
|
|
37
|
+
* type: string
|
|
38
|
+
* required: false
|
|
39
|
+
* description: Filter by seller ID.
|
|
40
|
+
* - name: has_price
|
|
41
|
+
* in: query
|
|
42
|
+
* schema:
|
|
43
|
+
* type: boolean
|
|
44
|
+
* required: false
|
|
45
|
+
* description: Filter variants that have prices.
|
|
46
|
+
* - name: has_inventory
|
|
47
|
+
* in: query
|
|
48
|
+
* schema:
|
|
49
|
+
* type: boolean
|
|
50
|
+
* required: false
|
|
51
|
+
* description: Filter variants that have inventory items.
|
|
52
|
+
* - name: has_stock_location
|
|
53
|
+
* in: query
|
|
54
|
+
* schema:
|
|
55
|
+
* type: boolean
|
|
56
|
+
* required: false
|
|
57
|
+
* description: Filter variants that have at least one inventory level in any stock location.
|
|
58
|
+
* - name: has_admin_stock_location
|
|
59
|
+
* in: query
|
|
60
|
+
* schema:
|
|
61
|
+
* type: boolean
|
|
62
|
+
* required: false
|
|
63
|
+
* description: Filter variants that have (or don't have) at least one admin-owned stock location (not linked to any seller).
|
|
64
|
+
* - name: q
|
|
65
|
+
* in: query
|
|
66
|
+
* schema:
|
|
67
|
+
* type: string
|
|
68
|
+
* required: false
|
|
69
|
+
* description: Search query for variant title or SKU.
|
|
70
|
+
* - name: order
|
|
71
|
+
* in: query
|
|
72
|
+
* schema:
|
|
73
|
+
* type: string
|
|
74
|
+
* required: false
|
|
75
|
+
* description: The order of the returned items.
|
|
76
|
+
* responses:
|
|
77
|
+
* "200":
|
|
78
|
+
* description: OK
|
|
79
|
+
* content:
|
|
80
|
+
* application/json:
|
|
81
|
+
* schema:
|
|
82
|
+
* type: object
|
|
83
|
+
* properties:
|
|
84
|
+
* variants:
|
|
85
|
+
* type: array
|
|
86
|
+
* description: Array of product variants.
|
|
87
|
+
* items:
|
|
88
|
+
* type: object
|
|
89
|
+
* description: Product variant object with details.
|
|
90
|
+
* count:
|
|
91
|
+
* type: integer
|
|
92
|
+
* description: The total number of items available
|
|
93
|
+
* offset:
|
|
94
|
+
* type: integer
|
|
95
|
+
* description: The number of items skipped before these items
|
|
96
|
+
* limit:
|
|
97
|
+
* type: integer
|
|
98
|
+
* description: The number of items per page
|
|
99
|
+
* tags:
|
|
100
|
+
* - Admin Product Variants
|
|
101
|
+
* security:
|
|
102
|
+
* - api_token: []
|
|
103
|
+
* - cookie_auth: []
|
|
104
|
+
*/
|
|
105
|
+
const GET = async (req, res) => {
|
|
106
|
+
const withInventoryQuantity = !!req.queryConfig?.fields?.some((field) => field.includes("inventory_quantity"));
|
|
107
|
+
if (withInventoryQuantity) {
|
|
108
|
+
req.queryConfig.fields = (req.queryConfig.fields ?? []).filter((field) => !field.includes("inventory_quantity"));
|
|
109
|
+
}
|
|
110
|
+
const { custom, filters } = (0, utils_1.splitVariantFilters)(req.filterableFields);
|
|
111
|
+
const { result } = await (0, list_filtered_product_variants_1.listFilteredProductVariantsWorkflow)(req.scope).run({
|
|
112
|
+
input: {
|
|
113
|
+
...custom,
|
|
114
|
+
fields: (0, helpers_1.remapKeysForVariant)(req.queryConfig.fields ?? []),
|
|
115
|
+
filters,
|
|
116
|
+
pagination: req.queryConfig.pagination,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
const workflowResult = result;
|
|
120
|
+
const filteredVariants = workflowResult.variants ?? [];
|
|
121
|
+
await (0, stock_locations_1.attachManagedByToVariants)(req.scope, filteredVariants);
|
|
122
|
+
if (withInventoryQuantity) {
|
|
123
|
+
await (0, variant_inventory_quantity_1.wrapVariantsWithTotalInventoryQuantity)(req, filteredVariants || []);
|
|
124
|
+
}
|
|
125
|
+
res.json({
|
|
126
|
+
variants: filteredVariants.map(utils_1.remapVariantWithManagedBy),
|
|
127
|
+
count: workflowResult?.count ?? filteredVariants.length,
|
|
128
|
+
offset: workflowResult?.offset ?? req.queryConfig.pagination?.skip ?? 0,
|
|
129
|
+
limit: workflowResult?.limit ?? req.queryConfig.pagination?.take ?? 50,
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
exports.GET = GET;
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbS9wcm9kdWN0LXZhcmlhbnRzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLHlFQUVxRDtBQUNyRCwySEFBb0k7QUFFcEksdUVBQThFO0FBQzlFLG9JQUV5RjtBQUV6RixtQ0FHaUI7QUFFakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0ZHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrRSxFQUNsRSxHQUE4RCxFQUM5RCxFQUFFO0lBQ0YsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUNyQyxDQUFDO0lBRUYsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM1RCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLDJCQUFtQixFQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsb0VBQW1DLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMxRSxLQUFLLEVBQUU7WUFDTCxHQUFHLE1BQU07WUFDVCxNQUFNLEVBQUUsSUFBQSw2QkFBbUIsRUFBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDekQsT0FBTztZQUNQLFVBQVUsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVU7U0FDdkM7S0FDRixDQUFDLENBQUM7SUFTSCxNQUFNLGNBQWMsR0FBRyxNQUFtQyxDQUFDO0lBQzNELE1BQU0sZ0JBQWdCLEdBQXdCLGNBQWMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBRTVFLE1BQU0sSUFBQSwyQ0FBeUIsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFN0QsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBQSxtRUFBc0MsRUFBQyxHQUFHLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGlDQUF5QixDQUFDO1FBQ3pELEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLGdCQUFnQixDQUFDLE1BQU07UUFDdkQsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDdkUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUU7S0FDdkUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBL0NXLFFBQUEsR0FBRyxPQStDZCJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ProductVariantDTO } from "@medusajs/framework/types";
|
|
2
|
+
import { HttpTypes } from "@medusajs/framework/types";
|
|
3
|
+
import type { StockLocationManagedBy } from "../../../../utils/stock-locations";
|
|
4
|
+
export type VariantCustomFilters = {
|
|
5
|
+
seller_id?: string;
|
|
6
|
+
has_price?: boolean;
|
|
7
|
+
has_inventory?: boolean;
|
|
8
|
+
has_stock_location?: boolean;
|
|
9
|
+
has_admin_stock_location?: boolean;
|
|
10
|
+
q?: string;
|
|
11
|
+
};
|
|
12
|
+
export type AdminVariantWithManagedBy = HttpTypes.AdminProductVariant & {
|
|
13
|
+
managed_by: StockLocationManagedBy;
|
|
14
|
+
};
|
|
15
|
+
export declare function splitVariantFilters(input: unknown): {
|
|
16
|
+
custom: VariantCustomFilters;
|
|
17
|
+
filters: Record<string, unknown>;
|
|
18
|
+
};
|
|
19
|
+
export declare function remapVariantWithManagedBy(variant: ProductVariantDTO): AdminVariantWithManagedBy;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitVariantFilters = splitVariantFilters;
|
|
4
|
+
exports.remapVariantWithManagedBy = remapVariantWithManagedBy;
|
|
5
|
+
const helpers_1 = require("@medusajs/medusa/api/admin/products/helpers");
|
|
6
|
+
function splitVariantFilters(input) {
|
|
7
|
+
const record = input && typeof input === "object" ? input : {};
|
|
8
|
+
const { seller_id: seller_id_raw, has_price: has_price_raw, has_inventory: has_inventory_raw, has_stock_location: has_stock_location_raw, has_admin_stock_location: has_admin_stock_location_raw, q: q_raw, ...filters } = record;
|
|
9
|
+
const custom = {
|
|
10
|
+
seller_id: typeof seller_id_raw === "string" ? seller_id_raw : undefined,
|
|
11
|
+
has_price: typeof has_price_raw === "boolean" ? has_price_raw : undefined,
|
|
12
|
+
has_inventory: typeof has_inventory_raw === "boolean" ? has_inventory_raw : undefined,
|
|
13
|
+
has_stock_location: typeof has_stock_location_raw === "boolean"
|
|
14
|
+
? has_stock_location_raw
|
|
15
|
+
: undefined,
|
|
16
|
+
has_admin_stock_location: typeof has_admin_stock_location_raw === "boolean"
|
|
17
|
+
? has_admin_stock_location_raw
|
|
18
|
+
: undefined,
|
|
19
|
+
q: typeof q_raw === "string" ? q_raw : undefined,
|
|
20
|
+
};
|
|
21
|
+
return { custom, filters };
|
|
22
|
+
}
|
|
23
|
+
function remapVariantWithManagedBy(variant) {
|
|
24
|
+
const remapped = (0, helpers_1.remapVariantResponse)(variant);
|
|
25
|
+
const managedBy = typeof variant.managed_by === "string"
|
|
26
|
+
? variant
|
|
27
|
+
.managed_by
|
|
28
|
+
: "none";
|
|
29
|
+
return { ...remapped, managed_by: managedBy };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbS9wcm9kdWN0LXZhcmlhbnRzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLGtEQWlDQztBQUVELDhEQVdDO0FBOURELHlFQUFtRjtBQWdCbkYsU0FBZ0IsbUJBQW1CLENBQ2pDLEtBQWM7SUFFZCxNQUFNLE1BQU0sR0FDVixLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxLQUFpQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFL0UsTUFBTSxFQUNKLFNBQVMsRUFBRSxhQUFhLEVBQ3hCLFNBQVMsRUFBRSxhQUFhLEVBQ3hCLGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQzFDLHdCQUF3QixFQUFFLDRCQUE0QixFQUN0RCxDQUFDLEVBQUUsS0FBSyxFQUNSLEdBQUcsT0FBTyxFQUNYLEdBQUcsTUFBTSxDQUFDO0lBRVgsTUFBTSxNQUFNLEdBQXlCO1FBQ25DLFNBQVMsRUFBRSxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RSxTQUFTLEVBQUUsT0FBTyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDekUsYUFBYSxFQUNYLE9BQU8saUJBQWlCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RSxrQkFBa0IsRUFDaEIsT0FBTyxzQkFBc0IsS0FBSyxTQUFTO1lBQ3pDLENBQUMsQ0FBQyxzQkFBc0I7WUFDeEIsQ0FBQyxDQUFDLFNBQVM7UUFDZix3QkFBd0IsRUFDdEIsT0FBTyw0QkFBNEIsS0FBSyxTQUFTO1lBQy9DLENBQUMsQ0FBQyw0QkFBNEI7WUFDOUIsQ0FBQyxDQUFDLFNBQVM7UUFDZixDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDakQsQ0FBQztJQUVGLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQWdCLHlCQUF5QixDQUN2QyxPQUEwQjtJQUUxQixNQUFNLFFBQVEsR0FBRyxJQUFBLDhCQUFvQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUNiLE9BQVEsT0FBK0MsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUM3RSxDQUFDLENBQUcsT0FBOEQ7YUFDN0QsVUFBcUM7UUFDMUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUViLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEQsQ0FBQyJ9
|