@zaamx/netme-pos 0.0.7 → 0.0.9
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/netme-pos/products/[id]/route.js +51 -0
- package/.medusa/server/src/api/admin/netme-pos/products/context-middlewares.js +226 -0
- package/.medusa/server/src/api/admin/netme-pos/products/helpers.js +124 -0
- package/.medusa/server/src/api/admin/netme-pos/products/query-config.js +46 -0
- package/.medusa/server/src/api/admin/netme-pos/products/route.js +52 -0
- package/.medusa/server/src/api/admin/netme-pos/products/validators.js +185 -0
- package/.medusa/server/src/api/middlewares.js +90 -0
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
}
|
|
15
|
+
const filters = {
|
|
16
|
+
id: req.params.id,
|
|
17
|
+
...req.filterableFields,
|
|
18
|
+
};
|
|
19
|
+
const context = {};
|
|
20
|
+
if (req.pricingContext) {
|
|
21
|
+
context["variants"] ??= {};
|
|
22
|
+
context["variants"]["calculated_price"] ??= (0, utils_1.QueryContext)(req.pricingContext);
|
|
23
|
+
}
|
|
24
|
+
const includesCategoriesField = req.queryConfig.fields.some((field) => field.startsWith("categories"));
|
|
25
|
+
if (!req.queryConfig.fields.includes("categories.is_internal")) {
|
|
26
|
+
req.queryConfig.fields.push("categories.is_internal");
|
|
27
|
+
}
|
|
28
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
29
|
+
const { data: products } = await query.graph({
|
|
30
|
+
entity: "product",
|
|
31
|
+
filters,
|
|
32
|
+
context,
|
|
33
|
+
fields: req.queryConfig.fields,
|
|
34
|
+
}, {
|
|
35
|
+
locale: req.locale,
|
|
36
|
+
});
|
|
37
|
+
const product = products[0];
|
|
38
|
+
if (!product) {
|
|
39
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Product with id: ${req.params.id} was not found`);
|
|
40
|
+
}
|
|
41
|
+
if (withInventoryQuantity) {
|
|
42
|
+
await (0, helpers_1.wrapVariantsWithInventoryQuantity)(req, product.variants || [], (0, helpers_1.getSingleSalesChannelId)(req));
|
|
43
|
+
}
|
|
44
|
+
if (includesCategoriesField) {
|
|
45
|
+
(0, helpers_1.filterOutInternalProductCategories)([product]);
|
|
46
|
+
}
|
|
47
|
+
await (0, helpers_1.wrapProductsWithTaxPrices)(req, [product]);
|
|
48
|
+
res.json({ product });
|
|
49
|
+
};
|
|
50
|
+
exports.GET = GET;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ldG1lLXBvcy9wcm9kdWN0cy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUlrQztBQUNsQyx3Q0FNbUI7QUFFbkI7OztHQUdHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQXVCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3hFLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM5QyxDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUMxRCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFXO1FBQ3RCLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakIsR0FBRyxHQUFHLENBQUMsZ0JBQWdCO0tBQ3hCLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO0lBQ3ZDLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0lBRUQsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUMvQixDQUFBO0lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7UUFDL0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWhFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUMxQztRQUNFLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE9BQU87UUFDUCxPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtLQUMvQixFQUNEO1FBQ0UsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO0tBQ25CLENBQ0YsQ0FBQTtJQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUUzQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixvQkFBb0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUNsRCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUEsMkNBQWlDLEVBQ3JDLEdBQUcsRUFDSCxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFDdEIsSUFBQSxpQ0FBdUIsRUFBQyxHQUFHLENBQUMsQ0FDN0IsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDNUIsSUFBQSw0Q0FBa0MsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELE1BQU0sSUFBQSxtQ0FBeUIsRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUMsQ0FBQTtBQW5FWSxRQUFBLEdBQUcsT0FtRWYifQ==
|
|
@@ -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,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSingleSalesChannelId = 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`.
|
|
83
|
+
*
|
|
84
|
+
* Inventory availability requires a single sales channel. The store derives it
|
|
85
|
+
* from the publishable key; here it must be supplied via `?sales_channel_id=`.
|
|
86
|
+
* If exactly one sales channel id is not available, availability is skipped.
|
|
87
|
+
*/
|
|
88
|
+
const wrapVariantsWithInventoryQuantity = async (req, variants, salesChannelId) => {
|
|
89
|
+
if (!salesChannelId) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
variants ??= [];
|
|
93
|
+
const variantIds = variants.map((variant) => variant.id).flat(1);
|
|
94
|
+
if (!variantIds.length) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
98
|
+
const availability = await (0, utils_1.getVariantAvailability)(query, {
|
|
99
|
+
variant_ids: variantIds,
|
|
100
|
+
sales_channel_id: salesChannelId,
|
|
101
|
+
});
|
|
102
|
+
for (const variant of variants) {
|
|
103
|
+
if (!variant.manage_inventory) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
variant.inventory_quantity = availability[variant.id]?.availability;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.wrapVariantsWithInventoryQuantity = wrapVariantsWithInventoryQuantity;
|
|
110
|
+
/**
|
|
111
|
+
* Resolve the single sales-channel id usable for inventory availability from
|
|
112
|
+
* the validated query (`?sales_channel_id=`). Returns undefined unless exactly
|
|
113
|
+
* one is present.
|
|
114
|
+
*/
|
|
115
|
+
const getSingleSalesChannelId = (req) => {
|
|
116
|
+
const raw = req.validatedQuery?.sales_channel_id;
|
|
117
|
+
if (!raw) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const ids = Array.isArray(raw) ? raw : [raw];
|
|
121
|
+
return ids.length === 1 ? ids[0] : undefined;
|
|
122
|
+
};
|
|
123
|
+
exports.getSingleSalesChannelId = getSingleSalesChannelId;
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vbmV0bWUtcG9zL3Byb2R1Y3RzL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBS2tDO0FBZWxDOztHQUVHO0FBQ0ksTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLFFBQWUsRUFBRSxFQUFFO0lBQ3BFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsT0FBTTtRQUNSLENBQUM7UUFDRCxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUM1QyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN6QyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFUWSxRQUFBLGtDQUFrQyxzQ0FTOUM7QUFFRDs7Ozs7R0FLRztBQUNJLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxFQUM1QyxHQUF1QixFQUN2QixRQUFlLEVBQ2YsRUFBRTtJQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHFCQUFxQixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUM5RSxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUM1QyxRQUFR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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,52 @@
|
|
|
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
|
+
}
|
|
26
|
+
if ((0, utils_1.isPresent)(req.pricingContext)) {
|
|
27
|
+
context["variants"] ??= {};
|
|
28
|
+
context["variants"]["calculated_price"] ??= (0, utils_1.QueryContext)(req.pricingContext);
|
|
29
|
+
}
|
|
30
|
+
const { data: products = [], metadata } = await query.graph({
|
|
31
|
+
entity: "product",
|
|
32
|
+
fields: req.queryConfig.fields,
|
|
33
|
+
filters: req.filterableFields,
|
|
34
|
+
pagination: req.queryConfig.pagination,
|
|
35
|
+
context,
|
|
36
|
+
}, {
|
|
37
|
+
cache: { enable: true },
|
|
38
|
+
locale: req.locale,
|
|
39
|
+
});
|
|
40
|
+
if (withInventoryQuantity) {
|
|
41
|
+
await (0, helpers_1.wrapVariantsWithInventoryQuantity)(req, products.map((product) => product.variants).flat(1), (0, helpers_1.getSingleSalesChannelId)(req));
|
|
42
|
+
}
|
|
43
|
+
await (0, helpers_1.wrapProductsWithTaxPrices)(req, products);
|
|
44
|
+
res.json({
|
|
45
|
+
products,
|
|
46
|
+
count: metadata.count,
|
|
47
|
+
offset: metadata.skip,
|
|
48
|
+
limit: metadata.take,
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
exports.GET = GET;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ldG1lLXBvcy9wcm9kdWN0cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFJa0M7QUFDbEMsdUNBS2tCO0FBRWxCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUF1QixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUN4RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO0lBRXZDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM5QyxDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUMxRCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBQSxpQkFBUyxFQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBQSxvQkFBWSxFQUN0RCxHQUFHLENBQUMsY0FBZSxDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQ3pEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtRQUM3QixVQUFVLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVO1FBQ3RDLE9BQU87S0FDUixFQUNEO1FBQ0UsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtRQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07S0FDbkIsQ0FDRixDQUFBO0lBRUQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBQSwyQ0FBaUMsRUFDckMsR0FBRyxFQUNILFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ25ELElBQUEsaUNBQXVCLEVBQUMsR0FBRyxDQUFDLENBQzdCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFBLG1DQUF5QixFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUU5QyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsUUFBUTtRQUNSLEtBQUssRUFBRSxRQUFTLENBQUMsS0FBSztRQUN0QixNQUFNLEVBQUUsUUFBUyxDQUFDLElBQUk7UUFDdEIsS0FBSyxFQUFFLFFBQVMsQ0FBQyxJQUFJO0tBQ3RCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQW5EWSxRQUFBLEdBQUcsT0FtRGYifQ==
|
|
@@ -0,0 +1,185 @@
|
|
|
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
|
+
})
|
|
161
|
+
.merge(GetProductsParams)
|
|
162
|
+
.strict();
|
|
163
|
+
exports.AdminGetProductsParams = createFindParams({
|
|
164
|
+
offset: 0,
|
|
165
|
+
limit: 50,
|
|
166
|
+
})
|
|
167
|
+
.merge(AdminGetProductsParamsFields)
|
|
168
|
+
.merge(zod_1.z
|
|
169
|
+
.object({
|
|
170
|
+
variants: zod_1.z
|
|
171
|
+
.object({
|
|
172
|
+
options: zod_1.z
|
|
173
|
+
.object({
|
|
174
|
+
value: zod_1.z.string().optional(),
|
|
175
|
+
option_id: zod_1.z.string().optional(),
|
|
176
|
+
})
|
|
177
|
+
.optional(),
|
|
178
|
+
})
|
|
179
|
+
.merge(applyAndAndOrOperators(StoreGetProductVariantsParamsFields))
|
|
180
|
+
.optional(),
|
|
181
|
+
})
|
|
182
|
+
.merge(applyAndAndOrOperators(StoreGetProductParamsDirectFields))
|
|
183
|
+
.strict())
|
|
184
|
+
.transform(recursivelyNormalizeSchema(transformProductParams));
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vbmV0bWUtcG9zL3Byb2R1Y3RzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTJDO0FBQzNDLHFEQUFvRTtBQUVwRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCw4RUFBOEU7QUFDOUUsbURBQW1EO0FBQ25ELDhFQUE4RTtBQUU5RSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUM5QixPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1AsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQyxDQUFBO0FBRUosTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQ3hCLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxNQUtILEVBQUUsRUFBRSxFQUFFO0lBQ1IsT0FBTyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssQ0FDL0IsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sRUFBRSxPQUFDLENBQUMsVUFBVSxDQUNsQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRCxPQUFDO2FBQ0UsTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FDeEI7UUFDRCxLQUFLLEVBQUUsT0FBQyxDQUFDLFVBQVUsQ0FDakIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
]);
|
|
59
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
60
|
+
routes: [
|
|
61
|
+
{
|
|
62
|
+
method: ["GET"],
|
|
63
|
+
matcher: "/admin/netme-pos/products",
|
|
64
|
+
middlewares: [
|
|
65
|
+
(0, framework_1.validateAndTransformQuery)(validators_1.AdminGetProductsParams, ProductsQueryConfig.listProductQueryConfig),
|
|
66
|
+
context_middlewares_1.applyMaybeLinkFilterIfNecessary,
|
|
67
|
+
(0, context_middlewares_1.applyDefaultProductStatus)(),
|
|
68
|
+
(0, context_middlewares_1.normalizeDataForContext)(),
|
|
69
|
+
(0, context_middlewares_1.setPricingContextFromCustomer)(),
|
|
70
|
+
(0, context_middlewares_1.setTaxContext)(),
|
|
71
|
+
clearContextKeys,
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
method: ["GET"],
|
|
76
|
+
matcher: "/admin/netme-pos/products/:id",
|
|
77
|
+
middlewares: [
|
|
78
|
+
(0, framework_1.validateAndTransformQuery)(validators_1.AdminGetProductsParams, ProductsQueryConfig.retrieveProductQueryConfig),
|
|
79
|
+
(0, http_1.applyParamsAsFilters)({ id: "id" }),
|
|
80
|
+
context_middlewares_1.applyMaybeLinkFilterIfNecessary,
|
|
81
|
+
(0, context_middlewares_1.applyDefaultProductStatus)(),
|
|
82
|
+
(0, context_middlewares_1.normalizeDataForContext)(),
|
|
83
|
+
(0, context_middlewares_1.setPricingContextFromCustomer)(),
|
|
84
|
+
(0, context_middlewares_1.setTaxContext)(),
|
|
85
|
+
clearContextKeys,
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQStEO0FBQy9ELG1EQUlpQztBQUNqQyx3RkFNdUQ7QUFDdkQsNkZBQThFO0FBQzlFLHNFQUE4RTtBQUU5RTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHdCQUFpQixFQUFDO0lBQ3pDLFdBQVc7SUFDWCxjQUFjO0lBQ2QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0NBQ1gsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsSUFBQSx3QkFBaUIsRUFBQztJQUMvQixNQUFNLEVBQUU7UUFDTjtZQUNFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsV0FBVyxFQUFFO2dCQUNYLElBQUEscUNBQXlCLEVBQ3ZCLG1DQUFzQixFQUN0QixtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FDM0M7Z0JBQ0QscURBQStCO2dCQUMvQixJQUFBLCtDQUF5QixHQUFFO2dCQUMzQixJQUFBLDZDQUF1QixHQUFFO2dCQUN6QixJQUFBLG1EQUE2QixHQUFFO2dCQUMvQixJQUFBLG1DQUFhLEdBQUU7Z0JBQ2YsZ0JBQWdCO2FBQ2pCO1NBQ0Y7UUFDRDtZQUNFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsV0FBVyxFQUFFO2dCQUNYLElBQUEscUNBQXlCLEVBQ3ZCLG1DQUFzQixFQUN0QixtQkFBbUIsQ0FBQywwQkFBMEIsQ0FDL0M7Z0JBQ0QsSUFBQSwyQkFBb0IsRUFBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEMscURBQStCO2dCQUMvQixJQUFBLCtDQUF5QixHQUFFO2dCQUMzQixJQUFBLDZDQUF1QixHQUFFO2dCQUN6QixJQUFBLG1EQUE2QixHQUFFO2dCQUMvQixJQUFBLG1DQUFhLEdBQUU7Z0JBQ2YsZ0JBQWdCO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQSJ9
|