medusa-strapi-plugin 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.medusa/server/src/admin/index.js +78 -0
  2. package/.medusa/server/src/admin/index.mjs +77 -0
  3. package/.medusa/server/src/api/admin/strapi/sync/route.js +25 -0
  4. package/.medusa/server/src/links/strapi-categories.js +21 -0
  5. package/.medusa/server/src/links/strapi-collections.js +21 -0
  6. package/.medusa/server/src/links/strapi-product-variants.js +21 -0
  7. package/.medusa/server/src/links/strapi-products.js +21 -0
  8. package/.medusa/server/src/modules/strapi/index.js +15 -0
  9. package/.medusa/server/src/modules/strapi/loader/create-content-models.js +92 -0
  10. package/.medusa/server/src/modules/strapi/service.js +336 -0
  11. package/.medusa/server/src/subscribers/create-category.js +19 -0
  12. package/.medusa/server/src/subscribers/create-collection.js +19 -0
  13. package/.medusa/server/src/subscribers/create-product.js +19 -0
  14. package/.medusa/server/src/subscribers/create-variant.js +19 -0
  15. package/.medusa/server/src/subscribers/delete-category.js +19 -0
  16. package/.medusa/server/src/subscribers/delete-collection.js +19 -0
  17. package/.medusa/server/src/subscribers/delete-product.js +19 -0
  18. package/.medusa/server/src/subscribers/delete-variant.js +19 -0
  19. package/.medusa/server/src/subscribers/sync-categories.js +39 -0
  20. package/.medusa/server/src/subscribers/sync-collections.js +39 -0
  21. package/.medusa/server/src/subscribers/sync-products.js +39 -0
  22. package/.medusa/server/src/subscribers/update-category.js +19 -0
  23. package/.medusa/server/src/subscribers/update-collection.js +19 -0
  24. package/.medusa/server/src/subscribers/update-product.js +19 -0
  25. package/.medusa/server/src/subscribers/update-variant.js +19 -0
  26. package/.medusa/server/src/workflows/delete-categories-strapi.js +12 -0
  27. package/.medusa/server/src/workflows/delete-collections-strapi.js +12 -0
  28. package/.medusa/server/src/workflows/delete-product-variants-strapi.js +12 -0
  29. package/.medusa/server/src/workflows/delete-products-strapi.js +12 -0
  30. package/.medusa/server/src/workflows/steps/delete-categories-strapi.js +19 -0
  31. package/.medusa/server/src/workflows/steps/delete-collections-strapi.js +19 -0
  32. package/.medusa/server/src/workflows/steps/delete-product-variants-strapi.js +19 -0
  33. package/.medusa/server/src/workflows/steps/delete-products-strapi.js +19 -0
  34. package/.medusa/server/src/workflows/steps/upsert-categories-strapi.js +57 -0
  35. package/.medusa/server/src/workflows/steps/upsert-collections-strapi.js +57 -0
  36. package/.medusa/server/src/workflows/steps/upsert-product-variants-strapi.js +59 -0
  37. package/.medusa/server/src/workflows/steps/upsert-products-strapi.js +57 -0
  38. package/.medusa/server/src/workflows/upsert-categories-strapi.js +20 -0
  39. package/.medusa/server/src/workflows/upsert-collections-strapi.js +20 -0
  40. package/.medusa/server/src/workflows/upsert-product-variants-strapi.js +20 -0
  41. package/.medusa/server/src/workflows/upsert-products-strapi.js +26 -0
  42. package/README.md +335 -0
  43. package/package.json +90 -0
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const qs_1 = __importDefault(require("qs"));
8
+ var StrapiEntity;
9
+ (function (StrapiEntity) {
10
+ StrapiEntity["PRODUCT"] = "products";
11
+ StrapiEntity["VARIANT"] = "product-variants";
12
+ StrapiEntity["CATEGORY"] = "categories";
13
+ StrapiEntity["COLLECTION"] = "collections";
14
+ })(StrapiEntity || (StrapiEntity = {}));
15
+ class StrapiModuleService {
16
+ constructor({ logger }, options) {
17
+ this.logger = logger;
18
+ this.options = {
19
+ ...options,
20
+ default_locale: options.default_locale || "en",
21
+ system_id_key: options.system_id_key || "systemId",
22
+ };
23
+ this.systemIdKey = (this.options.system_id_key ?? "systemId").trim();
24
+ }
25
+ static validateOptions(options) {
26
+ if (!options.base_url || !options.api_key) {
27
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Strapi base URL and API key are required");
28
+ }
29
+ }
30
+ /**
31
+ * Makes an API request to Strapi.
32
+ */
33
+ async makeRequest(endpoint, options = {}) {
34
+ const url = `${this.options.base_url}/${endpoint}`;
35
+ try {
36
+ const response = await fetch(url, {
37
+ headers: {
38
+ Authorization: `Bearer ${this.options.api_key}`,
39
+ "Content-Type": "application/json",
40
+ },
41
+ ...options,
42
+ });
43
+ if (!response.ok) {
44
+ let errorDetails = `HTTP ${response.status} ${response.statusText}`;
45
+ try {
46
+ const errorResponse = await response.json();
47
+ if (errorResponse.error) {
48
+ errorDetails += ` - ${JSON.stringify(errorResponse.error)}`;
49
+ this.logger.error(`Strapi API request failed for ${url}:`, errorResponse);
50
+ }
51
+ }
52
+ catch (parseError) {
53
+ this.logger.error("Failed to parse error response from Strapi", parseError);
54
+ }
55
+ throw new Error(errorDetails);
56
+ }
57
+ const responseData = await response.json();
58
+ const { data, error } = responseData;
59
+ if (error) {
60
+ this.logger.error(`Strapi API returned error for ${url}:`, error);
61
+ this.logger.error("Full response:", responseData);
62
+ throw new Error(error.message || JSON.stringify(error));
63
+ }
64
+ return data;
65
+ }
66
+ catch (error) {
67
+ this.logger.error(`API request failed: ${url}`, error);
68
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `API request failed: ${error.message || error}`);
69
+ }
70
+ }
71
+ /**
72
+ * Fetches an entity by its system ID.
73
+ */
74
+ async getEntityBySystemId(entity, systemId, options) {
75
+ this.logger.debug(`Fetching entity ${entity} with systemId: ${systemId}`);
76
+ try {
77
+ const params = qs_1.default.stringify({
78
+ filters: { [this.systemIdKey]: { $eq: systemId } },
79
+ fields: ["documentId"],
80
+ status: "draft",
81
+ ...options,
82
+ });
83
+ const result = await this.makeRequest(`${entity}?${params}`);
84
+ return result?.[0];
85
+ }
86
+ catch (error) {
87
+ this.logger.error(`Failed to fetch ${entity} with systemId: ${systemId}`, error);
88
+ throw error;
89
+ }
90
+ }
91
+ /**
92
+ * Creates a new entry in the specified Strapi entity.
93
+ */
94
+ async createEntry(entity, payload) {
95
+ this.logger.debug(`Creating ${entity} in Strapi`);
96
+ try {
97
+ const params = qs_1.default.stringify({ status: "draft" });
98
+ return await this.makeRequest(`${entity}?${params}`, {
99
+ method: "POST",
100
+ body: JSON.stringify({
101
+ data: {
102
+ ...payload,
103
+ // locale: this.options.default_locale
104
+ },
105
+ }),
106
+ });
107
+ }
108
+ catch (error) {
109
+ this.logger.error(`Failed to create ${entity} in Strapi`, error);
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Updates an existing entry in the specified Strapi entity.
115
+ */
116
+ async updateEntry(entity, documentId, payload) {
117
+ this.logger.debug(`Updating ${entity} with documentId: ${documentId}`);
118
+ try {
119
+ return await this.makeRequest(`${entity}/${documentId}`, {
120
+ method: "PUT",
121
+ body: JSON.stringify({ data: payload }),
122
+ });
123
+ }
124
+ catch (error) {
125
+ this.logger.error(`Failed to update ${entity} in Strapi`, error);
126
+ throw error;
127
+ }
128
+ }
129
+ /**
130
+ * Deletes an entry in the specified Strapi entity.
131
+ */
132
+ /**
133
+ * Deletes an entry in the specified Strapi entity.
134
+ */
135
+ async deleteEntry(entity, documentId) {
136
+ try {
137
+ return await this.makeRequest(`${entity}/${documentId}`, {
138
+ method: "DELETE",
139
+ });
140
+ }
141
+ catch (error) {
142
+ this.logger.error(`Failed to delete ${entity} in Strapi`, error);
143
+ throw error;
144
+ }
145
+ }
146
+ /**
147
+ * Generic method to upsert an entity
148
+ */
149
+ async upsertEntity(entity, systemId, createPayload, updatePayload) {
150
+ const entry = await this.getEntityBySystemId(entity, systemId);
151
+ if (!entry) {
152
+ this.logger.debug(`No ${entity} found with ID: ${systemId}, creating it`);
153
+ return await this.createEntry(entity, createPayload);
154
+ }
155
+ this.logger.debug(`Updating ${entity} with ID: ${systemId}`);
156
+ return await this.updateEntry(entity, entry.documentId, updatePayload);
157
+ }
158
+ /**
159
+ * Lists entities based on the provided filter.
160
+ */
161
+ async list(filter) {
162
+ let entity = StrapiEntity.PRODUCT;
163
+ let systemKey = "productId";
164
+ let systemId = filter.productId;
165
+ if (filter.collectionId) {
166
+ entity = StrapiEntity.COLLECTION;
167
+ systemKey = "collectionId";
168
+ systemId = filter.collectionId;
169
+ }
170
+ if (filter.categoryId) {
171
+ entity = StrapiEntity.CATEGORY;
172
+ systemKey = "categoryId";
173
+ systemId = filter.categoryId;
174
+ }
175
+ if (filter.variantId) {
176
+ entity = StrapiEntity.VARIANT;
177
+ systemKey = "variantId";
178
+ systemId = filter.variantId;
179
+ }
180
+ const systemIdFilter = Array.isArray(systemId) ? systemId : [systemId];
181
+ this.logger.debug(`Fetching entity ${entity} with ID: ${systemIdFilter}`);
182
+ if (!systemIdFilter.length) {
183
+ this.logger.debug(`No system IDs provided for ${entity}, returning empty array`);
184
+ return [];
185
+ }
186
+ const params = qs_1.default.stringify({
187
+ filters: { [this.systemIdKey]: { $in: systemIdFilter } },
188
+ // locale: filter.context?.locale || this.options.default_locale,
189
+ });
190
+ const entries = await this.makeRequest(`${entity}?${params}`);
191
+ return entries.map(({ [this.systemIdKey]: systemId, ...rest }) => ({
192
+ ...rest,
193
+ [systemKey]: systemId,
194
+ }));
195
+ }
196
+ /**
197
+ * Upserts a product in Strapi.
198
+ */
199
+ async upsertProduct(product) {
200
+ const createPayload = {
201
+ [this.systemIdKey]: product.id,
202
+ title: product.title || "",
203
+ handle: product.handle || "",
204
+ productType: product.type?.value || "",
205
+ };
206
+ const updatePayload = {
207
+ handle: product.handle || "",
208
+ productType: product.type?.value || "",
209
+ };
210
+ const entry = await this.upsertEntity(StrapiEntity.PRODUCT, product.id, createPayload, updatePayload);
211
+ // Create variants if they exist
212
+ if (product.variants?.length) {
213
+ await this.upsertProductVariants(product.variants, entry);
214
+ }
215
+ return entry;
216
+ }
217
+ /**
218
+ * Deletes a product in Strapi.
219
+ */
220
+ async deleteProduct(productId) {
221
+ const productEntry = await this.getEntityBySystemId(StrapiEntity.PRODUCT, productId, { populate: "variants", fields: ["*"] });
222
+ if (!productEntry) {
223
+ this.logger.log(`No product found in Strapi ${productId}`);
224
+ return null;
225
+ }
226
+ await this.deleteEntry(StrapiEntity.PRODUCT, productEntry.documentId);
227
+ if (Array.isArray(productEntry.variants)) {
228
+ // Delete variants in parallel
229
+ await Promise.all(productEntry.variants.map((v) => this.deleteEntry(StrapiEntity.VARIANT, v.documentId)));
230
+ }
231
+ return productId;
232
+ }
233
+ /**
234
+ * Upserts product variants for a given product entry.
235
+ */
236
+ async upsertProductVariants(variants, productEntry) {
237
+ // Process variants in parallel
238
+ await Promise.all(variants.map(async (variant) => {
239
+ const createPayload = {
240
+ [this.systemIdKey]: variant.id,
241
+ title: variant.title || "",
242
+ product: productEntry.documentId,
243
+ sku: variant.sku || "",
244
+ };
245
+ const updatePayload = {
246
+ product: productEntry.documentId,
247
+ sku: variant.sku || "",
248
+ };
249
+ await this.upsertEntity(StrapiEntity.VARIANT, variant.id, createPayload, updatePayload);
250
+ }));
251
+ }
252
+ /**
253
+ * Upserts a product variant in Strapi.
254
+ */
255
+ async upsertProductVariant(variant) {
256
+ const entry = await this.getEntityBySystemId(StrapiEntity.VARIANT, variant.id);
257
+ if (!entry) {
258
+ const productEntry = await this.getEntityBySystemId(StrapiEntity.PRODUCT, variant.product_id);
259
+ if (!productEntry) {
260
+ this.logger.log(`No product found in Strapi (ID: ${variant.product_id}) — skipping creation of variant ${variant.id}`);
261
+ return null;
262
+ }
263
+ return await this.createEntry(StrapiEntity.VARIANT, {
264
+ [this.systemIdKey]: variant.id,
265
+ title: variant.title || "",
266
+ product: productEntry.documentId,
267
+ sku: variant.sku || "",
268
+ });
269
+ }
270
+ return await this.updateEntry(StrapiEntity.VARIANT, entry.documentId, {
271
+ sku: variant.sku || "",
272
+ });
273
+ }
274
+ /**
275
+ * Deletes a product variant in Strapi.
276
+ */
277
+ async deleteProductVariant(variantId) {
278
+ const entry = await this.getEntityBySystemId(StrapiEntity.VARIANT, variantId);
279
+ if (!entry) {
280
+ this.logger.log(`No product variant found in Strapi ${variantId}`);
281
+ return null;
282
+ }
283
+ await this.deleteEntry(StrapiEntity.VARIANT, entry.documentId);
284
+ return variantId;
285
+ }
286
+ /**
287
+ * Upserts a collection in Strapi.
288
+ */
289
+ async upsertCollection(collection) {
290
+ return await this.upsertEntity(StrapiEntity.COLLECTION, collection.id, {
291
+ [this.systemIdKey]: collection.id,
292
+ title: collection.title || "",
293
+ handle: collection.handle || "",
294
+ }, {
295
+ handle: collection.handle || "",
296
+ });
297
+ }
298
+ /**
299
+ * Deletes a collection in Strapi.
300
+ */
301
+ async deleteCollection(collectionId) {
302
+ const entry = await this.getEntityBySystemId(StrapiEntity.COLLECTION, collectionId);
303
+ if (!entry) {
304
+ this.logger.log(`No collection found in Strapi ${collectionId}`);
305
+ return null;
306
+ }
307
+ await this.deleteEntry(StrapiEntity.COLLECTION, entry.documentId);
308
+ return collectionId;
309
+ }
310
+ /**
311
+ * Upserts a product category in Strapi.
312
+ */
313
+ async upsertCategory(category) {
314
+ return await this.upsertEntity(StrapiEntity.CATEGORY, category.id, {
315
+ [this.systemIdKey]: category.id,
316
+ title: category.name || "",
317
+ handle: category.handle || "",
318
+ }, {
319
+ handle: category.handle || "",
320
+ });
321
+ }
322
+ /**
323
+ * Deletes a product category in Strapi.
324
+ */
325
+ async deleteCategory(categoryId) {
326
+ const entry = await this.getEntityBySystemId(StrapiEntity.CATEGORY, categoryId);
327
+ if (!entry) {
328
+ this.logger.log(`No category found in Strapi ${categoryId}`);
329
+ return null;
330
+ }
331
+ await this.deleteEntry(StrapiEntity.CATEGORY, entry.documentId);
332
+ return categoryId;
333
+ }
334
+ }
335
+ exports.default = StrapiModuleService;
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3N0cmFwaS9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBT0EscURBQXdEO0FBQ3hELDRDQUFvQjtBQVlwQixJQUFLLFlBS0o7QUFMRCxXQUFLLFlBQVk7SUFDZixvQ0FBb0IsQ0FBQTtJQUNwQiw0Q0FBNEIsQ0FBQTtJQUM1Qix1Q0FBdUIsQ0FBQTtJQUN2QiwwQ0FBMEIsQ0FBQTtBQUM1QixDQUFDLEVBTEksWUFBWSxLQUFaLFlBQVksUUFLaEI7QUFFRCxNQUFxQixtQkFBbUI7SUFLdEMsWUFBWSxFQUFFLE1BQU0sRUFBd0IsRUFBRSxPQUFzQjtRQUNsRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsR0FBRyxPQUFPO1lBQ1YsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksSUFBSTtZQUM5QyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxVQUFVO1NBQ25ELENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBc0I7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMENBQTBDLENBQzNDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVcsQ0FDdkIsUUFBZ0IsRUFDaEIsVUFBd0MsRUFBRTtRQUUxQyxNQUFNLEdBQUcsR0FB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
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleCategoryCreate;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_categories_strapi_1 = require("../workflows/upsert-categories-strapi");
7
+ async function handleCategoryCreate({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, upsert_categories_strapi_1.upsertCategoriesStrapiWorkflow)(container).run({
10
+ input: {
11
+ category_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Category created in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-category.created",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNhdGVnb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2NyZWF0ZS1jYXRlZ29yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSx1Q0FhQztBQWhCRCxxREFBc0U7QUFDdEUsb0ZBQXVGO0FBRXhFLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQ3NCO0lBQy9CLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsTUFBTSxJQUFBLHlEQUE4QixFQUFDLFNBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDekQsS0FBSyxFQUFFO1lBQ0wsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUN4QjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSwwQkFBMEI7Q0FDbEMsQ0FBQyJ9
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleCollectionCreate;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_collections_strapi_1 = require("../workflows/upsert-collections-strapi");
7
+ async function handleCollectionCreate({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, upsert_collections_strapi_1.upsertCollectionsStrapiWorkflow)(container).run({
10
+ input: {
11
+ collection_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Collection created in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-collection.created",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvY3JlYXRlLWNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EseUNBYUM7QUFoQkQscURBQXNFO0FBQ3RFLHNGQUF5RjtBQUUxRSxLQUFLLFVBQVUsc0JBQXNCLENBQUMsRUFDbkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSwyREFBK0IsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzFELEtBQUssRUFBRTtZQUNMLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDMUI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsNEJBQTRCO0NBQ3BDLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleProductCreate;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_products_strapi_1 = require("../workflows/upsert-products-strapi");
7
+ async function handleProductCreate({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, upsert_products_strapi_1.upsertProductsStrapiWorkflow)(container).run({
10
+ input: {
11
+ product_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Product created in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product.created",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvY3JlYXRlLXByb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0Esc0NBYUM7QUFoQkQscURBQXNFO0FBQ3RFLGdGQUFtRjtBQUVwRSxLQUFLLFVBQVUsbUJBQW1CLENBQUMsRUFDaEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSxxREFBNEIsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3ZELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleProductVariantCreate;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_product_variants_strapi_1 = require("../workflows/upsert-product-variants-strapi");
7
+ async function handleProductVariantCreate({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, upsert_product_variants_strapi_1.upsertProductVariantsStrapiWorkflow)(container).run({
10
+ input: {
11
+ variant_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Product Variant created in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-variant.created",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXZhcmlhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvY3JlYXRlLXZhcmlhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsNkNBYUM7QUFoQkQscURBQXNFO0FBQ3RFLGdHQUFrRztBQUVuRixLQUFLLFVBQVUsMEJBQTBCLENBQUMsRUFDdkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSxvRUFBbUMsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzlELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUseUJBQXlCO0NBQ2pDLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleCategoryDelete;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const delete_categories_strapi_1 = require("../workflows/delete-categories-strapi");
7
+ async function handleCategoryDelete({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, delete_categories_strapi_1.deleteCategoriesStrapiWorkflow)(container).run({
10
+ input: {
11
+ category_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Category deleted in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-category.deleted",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWNhdGVnb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2RlbGV0ZS1jYXRlZ29yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSx1Q0FhQztBQWhCRCxxREFBc0U7QUFDdEUsb0ZBQXVGO0FBRXhFLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQ3NCO0lBQy9CLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsTUFBTSxJQUFBLHlEQUE4QixFQUFDLFNBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDekQsS0FBSyxFQUFFO1lBQ0wsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUN4QjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSwwQkFBMEI7Q0FDbEMsQ0FBQyJ9
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleCollectionDelete;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const delete_collections_strapi_1 = require("../workflows/delete-collections-strapi");
7
+ async function handleCollectionDelete({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, delete_collections_strapi_1.deleteCollectionsStrapiWorkflow)(container).run({
10
+ input: {
11
+ collection_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Collection deleted in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-collection.deleted",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvZGVsZXRlLWNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EseUNBYUM7QUFoQkQscURBQXNFO0FBQ3RFLHNGQUF5RjtBQUUxRSxLQUFLLFVBQVUsc0JBQXNCLENBQUMsRUFDbkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSwyREFBK0IsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzFELEtBQUssRUFBRTtZQUNMLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDMUI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsNEJBQTRCO0NBQ3BDLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleProductDelete;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const delete_products_strapi_1 = require("../workflows/delete-products-strapi");
7
+ async function handleProductDelete({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, delete_products_strapi_1.deleteProductsStrapiWorkflow)(container).run({
10
+ input: {
11
+ product_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Product deleted in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product.deleted",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvZGVsZXRlLXByb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0Esc0NBYUM7QUFoQkQscURBQXNFO0FBQ3RFLGdGQUFtRjtBQUVwRSxLQUFLLFVBQVUsbUJBQW1CLENBQUMsRUFDaEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSxxREFBNEIsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3ZELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = handleProductVariantDelete;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const delete_product_variants_strapi_1 = require("../workflows/delete-product-variants-strapi");
7
+ async function handleProductVariantDelete({ event: { data }, container, }) {
8
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ await (0, delete_product_variants_strapi_1.deleteProductVariantsStrapiWorkflow)(container).run({
10
+ input: {
11
+ variant_ids: [data.id],
12
+ },
13
+ });
14
+ logger.log("Product variant deleted in Strapi");
15
+ }
16
+ exports.config = {
17
+ event: "product-variant.deleted",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXZhcmlhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvZGVsZXRlLXZhcmlhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsNkNBYUM7QUFoQkQscURBQXNFO0FBQ3RFLGdHQUFrRztBQUVuRixLQUFLLFVBQVUsMEJBQTBCLENBQUMsRUFDdkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBQSxvRUFBbUMsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzlELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUseUJBQXlCO0NBQ2pDLENBQUMifQ==
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = syncCategoriesHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_categories_strapi_1 = require("../workflows/upsert-categories-strapi");
7
+ async function syncCategoriesHandler({ container, }) {
8
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
10
+ const batchSize = 100;
11
+ let hasMore = true;
12
+ let offset = 0;
13
+ let totalCount = 0;
14
+ while (hasMore) {
15
+ const { data: categories, metadata: { count } = {} } = await query.graph({
16
+ entity: "product_category",
17
+ fields: ["id"],
18
+ pagination: {
19
+ skip: offset,
20
+ take: batchSize,
21
+ },
22
+ });
23
+ if (categories.length) {
24
+ await (0, upsert_categories_strapi_1.upsertCategoriesStrapiWorkflow)(container).run({
25
+ input: {
26
+ category_ids: categories.map((category) => category.id),
27
+ },
28
+ });
29
+ }
30
+ hasMore = categories.length === batchSize;
31
+ offset += batchSize;
32
+ totalCount = count ?? 0;
33
+ }
34
+ logger.log(`Synced ${totalCount} categories to Strapi`);
35
+ }
36
+ exports.config = {
37
+ event: "strapi-categories.sync",
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jYXRlZ29yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL3N5bmMtY2F0ZWdvcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0FtQ0M7QUF0Q0QscURBQXNFO0FBQ3RFLG9GQUF1RjtBQUV4RSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsU0FBUyxHQUMrQjtJQUN4QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFbkIsT0FBTyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN2RSxNQUFNLEVBQUUsa0JBQWtCO1lBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztZQUNkLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsU0FBUzthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBQSx5REFBOEIsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUN6RCxLQUFLLEVBQUU7b0JBQ0wsWUFBWSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7aUJBQ3hEO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUMxQyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ3BCLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsVUFBVSx1QkFBdUIsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLHdCQUF3QjtDQUNoQyxDQUFDIn0=
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = syncCollectionsHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_collections_strapi_1 = require("../workflows/upsert-collections-strapi");
7
+ async function syncCollectionsHandler({ container, }) {
8
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
10
+ const batchSize = 100;
11
+ let hasMore = true;
12
+ let offset = 0;
13
+ let totalCount = 0;
14
+ while (hasMore) {
15
+ const { data: collections, metadata: { count } = {} } = await query.graph({
16
+ entity: "product_collection",
17
+ fields: ["id"],
18
+ pagination: {
19
+ skip: offset,
20
+ take: batchSize,
21
+ },
22
+ });
23
+ if (collections.length) {
24
+ await (0, upsert_collections_strapi_1.upsertCollectionsStrapiWorkflow)(container).run({
25
+ input: {
26
+ collection_ids: collections.map((collection) => collection.id),
27
+ },
28
+ });
29
+ }
30
+ hasMore = collections.length === batchSize;
31
+ offset += batchSize;
32
+ totalCount = count ?? 0;
33
+ }
34
+ logger.log(`Synced ${totalCount} collections to Strapi`);
35
+ }
36
+ exports.config = {
37
+ event: "strapi-collections.sync",
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jb2xsZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zeW5jLWNvbGxlY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHlDQW1DQztBQXRDRCxxREFBc0U7QUFDdEUsc0ZBQXlGO0FBRTFFLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxFQUNuRCxTQUFTLEdBQytCO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUVuQixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3hFLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFBLDJEQUErQixFQUFDLFNBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQzFELEtBQUssRUFBRTtvQkFDTCxjQUFjLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztpQkFDL0Q7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxTQUFTLENBQUM7UUFDcEIsVUFBVSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxVQUFVLHdCQUF3QixDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUseUJBQXlCO0NBQ2pDLENBQUMifQ==
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = syncProductsHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const upsert_products_strapi_1 = require("../workflows/upsert-products-strapi");
7
+ async function syncProductsHandler({ container, }) {
8
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
10
+ const batchSize = 100;
11
+ let hasMore = true;
12
+ let offset = 0;
13
+ let totalCount = 0;
14
+ while (hasMore) {
15
+ const { data: products, metadata: { count } = {} } = await query.graph({
16
+ entity: "product",
17
+ fields: ["id"],
18
+ pagination: {
19
+ skip: offset,
20
+ take: batchSize,
21
+ },
22
+ });
23
+ if (products.length) {
24
+ await (0, upsert_products_strapi_1.upsertProductsStrapiWorkflow)(container).run({
25
+ input: {
26
+ product_ids: products.map((product) => product.id),
27
+ },
28
+ });
29
+ }
30
+ hasMore = products.length === batchSize;
31
+ offset += batchSize;
32
+ totalCount = count ?? 0;
33
+ }
34
+ logger.log(`Synced ${totalCount} products to Strapi`);
35
+ }
36
+ exports.config = {
37
+ event: "strapi-products.sync",
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zeW5jLXByb2R1Y3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHNDQW1DQztBQXRDRCxxREFBc0U7QUFDdEUsZ0ZBQW1GO0FBRXBFLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxFQUNoRCxTQUFTLEdBQytCO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUVuQixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JFLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztZQUNkLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsU0FBUzthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBQSxxREFBNEIsRUFBQyxTQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUN2RCxLQUFLLEVBQUU7b0JBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7aUJBQ25EO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUN4QyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ3BCLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLHNCQUFzQjtDQUM5QixDQUFDIn0=