@zaamx/netme-pos 0.0.8 → 0.0.10

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.
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const helpers_1 = require("../helpers");
6
+ /**
7
+ * Admin clone of `GET /store/products/:id` — single product with the same
8
+ * region/customer/sales-channel pricing context as the listing.
9
+ */
10
+ const GET = async (req, res) => {
11
+ const withInventoryQuantity = req.queryConfig.fields.some((field) => field.includes("variants.inventory_quantity"));
12
+ if (withInventoryQuantity) {
13
+ req.queryConfig.fields = req.queryConfig.fields.filter((field) => !field.includes("variants.inventory_quantity"));
14
+ if (!req.queryConfig.fields.includes("variants.manage_inventory")) {
15
+ req.queryConfig.fields.push("variants.manage_inventory");
16
+ }
17
+ }
18
+ const filters = {
19
+ id: req.params.id,
20
+ ...req.filterableFields,
21
+ };
22
+ const context = {};
23
+ if (req.pricingContext) {
24
+ context["variants"] ??= {};
25
+ context["variants"]["calculated_price"] ??= (0, utils_1.QueryContext)(req.pricingContext);
26
+ }
27
+ const includesCategoriesField = req.queryConfig.fields.some((field) => field.startsWith("categories"));
28
+ if (!req.queryConfig.fields.includes("categories.is_internal")) {
29
+ req.queryConfig.fields.push("categories.is_internal");
30
+ }
31
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
32
+ const { data: products } = await query.graph({
33
+ entity: "product",
34
+ filters,
35
+ context,
36
+ fields: req.queryConfig.fields,
37
+ }, {
38
+ locale: req.locale,
39
+ });
40
+ const product = products[0];
41
+ if (!product) {
42
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Product with id: ${req.params.id} was not found`);
43
+ }
44
+ if (withInventoryQuantity) {
45
+ await (0, helpers_1.wrapVariantsWithInventoryQuantity)(req, product.variants || [], (0, helpers_1.getInventoryScope)(req));
46
+ }
47
+ if (includesCategoriesField) {
48
+ (0, helpers_1.filterOutInternalProductCategories)([product]);
49
+ }
50
+ await (0, helpers_1.wrapProductsWithTaxPrices)(req, [product]);
51
+ res.json({ product });
52
+ };
53
+ exports.GET = GET;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ldG1lLXBvcy9wcm9kdWN0cy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUlrQztBQUNsQyx3Q0FNbUI7QUFFbkI7OztHQUdHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQXVCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3hFLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM5QyxDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUMxRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7WUFDbEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBVztRQUN0QixFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQjtLQUN4QixDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQTtJQUN2QyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzFCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDcEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FDL0IsQ0FBQTtJQUVELElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQy9ELEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FDMUM7UUFDRSxNQUFNLEVBQUUsU0FBUztRQUNqQixPQUFPO1FBQ1AsT0FBTztRQUNQLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07S0FDL0IsRUFDRDtRQUNFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtLQUNuQixDQUNGLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0Isb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FDbEQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFBLDJDQUFpQyxFQUNyQyxHQUFHLEVBQ0gsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQ3RCLElBQUEsMkJBQWlCLEVBQUMsR0FBRyxDQUFDLENBQ3ZCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzVCLElBQUEsNENBQWtDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxNQUFNLElBQUEsbUNBQXlCLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUMvQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUN2QixDQUFDLENBQUE7QUF0RVksUUFBQSxHQUFHLE9Bc0VmIn0=
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PRICE_FIELD_PATHS = void 0;
4
+ exports.normalizeDataForContext = normalizeDataForContext;
5
+ exports.setPricingContextFromCustomer = setPricingContextFromCustomer;
6
+ exports.setTaxContext = setTaxContext;
7
+ exports.applyDefaultProductStatus = applyDefaultProductStatus;
8
+ exports.applyMaybeLinkFilterIfNecessary = applyMaybeLinkFilterIfNecessary;
9
+ const http_1 = require("@medusajs/framework/http");
10
+ const utils_1 = require("@medusajs/framework/utils");
11
+ /**
12
+ * Admin-side ports of the store product context middlewares.
13
+ *
14
+ * `normalizeDataForContext` and `setTaxContext` are copied verbatim from
15
+ * Medusa (they only read region/cart/country from `filterableFields`, with no
16
+ * dependency on the customer token or publishable key).
17
+ *
18
+ * `setPricingContextFromCustomer` is the adapted version of the store's
19
+ * `setPricingContext`: it resolves customer-group pricing from the
20
+ * `?customer=cus_...` query param instead of `req.auth_context.actor_id`.
21
+ *
22
+ * `applyDefaultProductStatus` and `applyMaybeLinkFilterIfNecessary` adapt the
23
+ * store's defaults to admin (status is overridable; sales channel is optional).
24
+ */
25
+ exports.DEFAULT_PRICE_FIELD_PATHS = ["variants.calculated_price"];
26
+ // ---------------------------------------------------------------------------
27
+ // normalizeDataForContext — verbatim port
28
+ // Resolves region_id from: region_id param → cart → store default.
29
+ // ---------------------------------------------------------------------------
30
+ function normalizeDataForContext(options = {}) {
31
+ const { priceFieldPaths = exports.DEFAULT_PRICE_FIELD_PATHS } = options;
32
+ return async (req, _, next) => {
33
+ let withCalculatedPrice = false;
34
+ req.queryConfig.fields = req.queryConfig.fields.map((field) => {
35
+ for (const pricePath of priceFieldPaths) {
36
+ if (field === pricePath) {
37
+ withCalculatedPrice = true;
38
+ return `${pricePath}.*`;
39
+ }
40
+ if (field.startsWith(`${pricePath}.`)) {
41
+ withCalculatedPrice = true;
42
+ return field;
43
+ }
44
+ }
45
+ return field;
46
+ });
47
+ if (!withCalculatedPrice && req.filterableFields.region_id) {
48
+ for (const pricePath of priceFieldPaths) {
49
+ const wildcardField = `${pricePath}.*`;
50
+ if (!req.queryConfig.fields.includes(wildcardField)) {
51
+ req.queryConfig.fields.push(wildcardField);
52
+ }
53
+ }
54
+ withCalculatedPrice = priceFieldPaths.length > 0;
55
+ }
56
+ if (!withCalculatedPrice) {
57
+ return next();
58
+ }
59
+ let regionId = req.filterableFields.region_id;
60
+ let countryCode = req.filterableFields.country_code;
61
+ let province = req.filterableFields.province;
62
+ if (req.filterableFields.cart_id) {
63
+ const cart = await (0, http_1.refetchEntity)({
64
+ entity: "cart",
65
+ idOrFilter: req.filterableFields.cart_id,
66
+ scope: req.scope,
67
+ fields: ["region_id", "shipping_address.*"],
68
+ });
69
+ if (cart?.region_id) {
70
+ regionId = cart.region_id;
71
+ }
72
+ if (cart?.shipping_address) {
73
+ countryCode = cart.shipping_address.country_code;
74
+ province = cart.shipping_address.province;
75
+ }
76
+ }
77
+ if (!regionId) {
78
+ const { data: stores } = await (0, http_1.refetchEntities)({
79
+ entity: "store",
80
+ scope: req.scope,
81
+ fields: ["id", "default_region_id"],
82
+ options: { cache: { enable: true } },
83
+ });
84
+ regionId = stores[0]?.default_region_id;
85
+ }
86
+ if (!regionId) {
87
+ try {
88
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing required pricing context to calculate prices - provide region_id (or cart_id, or configure a store default region)`);
89
+ }
90
+ catch (e) {
91
+ return next(e);
92
+ }
93
+ }
94
+ req.filterableFields.region_id = regionId;
95
+ req.filterableFields.country_code = countryCode;
96
+ req.filterableFields.province = province;
97
+ return next();
98
+ };
99
+ }
100
+ // ---------------------------------------------------------------------------
101
+ // setPricingContextFromCustomer — adapted from store `setPricingContext`.
102
+ // Customer comes from `?customer=cus_...` instead of the customer token.
103
+ // ---------------------------------------------------------------------------
104
+ function setPricingContextFromCustomer(options = {}) {
105
+ const { priceFieldPaths = exports.DEFAULT_PRICE_FIELD_PATHS } = options;
106
+ return async (req, _, next) => {
107
+ const withCalculatedPrice = req.queryConfig.fields.some((field) => priceFieldPaths.some((pricePath) => field === pricePath || field.startsWith(`${pricePath}.`)));
108
+ if (!withCalculatedPrice) {
109
+ return next();
110
+ }
111
+ const region = await (0, http_1.refetchEntity)({
112
+ entity: "region",
113
+ idOrFilter: req.filterableFields.region_id,
114
+ scope: req.scope,
115
+ fields: ["id", "currency_code"],
116
+ options: { cache: { enable: true } },
117
+ });
118
+ if (!region) {
119
+ try {
120
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Region with id ${req.filterableFields.region_id} not found when populating the pricing context`);
121
+ }
122
+ catch (e) {
123
+ return next(e);
124
+ }
125
+ }
126
+ const pricingContext = {
127
+ region_id: region.id,
128
+ currency_code: region.currency_code,
129
+ };
130
+ // Admin: resolve customer groups from the `?customer=cus_...` param.
131
+ const customerId = req.filterableFields.customer;
132
+ if (customerId) {
133
+ const { data: customerGroups } = await (0, http_1.refetchEntities)({
134
+ entity: "customer_group",
135
+ idOrFilter: { customers: { id: customerId } },
136
+ scope: req.scope,
137
+ fields: ["id"],
138
+ });
139
+ pricingContext.customer = { groups: [] };
140
+ customerGroups.map((cg) => pricingContext.customer.groups.push({ id: cg.id }));
141
+ }
142
+ req.pricingContext = pricingContext;
143
+ return next();
144
+ };
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // setTaxContext — verbatim port
148
+ // ---------------------------------------------------------------------------
149
+ function setTaxContext(options = {}) {
150
+ const { priceFieldPaths = exports.DEFAULT_PRICE_FIELD_PATHS } = options;
151
+ return async (req, _, next) => {
152
+ const withCalculatedPrice = req.queryConfig.fields.some((field) => priceFieldPaths.some((pricePath) => field === pricePath || field.startsWith(`${pricePath}.`)));
153
+ if (!withCalculatedPrice) {
154
+ return next();
155
+ }
156
+ try {
157
+ const region = await (0, http_1.refetchEntity)({
158
+ entity: "region",
159
+ idOrFilter: req.filterableFields.region_id,
160
+ scope: req.scope,
161
+ fields: ["automatic_taxes"],
162
+ });
163
+ if (!region) {
164
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Region with id ${req.filterableFields.region_id} not found when populating the tax context`);
165
+ }
166
+ const inclusivity = { automaticTaxes: region.automatic_taxes };
167
+ if (!inclusivity.automaticTaxes) {
168
+ return next();
169
+ }
170
+ let taxLinesContext = undefined;
171
+ if (req.filterableFields.country_code) {
172
+ taxLinesContext = {
173
+ address: {
174
+ country_code: req.filterableFields.country_code,
175
+ province_code: req.filterableFields.province,
176
+ },
177
+ locale: req.locale,
178
+ };
179
+ }
180
+ req.taxContext = {
181
+ taxLineContext: taxLinesContext,
182
+ taxInclusivityContext: inclusivity,
183
+ };
184
+ return next();
185
+ }
186
+ catch (e) {
187
+ next(e);
188
+ }
189
+ };
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // applyDefaultProductStatus — admin default: published unless caller filters.
193
+ // (Store unconditionally forces PUBLISHED; admin keeps it overridable.)
194
+ // ---------------------------------------------------------------------------
195
+ function applyDefaultProductStatus() {
196
+ return async (req, _, next) => {
197
+ if (!(0, utils_1.isPresent)(req.filterableFields.status)) {
198
+ req.filterableFields.status = utils_1.ProductStatus.PUBLISHED;
199
+ }
200
+ return next();
201
+ };
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // applyMaybeLinkFilterIfNecessary — store port without the index-engine branch.
205
+ // Transforms `sales_channel_id` into a link filter when there is >1 channel.
206
+ // No-op when `sales_channel_id` is absent (admin sees all channels).
207
+ // ---------------------------------------------------------------------------
208
+ async function applyMaybeLinkFilterIfNecessary(req, res, next) {
209
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
210
+ const salesChannelsQueryRes = await query.graph({
211
+ entity: "sales_channels",
212
+ fields: ["id"],
213
+ pagination: { skip: 0, take: 1 },
214
+ });
215
+ const salesChannelCount = salesChannelsQueryRes.metadata?.count ?? 0;
216
+ if (!(salesChannelCount > 1)) {
217
+ delete req.filterableFields.sales_channel_id;
218
+ return next();
219
+ }
220
+ return (0, http_1.maybeApplyLinkFilter)({
221
+ entryPoint: "product_sales_channel",
222
+ resourceId: "product_id",
223
+ filterableField: "sales_channel_id",
224
+ })(req, res, next);
225
+ }
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1taWRkbGV3YXJlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vbmV0bWUtcG9zL3Byb2R1Y3RzL2NvbnRleHQtbWlkZGxld2FyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBOENBLDBEQXNGQztBQU1ELHNFQTREQztBQUtELHNDQXlEQztBQU1ELDhEQVdDO0FBT0QsMEVBdUJDO0FBblRELG1EQU9pQztBQUNqQyxxREFLa0M7QUFFbEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVVLFFBQUEseUJBQXlCLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0FBWXRFLDhFQUE4RTtBQUM5RSwwQ0FBMEM7QUFDMUMsbUVBQW1FO0FBQ25FLDhFQUE4RTtBQUM5RSxTQUFnQix1QkFBdUIsQ0FBQyxVQUEwQixFQUFFO0lBQ2xFLE1BQU0sRUFBRSxlQUFlLEdBQUcsaUNBQXlCLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFL0QsT0FBTyxLQUFLLEVBQ1YsR0FBa0IsRUFDbEIsQ0FBaUIsRUFDakIsSUFBd0IsRUFDeEIsRUFBRTtRQUNGLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFBO1FBRS9CLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVELEtBQUssTUFBTSxTQUFTLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QixtQkFBbUIsR0FBRyxJQUFJLENBQUE7b0JBQzFCLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQTtnQkFDekIsQ0FBQztnQkFDRCxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLG1CQUFtQixHQUFHLElBQUksQ0FB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
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getInventoryScope = exports.wrapVariantsWithInventoryQuantity = exports.wrapProductsWithTaxPrices = exports.filterOutInternalProductCategories = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /**
6
+ * Drop internal categories from the response, mirroring the store helper.
7
+ */
8
+ const filterOutInternalProductCategories = (products) => {
9
+ return products.forEach((product) => {
10
+ if (!product.categories) {
11
+ return;
12
+ }
13
+ product.categories = product.categories.filter((category) => !category.is_internal);
14
+ });
15
+ };
16
+ exports.filterOutInternalProductCategories = filterOutInternalProductCategories;
17
+ /**
18
+ * Port of the store `wrapProductsWithTaxPrices`: enriches each variant's
19
+ * `calculated_price` with `*_with_tax` / `*_without_tax` amounts.
20
+ *
21
+ * (Translations feature flag handling from core is intentionally omitted.)
22
+ */
23
+ const wrapProductsWithTaxPrices = async (req, products) => {
24
+ if (!req.taxContext?.taxInclusivityContext || !req.taxContext?.taxLineContext) {
25
+ return;
26
+ }
27
+ if (!req.taxContext.taxInclusivityContext.automaticTaxes) {
28
+ return;
29
+ }
30
+ const taxService = req.scope.resolve(utils_1.Modules.TAX);
31
+ const taxLines = (await taxService.getTaxLines(products.map(asTaxItem).flat(), req.taxContext.taxLineContext));
32
+ const taxRatesMap = new Map();
33
+ taxLines.forEach((taxRate) => {
34
+ if (!taxRatesMap.has(taxRate.line_item_id)) {
35
+ taxRatesMap.set(taxRate.line_item_id, []);
36
+ }
37
+ taxRatesMap.get(taxRate.line_item_id)?.push(taxRate);
38
+ });
39
+ products.forEach((product) => {
40
+ product.variants?.forEach((variant) => {
41
+ if (!variant.calculated_price) {
42
+ return;
43
+ }
44
+ const taxRatesForVariant = taxRatesMap.get(variant.id) || [];
45
+ const { priceWithTax, priceWithoutTax } = (0, utils_1.calculateAmountsWithTax)({
46
+ taxLines: taxRatesForVariant,
47
+ amount: variant.calculated_price.calculated_amount,
48
+ includesTax: variant.calculated_price.is_calculated_price_tax_inclusive,
49
+ });
50
+ variant.calculated_price.calculated_amount_with_tax = priceWithTax;
51
+ variant.calculated_price.calculated_amount_without_tax = priceWithoutTax;
52
+ const { priceWithTax: originalPriceWithTax, priceWithoutTax: originalPriceWithoutTax, } = (0, utils_1.calculateAmountsWithTax)({
53
+ taxLines: taxRatesForVariant,
54
+ amount: variant.calculated_price.original_amount,
55
+ includesTax: variant.calculated_price.is_original_price_tax_inclusive,
56
+ });
57
+ variant.calculated_price.original_amount_with_tax = originalPriceWithTax;
58
+ variant.calculated_price.original_amount_without_tax =
59
+ originalPriceWithoutTax;
60
+ });
61
+ });
62
+ };
63
+ exports.wrapProductsWithTaxPrices = wrapProductsWithTaxPrices;
64
+ const asTaxItem = (product) => {
65
+ return product.variants
66
+ ?.map((variant) => {
67
+ if (!variant.calculated_price) {
68
+ return;
69
+ }
70
+ return {
71
+ id: variant.id,
72
+ product_id: product.id,
73
+ product_type_id: product.type_id,
74
+ quantity: 1,
75
+ unit_price: variant.calculated_price.calculated_amount,
76
+ currency_code: variant.calculated_price.currency_code,
77
+ };
78
+ })
79
+ .filter((v) => !!v);
80
+ };
81
+ /**
82
+ * Admin port of `wrapVariantsWithInventoryQuantityForSalesChannel`, with a
83
+ * total-availability fallback and an optional per-stock-location scope.
84
+ *
85
+ * Resolution priority for `variants.inventory_quantity`:
86
+ * 1. `stockLocationId` (`?stock_location_id=`) → availability at that single
87
+ * stock location only.
88
+ * 2. `salesChannelId` (`?sales_channel_id=`) → availability across the
89
+ * channel's stock locations (identical to the store behaviour).
90
+ * 3. neither → TOTAL availability across
91
+ * all stock locations.
92
+ *
93
+ * Only variants with `manage_inventory = true` get a quantity (others are
94
+ * treated as always available, same as core).
95
+ */
96
+ const wrapVariantsWithInventoryQuantity = async (req, variants, scope = {}) => {
97
+ variants ??= [];
98
+ const variantIds = variants.map((variant) => variant.id).flat(1);
99
+ if (!variantIds.length) {
100
+ return;
101
+ }
102
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
103
+ let availability;
104
+ if (scope.stockLocationId) {
105
+ availability = await getVariantAvailabilityForLocation(query, variantIds, scope.stockLocationId);
106
+ }
107
+ else if (scope.salesChannelId) {
108
+ availability = await (0, utils_1.getVariantAvailability)(query, {
109
+ variant_ids: variantIds,
110
+ sales_channel_id: scope.salesChannelId,
111
+ });
112
+ }
113
+ else {
114
+ availability = await (0, utils_1.getTotalVariantAvailability)(query, {
115
+ variant_ids: variantIds,
116
+ });
117
+ }
118
+ for (const variant of variants) {
119
+ if (!variant.manage_inventory) {
120
+ continue;
121
+ }
122
+ variant.inventory_quantity = availability[variant.id]?.availability;
123
+ }
124
+ };
125
+ exports.wrapVariantsWithInventoryQuantity = wrapVariantsWithInventoryQuantity;
126
+ /**
127
+ * Per-stock-location variant availability — replicates the core
128
+ * `getVariantAvailability` algorithm (sum of `available_quantity` across the
129
+ * allowed locations per inventory item, divided by `required_quantity`, then
130
+ * the min across inventory items) but constrains the allowed-locations set to a
131
+ * single requested stock location.
132
+ */
133
+ const getVariantAvailabilityForLocation = async (query, variantIds, stockLocationId) => {
134
+ const { data: variantInventoryItems } = await query.graph({
135
+ entity: "product_variant_inventory_items",
136
+ fields: [
137
+ "variant_id",
138
+ "required_quantity",
139
+ "inventory.*",
140
+ "inventory.location_levels.*",
141
+ ],
142
+ filters: { variant_id: variantIds },
143
+ }, { cache: { enable: true } });
144
+ const variantInventoriesMap = new Map();
145
+ variantInventoryItems.forEach((link) => {
146
+ const arr = variantInventoriesMap.get(link.variant_id) || [];
147
+ arr.push(link);
148
+ variantInventoriesMap.set(link.variant_id, arr);
149
+ });
150
+ return variantIds.reduce((acc, variantId) => {
151
+ const links = variantInventoriesMap.get(variantId) || [];
152
+ const inventoryQuantities = [];
153
+ for (const link of links) {
154
+ const requiredQuantity = link.required_quantity;
155
+ const availableQuantity = (link.inventory?.location_levels || []).reduce((sum, level) => {
156
+ if (level.location_id !== stockLocationId) {
157
+ return sum;
158
+ }
159
+ return sum + (level?.available_quantity || 0);
160
+ }, 0);
161
+ inventoryQuantities.push(Math.floor(availableQuantity / requiredQuantity));
162
+ }
163
+ acc[variantId] = {
164
+ availability: inventoryQuantities.length
165
+ ? Math.min(...inventoryQuantities)
166
+ : null,
167
+ };
168
+ return acc;
169
+ }, {});
170
+ };
171
+ /**
172
+ * Resolve the inventory-availability scope from the validated query:
173
+ * - `stock_location_id` → per-location availability
174
+ * - `sales_channel_id` → per-channel availability (only when exactly one)
175
+ * Both are optional; when neither resolves, the wrapper uses total availability.
176
+ */
177
+ const getInventoryScope = (req) => {
178
+ const validated = req.validatedQuery;
179
+ const stockLocationId = validated?.stock_location_id;
180
+ let salesChannelId;
181
+ const rawSc = validated?.sales_channel_id;
182
+ if (rawSc) {
183
+ const ids = Array.isArray(rawSc) ? rawSc : [rawSc];
184
+ salesChannelId = ids.length === 1 ? ids[0] : undefined;
185
+ }
186
+ return { salesChannelId, stockLocationId };
187
+ };
188
+ exports.getInventoryScope = getInventoryScope;
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vbmV0bWUtcG9zL3Byb2R1Y3RzL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBTWtDO0FBZWxDOztHQUVHO0FBQ0ksTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLFFBQWUsRUFBRSxFQUFFO0lBQ3BFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsT0FBTTtRQUNSLENBQUM7UUFDRCxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUM1QyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN6QyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFUWSxRQUFBLGtDQUFrQyxzQ0FTOUM7QUFFRDs7Ozs7R0FLRztBQUNJLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxFQUM1QyxHQUF1QixFQUN2QixRQUFlLEVBQ2YsRUFBRTtJQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHFCQUFxQixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUM5RSxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUM1QyxRQUFR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
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listProductQueryConfig = exports.retrieveProductQueryConfig = exports.defaultStoreProductFields = void 0;
4
+ // Mirrors the store `GET /store/products` query config.
5
+ exports.defaultStoreProductFields = [
6
+ "id",
7
+ "title",
8
+ "subtitle",
9
+ "description",
10
+ "handle",
11
+ "is_giftcard",
12
+ "discountable",
13
+ "thumbnail",
14
+ "collection_id",
15
+ "type_id",
16
+ "weight",
17
+ "length",
18
+ "height",
19
+ "width",
20
+ "hs_code",
21
+ "origin_country",
22
+ "mid_code",
23
+ "material",
24
+ // Admin clone: expose status (store hides it since it forces published).
25
+ "status",
26
+ "created_at",
27
+ "updated_at",
28
+ "*type",
29
+ "*collection",
30
+ "*options",
31
+ "*options.values",
32
+ "*tags",
33
+ "*images",
34
+ "*variants",
35
+ "*variants.options",
36
+ ];
37
+ exports.retrieveProductQueryConfig = {
38
+ defaults: exports.defaultStoreProductFields,
39
+ isList: false,
40
+ };
41
+ exports.listProductQueryConfig = {
42
+ ...exports.retrieveProductQueryConfig,
43
+ defaultLimit: 50,
44
+ isList: true,
45
+ };
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi9uZXRtZS1wb3MvcHJvZHVjdHMvcXVlcnktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUF3RDtBQUMzQyxRQUFBLHlCQUF5QixHQUFHO0lBQ3ZDLElBQUk7SUFDSixPQUFPO0lBQ1AsVUFBVTtJQUNWLGFBQWE7SUFDYixRQUFRO0lBQ1IsYUFBYTtJQUNiLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZUFBZTtJQUNmLFNBQVM7SUFDVCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztJQUNULGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsVUFBVTtJQUNWLHlFQUF5RTtJQUN6RSxRQUFRO0lBQ1IsWUFBWTtJQUNaLFlBQVk7SUFDWixPQUFPO0lBQ1AsYUFBYTtJQUNiLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsT0FBTztJQUNQLFNBQVM7SUFDVCxXQUFXO0lBQ1gsbUJBQW1CO0NBQ3BCLENBQUE7QUFFWSxRQUFBLDBCQUEwQixHQUFHO0lBQ3hDLFFBQVEsRUFBRSxpQ0FBeUI7SUFDbkMsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFBO0FBRVksUUFBQSxzQkFBc0IsR0FBRztJQUNwQyxHQUFHLGtDQUEwQjtJQUM3QixZQUFZLEVBQUUsRUFBRTtJQUNoQixNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUEifQ==
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const helpers_1 = require("./helpers");
6
+ /**
7
+ * Admin clone of `GET /store/products`.
8
+ *
9
+ * Behaves like the storefront listing — region pricing (`calculated_price`),
10
+ * customer-group pricing, sales-channel scoping, taxes — but driven by URL
11
+ * params instead of a customer token + publishable key:
12
+ * - `?region_id` / `?cart_id` → pricing region (or store default)
13
+ * - `?customer=cus_...` → customer-group pricing
14
+ * - `?sales_channel_id=sc_...` → optional sales-channel scoping
15
+ * - `?status=` → optional (defaults to published)
16
+ *
17
+ * The index-engine branch is intentionally omitted (uses `query.graph` only).
18
+ */
19
+ const GET = async (req, res) => {
20
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
21
+ const context = {};
22
+ const withInventoryQuantity = req.queryConfig.fields.some((field) => field.includes("variants.inventory_quantity"));
23
+ if (withInventoryQuantity) {
24
+ req.queryConfig.fields = req.queryConfig.fields.filter((field) => !field.includes("variants.inventory_quantity"));
25
+ // The inventory wrapper only fills variants with manage_inventory=true,
26
+ // so make sure that flag is loaded even if `fields` narrowed the variant set.
27
+ if (!req.queryConfig.fields.includes("variants.manage_inventory")) {
28
+ req.queryConfig.fields.push("variants.manage_inventory");
29
+ }
30
+ }
31
+ if ((0, utils_1.isPresent)(req.pricingContext)) {
32
+ context["variants"] ??= {};
33
+ context["variants"]["calculated_price"] ??= (0, utils_1.QueryContext)(req.pricingContext);
34
+ }
35
+ const { data: products = [], metadata } = await query.graph({
36
+ entity: "product",
37
+ fields: req.queryConfig.fields,
38
+ filters: req.filterableFields,
39
+ pagination: req.queryConfig.pagination,
40
+ context,
41
+ }, {
42
+ cache: { enable: true },
43
+ locale: req.locale,
44
+ });
45
+ if (withInventoryQuantity) {
46
+ await (0, helpers_1.wrapVariantsWithInventoryQuantity)(req, products.map((product) => product.variants).flat(1), (0, helpers_1.getInventoryScope)(req));
47
+ }
48
+ await (0, helpers_1.wrapProductsWithTaxPrices)(req, products);
49
+ res.json({
50
+ products,
51
+ count: metadata.count,
52
+ offset: metadata.skip,
53
+ limit: metadata.take,
54
+ });
55
+ };
56
+ exports.GET = GET;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ldG1lLXBvcy9wcm9kdWN0cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFJa0M7QUFDbEMsdUNBS2tCO0FBRWxCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUF1QixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUN4RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO0lBRXZDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM5QyxDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUMxRCxDQUFBO1FBQ0Qsd0VBQXdFO1FBQ3hFLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQztZQUNsRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBQSxpQkFBUyxFQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBQSxvQkFBWSxFQUN0RCxHQUFHLENBQUMsY0FBZSxDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQ3pEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtRQUM3QixVQUFVLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVO1FBQ3RDLE9BQU87S0FDUixFQUNEO1FBQ0UsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtRQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07S0FDbkIsQ0FDRixDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBQSwyQ0FBaUMsRUFDckMsR0FBRyxFQUNILFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ25ELElBQUEsMkJBQWlCLEVBQUMsR0FBRyxDQUFDLENBQ3ZCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFBLG1DQUF5QixFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUU5QyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsUUFBUTtRQUNSLEtBQUssRUFBRSxRQUFTLENBQUMsS0FBSztRQUN0QixNQUFNLEVBQUUsUUFBUyxDQUFDLElBQUk7UUFDdEIsS0FBSyxFQUFFLFFBQVMsQ0FBQyxJQUFJO0tBQ3RCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQXhEWSxRQUFBLEdBQUcsT0F3RGYifQ==
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminGetProductsParams = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ /**
7
+ * Admin clone of the store `GET /store/products` query validators.
8
+ *
9
+ * The store builds these from Medusa-internal, non-exported helpers
10
+ * (`createFindParams`, `createOperatorMap`, `applyAndAndOrOperators`, …). Those
11
+ * helpers are tiny and stable, so they are ported verbatim here to keep this
12
+ * plugin self-contained (no fragile deep-imports into `@medusajs/medusa/dist`).
13
+ *
14
+ * The ONLY functional differences vs. the store schema:
15
+ * - `customer` → optional `cus_...` id, the admin replacement for the
16
+ * customer token used to resolve customer-group pricing.
17
+ * - `status` → admin may filter by product status (store forces published).
18
+ */
19
+ // ---------------------------------------------------------------------------
20
+ // Ported builder helpers (api/utils/validators.ts)
21
+ // ---------------------------------------------------------------------------
22
+ const createSelectParams = () => zod_1.z.object({
23
+ fields: zod_1.z.string().optional(),
24
+ });
25
+ const createFindParams = ({ offset, limit, order, } = {}) => {
26
+ return createSelectParams().merge(zod_1.z.object({
27
+ offset: zod_1.z.preprocess((val) => (val && typeof val === "string" ? parseInt(val) : val), zod_1.z
28
+ .number()
29
+ .optional()
30
+ .default(offset ?? 0)),
31
+ limit: zod_1.z.preprocess((val) => (val && typeof val === "string" ? parseInt(val) : val), zod_1.z
32
+ .number()
33
+ .optional()
34
+ .default(limit ?? 20)),
35
+ order: order
36
+ ? zod_1.z.string().optional().default(order)
37
+ : zod_1.z.string().optional(),
38
+ with_deleted: zod_1.z.preprocess((val) => {
39
+ if (val && typeof val === "string") {
40
+ return val === "true" ? true : val === "false" ? false : val;
41
+ }
42
+ return val;
43
+ }, zod_1.z.boolean().optional()),
44
+ }));
45
+ };
46
+ const createOperatorMap = (type, valueParser) => {
47
+ if (!type) {
48
+ type = zod_1.z.string();
49
+ }
50
+ let simpleType = type.optional();
51
+ if (valueParser) {
52
+ simpleType = zod_1.z.preprocess(valueParser, type).optional();
53
+ }
54
+ const arrayType = zod_1.z.array(type).optional();
55
+ const unionType = zod_1.z.union([simpleType, arrayType]).optional();
56
+ return zod_1.z.union([
57
+ unionType,
58
+ zod_1.z.object({
59
+ $eq: unionType,
60
+ $ne: unionType,
61
+ $in: arrayType,
62
+ $nin: arrayType,
63
+ $like: simpleType,
64
+ $ilike: simpleType,
65
+ $re: simpleType,
66
+ $contains: simpleType,
67
+ $gt: simpleType,
68
+ $gte: simpleType,
69
+ $lt: simpleType,
70
+ $lte: simpleType,
71
+ }),
72
+ ]);
73
+ };
74
+ // ---------------------------------------------------------------------------
75
+ // Ported common product validators (api/utils/common-validators)
76
+ // ---------------------------------------------------------------------------
77
+ const booleanString = () => zod_1.z
78
+ .union([zod_1.z.boolean(), zod_1.z.string()])
79
+ .refine((value) => ["true", "false"].includes(value.toString().toLowerCase()))
80
+ .transform((value) => value.toString().toLowerCase() === "true");
81
+ const applyAndAndOrOperators = (schema) => {
82
+ return schema.merge(zod_1.z.object({
83
+ $and: zod_1.z.lazy(() => schema.array()).optional(),
84
+ $or: zod_1.z.lazy(() => schema.array()).optional(),
85
+ }));
86
+ };
87
+ function recursivelyNormalizeSchema(transform) {
88
+ return (data) => {
89
+ const normalizedData = transform(data);
90
+ Object.keys(normalizedData)
91
+ .filter((key) => ["$and", "$or"].includes(key))
92
+ .forEach((key) => {
93
+ ;
94
+ normalizedData[key] = normalizedData[key].map(transform);
95
+ });
96
+ return normalizedData;
97
+ };
98
+ }
99
+ const StoreGetProductParamsDirectFields = zod_1.z.object({
100
+ q: zod_1.z.string().optional(),
101
+ id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
102
+ title: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
103
+ handle: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
104
+ is_giftcard: booleanString().optional(),
105
+ // Admin addition: allow filtering by status (store forces published).
106
+ status: zod_1.z
107
+ .union([zod_1.z.nativeEnum(utils_1.ProductStatus), zod_1.z.array(zod_1.z.nativeEnum(utils_1.ProductStatus))])
108
+ .optional(),
109
+ category_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
110
+ external_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
111
+ collection_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
112
+ tag_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
113
+ type_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
114
+ created_at: createOperatorMap().optional(),
115
+ updated_at: createOperatorMap().optional(),
116
+ deleted_at: createOperatorMap().optional(),
117
+ });
118
+ const GetProductsParams = zod_1.z
119
+ .object({
120
+ sales_channel_id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
121
+ })
122
+ .merge(StoreGetProductParamsDirectFields);
123
+ const transformProductParams = (data) => {
124
+ const res = { ...data };
125
+ if ((0, utils_1.isPresent)(data.tag_id)) {
126
+ res.tags = { id: data.tag_id };
127
+ delete res.tag_id;
128
+ }
129
+ if ((0, utils_1.isPresent)(data.category_id)) {
130
+ res.categories = { id: data.category_id };
131
+ delete res.category_id;
132
+ }
133
+ return res;
134
+ };
135
+ const StoreGetProductVariantsParamsFields = zod_1.z.object({
136
+ q: zod_1.z.string().optional(),
137
+ id: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
138
+ sku: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
139
+ ean: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
140
+ upc: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
141
+ barcode: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
142
+ options: zod_1.z
143
+ .object({ value: zod_1.z.string().optional(), option_id: zod_1.z.string().optional() })
144
+ .optional(),
145
+ created_at: createOperatorMap().optional(),
146
+ updated_at: createOperatorMap().optional(),
147
+ deleted_at: createOperatorMap().optional(),
148
+ });
149
+ // ---------------------------------------------------------------------------
150
+ // Admin product list params (store params + `customer`)
151
+ // ---------------------------------------------------------------------------
152
+ const AdminGetProductsParamsFields = zod_1.z
153
+ .object({
154
+ region_id: zod_1.z.string().optional(),
155
+ country_code: zod_1.z.string().optional(),
156
+ province: zod_1.z.string().optional(),
157
+ cart_id: zod_1.z.string().optional(),
158
+ // Admin replacement for the store's customer token.
159
+ customer: zod_1.z.string().optional(),
160
+ // Optional: scope `variants.inventory_quantity` to a single stock location.
161
+ stock_location_id: zod_1.z.string().optional(),
162
+ })
163
+ .merge(GetProductsParams)
164
+ .strict();
165
+ exports.AdminGetProductsParams = createFindParams({
166
+ offset: 0,
167
+ limit: 50,
168
+ })
169
+ .merge(AdminGetProductsParamsFields)
170
+ .merge(zod_1.z
171
+ .object({
172
+ variants: zod_1.z
173
+ .object({
174
+ options: zod_1.z
175
+ .object({
176
+ value: zod_1.z.string().optional(),
177
+ option_id: zod_1.z.string().optional(),
178
+ })
179
+ .optional(),
180
+ })
181
+ .merge(applyAndAndOrOperators(StoreGetProductVariantsParamsFields))
182
+ .optional(),
183
+ })
184
+ .merge(applyAndAndOrOperators(StoreGetProductParamsDirectFields))
185
+ .strict())
186
+ .transform(recursivelyNormalizeSchema(transformProductParams));
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vbmV0bWUtcG9zL3Byb2R1Y3RzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTJDO0FBQzNDLHFEQUFvRTtBQUVwRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCw4RUFBOEU7QUFDOUUsbURBQW1EO0FBQ25ELDhFQUE4RTtBQUU5RSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUM5QixPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1AsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQyxDQUFBO0FBRUosTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQ3hCLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxNQUtILEVBQUUsRUFBRSxFQUFFO0lBQ1IsT0FBTyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssQ0FDL0IsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sRUFBRSxPQUFDLENBQUMsVUFBVSxDQUNsQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRCxPQUFDO2FBQ0UsTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FDeEI7UUFDRCxLQUFLLEVBQUUsT0FBQyxDQUFDLFVBQVUsQ0FDakIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const framework_1 = require("@medusajs/framework");
37
+ const http_1 = require("@medusajs/framework/http");
38
+ const context_middlewares_1 = require("./admin/netme-pos/products/context-middlewares");
39
+ const ProductsQueryConfig = __importStar(require("./admin/netme-pos/products/query-config"));
40
+ const validators_1 = require("./admin/netme-pos/products/validators");
41
+ /**
42
+ * Middleware chain for the admin product clone of `GET /store/products`.
43
+ *
44
+ * `/admin/*` routes already get admin-user authentication globally, so instead
45
+ * of the store's `authenticate("customer", …)` we rely on that and resolve the
46
+ * (optional) customer from `?customer=cus_...` inside `setPricingContextFromCustomer`.
47
+ *
48
+ * Everything after `validateAndTransformQuery` mirrors the store chain, minus
49
+ * `filterByValidSalesChannels` (publishable key) — sales-channel scoping here is
50
+ * optional via `?sales_channel_id=`.
51
+ */
52
+ const clearContextKeys = (0, http_1.clearFiltersByKey)([
53
+ "region_id",
54
+ "country_code",
55
+ "province",
56
+ "cart_id",
57
+ "customer",
58
+ "stock_location_id",
59
+ ]);
60
+ exports.default = (0, http_1.defineMiddlewares)({
61
+ routes: [
62
+ {
63
+ method: ["GET"],
64
+ matcher: "/admin/netme-pos/products",
65
+ middlewares: [
66
+ (0, framework_1.validateAndTransformQuery)(validators_1.AdminGetProductsParams, ProductsQueryConfig.listProductQueryConfig),
67
+ context_middlewares_1.applyMaybeLinkFilterIfNecessary,
68
+ (0, context_middlewares_1.applyDefaultProductStatus)(),
69
+ (0, context_middlewares_1.normalizeDataForContext)(),
70
+ (0, context_middlewares_1.setPricingContextFromCustomer)(),
71
+ (0, context_middlewares_1.setTaxContext)(),
72
+ clearContextKeys,
73
+ ],
74
+ },
75
+ {
76
+ method: ["GET"],
77
+ matcher: "/admin/netme-pos/products/:id",
78
+ middlewares: [
79
+ (0, framework_1.validateAndTransformQuery)(validators_1.AdminGetProductsParams, ProductsQueryConfig.retrieveProductQueryConfig),
80
+ (0, http_1.applyParamsAsFilters)({ id: "id" }),
81
+ context_middlewares_1.applyMaybeLinkFilterIfNecessary,
82
+ (0, context_middlewares_1.applyDefaultProductStatus)(),
83
+ (0, context_middlewares_1.normalizeDataForContext)(),
84
+ (0, context_middlewares_1.setPricingContextFromCustomer)(),
85
+ (0, context_middlewares_1.setTaxContext)(),
86
+ clearContextKeys,
87
+ ],
88
+ },
89
+ ],
90
+ });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQStEO0FBQy9ELG1EQUlpQztBQUNqQyx3RkFNdUQ7QUFDdkQsNkZBQThFO0FBQzlFLHNFQUE4RTtBQUU5RTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHdCQUFpQixFQUFDO0lBQ3pDLFdBQVc7SUFDWCxjQUFjO0lBQ2QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsbUJBQW1CO0NBQ3BCLENBQUMsQ0FBQTtBQUVGLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDZixPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFdBQVcsRUFBRTtnQkFDWCxJQUFBLHFDQUF5QixFQUN2QixtQ0FBc0IsRUFDdEIsbUJBQW1CLENBQUMsc0JBQXNCLENBQzNDO2dCQUNELHFEQUErQjtnQkFDL0IsSUFBQSwrQ0FBeUIsR0FBRTtnQkFDM0IsSUFBQSw2Q0FBdUIsR0FBRTtnQkFDekIsSUFBQSxtREFBNkIsR0FBRTtnQkFDL0IsSUFBQSxtQ0FBYSxHQUFFO2dCQUNmLGdCQUFnQjthQUNqQjtTQUNGO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDZixPQUFPLEVBQUUsK0JBQStCO1lBQ3hDLFdBQVcsRUFBRTtnQkFDWCxJQUFBLHFDQUF5QixFQUN2QixtQ0FBc0IsRUFDdEIsbUJBQW1CLENBQUMsMEJBQTBCLENBQy9DO2dCQUNELElBQUEsMkJBQW9CLEVBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLHFEQUErQjtnQkFDL0IsSUFBQSwrQ0FBeUIsR0FBRTtnQkFDM0IsSUFBQSw2Q0FBdUIsR0FBRTtnQkFDekIsSUFBQSxtREFBNkIsR0FBRTtnQkFDL0IsSUFBQSxtQ0FBYSxHQUFFO2dCQUNmLGdCQUFnQjthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaamx/netme-pos",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",