@hszrdm/core 1.1.0 → 1.3.0

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 (146) hide show
  1. package/.medusa/server/src/admin/index.js +4041 -2995
  2. package/.medusa/server/src/admin/index.mjs +4043 -2997
  3. package/.medusa/server/src/api/admin/ai-translations/apply/route.d.ts +11 -0
  4. package/.medusa/server/src/api/admin/ai-translations/apply/route.js +102 -0
  5. package/.medusa/server/src/api/admin/ai-translations/preview/route.d.ts +10 -0
  6. package/.medusa/server/src/api/admin/ai-translations/preview/route.js +141 -0
  7. package/.medusa/server/src/api/admin/ai-translations/route.d.ts +2 -0
  8. package/.medusa/server/src/api/admin/ai-translations/route.js +19 -0
  9. package/.medusa/server/src/api/admin/email/preview/route.d.ts +2 -0
  10. package/.medusa/server/src/api/admin/email/preview/route.js +20 -0
  11. package/.medusa/server/src/api/admin/email/templates/[id]/route.d.ts +4 -0
  12. package/.medusa/server/src/api/admin/email/templates/[id]/route.js +25 -0
  13. package/.medusa/server/src/api/admin/email/templates/route.d.ts +3 -0
  14. package/.medusa/server/src/api/admin/email/templates/route.js +40 -0
  15. package/.medusa/server/src/api/admin/email/test-send/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/email/test-send/route.js +64 -0
  17. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.js +15 -0
  19. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.d.ts +4 -0
  20. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.js +39 -0
  21. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.d.ts +2 -0
  22. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.js +14 -0
  23. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.d.ts +2 -0
  24. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.js +17 -0
  25. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.d.ts +2 -0
  26. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.js +23 -0
  27. package/.medusa/server/src/api/admin/newsletter/campaigns/route.d.ts +3 -0
  28. package/.medusa/server/src/api/admin/newsletter/campaigns/route.js +40 -0
  29. package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.d.ts +2 -0
  30. package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.js +74 -0
  31. package/.medusa/server/src/api/admin/newsletter/subscribers/route.d.ts +2 -0
  32. package/.medusa/server/src/api/admin/newsletter/subscribers/route.js +57 -0
  33. package/.medusa/server/src/api/admin/product-reviews/[id]/route.d.ts +7 -0
  34. package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +40 -0
  35. package/.medusa/server/src/api/admin/product-reviews/route.d.ts +2 -0
  36. package/.medusa/server/src/api/admin/product-reviews/route.js +31 -0
  37. package/.medusa/server/src/api/hooks/email/status/route.d.ts +2 -0
  38. package/.medusa/server/src/api/hooks/email/status/route.js +69 -0
  39. package/.medusa/server/src/api/middlewares.js +9 -1
  40. package/.medusa/server/src/api/store/account/wishlist/[productId]/route.d.ts +2 -0
  41. package/.medusa/server/src/api/store/account/wishlist/[productId]/route.js +18 -0
  42. package/.medusa/server/src/api/store/account/wishlist/merge/route.d.ts +6 -0
  43. package/.medusa/server/src/api/store/account/wishlist/merge/route.js +51 -0
  44. package/.medusa/server/src/api/store/account/wishlist/route.d.ts +7 -0
  45. package/.medusa/server/src/api/store/account/wishlist/route.js +76 -0
  46. package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +4 -4
  47. package/.medusa/server/src/api/store/cms/entries/route.js +4 -4
  48. package/.medusa/server/src/api/store/email/track/click/[token]/route.d.ts +2 -0
  49. package/.medusa/server/src/api/store/email/track/click/[token]/route.js +19 -0
  50. package/.medusa/server/src/api/store/email/track/open/[token]/route.d.ts +2 -0
  51. package/.medusa/server/src/api/store/email/track/open/[token]/route.js +22 -0
  52. package/.medusa/server/src/api/store/leads/route.js +27 -93
  53. package/.medusa/server/src/api/store/newsletter/config/route.d.ts +2 -0
  54. package/.medusa/server/src/api/store/newsletter/config/route.js +14 -0
  55. package/.medusa/server/src/api/store/newsletter/confirm/route.d.ts +4 -0
  56. package/.medusa/server/src/api/store/newsletter/confirm/route.js +52 -0
  57. package/.medusa/server/src/api/store/newsletter/route.d.ts +4 -0
  58. package/.medusa/server/src/api/store/newsletter/route.js +89 -0
  59. package/.medusa/server/src/api/store/newsletter/unsubscribe/route.d.ts +4 -0
  60. package/.medusa/server/src/api/store/newsletter/unsubscribe/route.js +54 -0
  61. package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +8 -0
  62. package/.medusa/server/src/api/store/products/[id]/reviews/route.js +174 -0
  63. package/.medusa/server/src/api/store/quote-requests/route.js +41 -129
  64. package/.medusa/server/src/config.js +38 -15
  65. package/.medusa/server/src/core/ai-translation.d.ts +26 -0
  66. package/.medusa/server/src/core/ai-translation.js +173 -0
  67. package/.medusa/server/src/core/customer-email.d.ts +5 -5
  68. package/.medusa/server/src/core/customer-email.js +55 -109
  69. package/.medusa/server/src/core/transactional-email.d.ts +9 -8
  70. package/.medusa/server/src/core/transactional-email.js +74 -244
  71. package/.medusa/server/src/core/version.d.ts +2 -2
  72. package/.medusa/server/src/core/version.js +2 -2
  73. package/.medusa/server/src/jobs/email-campaign-dispatch.d.ts +6 -0
  74. package/.medusa/server/src/jobs/email-campaign-dispatch.js +18 -0
  75. package/.medusa/server/src/modules/cms/config.d.ts +2 -1
  76. package/.medusa/server/src/modules/cms/config.js +27 -12
  77. package/.medusa/server/src/modules/cms/content-types.d.ts +24 -0
  78. package/.medusa/server/src/modules/cms/content-types.js +27 -0
  79. package/.medusa/server/src/modules/cms/index.d.ts +1 -0
  80. package/.medusa/server/src/modules/cms/index.js +6 -2
  81. package/.medusa/server/src/modules/email-center/campaign.d.ts +8 -0
  82. package/.medusa/server/src/modules/email-center/campaign.js +193 -0
  83. package/.medusa/server/src/modules/email-center/constants.d.ts +1 -0
  84. package/.medusa/server/src/modules/email-center/constants.js +5 -0
  85. package/.medusa/server/src/modules/email-center/defaults.d.ts +10 -0
  86. package/.medusa/server/src/modules/email-center/defaults.js +49 -0
  87. package/.medusa/server/src/modules/email-center/index.d.ts +11 -0
  88. package/.medusa/server/src/modules/email-center/index.js +42 -0
  89. package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.d.ts +5 -0
  90. package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.js +25 -0
  91. package/.medusa/server/src/modules/email-center/models/email-campaign.d.ts +22 -0
  92. package/.medusa/server/src/modules/email-center/models/email-campaign.js +37 -0
  93. package/.medusa/server/src/modules/email-center/models/email-delivery.d.ts +21 -0
  94. package/.medusa/server/src/modules/email-center/models/email-delivery.js +38 -0
  95. package/.medusa/server/src/modules/email-center/models/email-template.d.ts +13 -0
  96. package/.medusa/server/src/modules/email-center/models/email-template.js +20 -0
  97. package/.medusa/server/src/modules/email-center/render.d.ts +31 -0
  98. package/.medusa/server/src/modules/email-center/render.js +92 -0
  99. package/.medusa/server/src/modules/email-center/send.d.ts +27 -0
  100. package/.medusa/server/src/modules/email-center/send.js +67 -0
  101. package/.medusa/server/src/modules/email-center/service.d.ts +56 -0
  102. package/.medusa/server/src/modules/email-center/service.js +13 -0
  103. package/.medusa/server/src/modules/email-center/tracking.d.ts +9 -0
  104. package/.medusa/server/src/modules/email-center/tracking.js +92 -0
  105. package/.medusa/server/src/modules/newsletter/config.d.ts +14 -0
  106. package/.medusa/server/src/modules/newsletter/config.js +51 -0
  107. package/.medusa/server/src/modules/newsletter/email.d.ts +9 -0
  108. package/.medusa/server/src/modules/newsletter/email.js +38 -0
  109. package/.medusa/server/src/modules/newsletter/events.d.ts +10 -0
  110. package/.medusa/server/src/modules/newsletter/events.js +34 -0
  111. package/.medusa/server/src/modules/newsletter/index.d.ts +10 -0
  112. package/.medusa/server/src/modules/newsletter/index.js +33 -0
  113. package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.d.ts +5 -0
  114. package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.js +18 -0
  115. package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.d.ts +21 -0
  116. package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.js +35 -0
  117. package/.medusa/server/src/modules/newsletter/service.d.ts +24 -0
  118. package/.medusa/server/src/modules/newsletter/service.js +11 -0
  119. package/.medusa/server/src/modules/newsletter/token.d.ts +10 -0
  120. package/.medusa/server/src/modules/newsletter/token.js +97 -0
  121. package/.medusa/server/src/modules/product-review/config.d.ts +5 -0
  122. package/.medusa/server/src/modules/product-review/config.js +10 -0
  123. package/.medusa/server/src/modules/product-review/index.d.ts +7 -0
  124. package/.medusa/server/src/modules/product-review/index.js +18 -0
  125. package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.d.ts +5 -0
  126. package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.js +18 -0
  127. package/.medusa/server/src/modules/product-review/models/product-review.d.ts +16 -0
  128. package/.medusa/server/src/modules/product-review/models/product-review.js +26 -0
  129. package/.medusa/server/src/modules/product-review/service.d.ts +25 -0
  130. package/.medusa/server/src/modules/product-review/service.js +12 -0
  131. package/.medusa/server/src/modules/wishlist/index.d.ts +5 -0
  132. package/.medusa/server/src/modules/wishlist/index.js +14 -0
  133. package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.d.ts +5 -0
  134. package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.js +17 -0
  135. package/.medusa/server/src/modules/wishlist/models/wishlist-item.d.ts +6 -0
  136. package/.medusa/server/src/modules/wishlist/models/wishlist-item.js +14 -0
  137. package/.medusa/server/src/modules/wishlist/service.d.ts +15 -0
  138. package/.medusa/server/src/modules/wishlist/service.js +12 -0
  139. package/.medusa/server/src/providers/email/index.d.ts +2 -0
  140. package/.medusa/server/src/providers/email/index.js +11 -0
  141. package/.medusa/server/src/providers/email/service.d.ts +24 -0
  142. package/.medusa/server/src/providers/email/service.js +117 -0
  143. package/.medusa/server/src/scripts/core-init.js +20 -3
  144. package/.medusa/server/src/scripts/verify-bootstrap.js +1 -7
  145. package/.medusa/server/src/subscribers/transactional-email-shipment-created.js +6 -2
  146. package/package.json +4 -3
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const email_center_1 = require("../../../../../../modules/email-center");
5
+ async function GET(req, res) {
6
+ await (0, email_center_1.refreshCampaignStats)(req.scope, req.params.id);
7
+ const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
8
+ const campaign = await service.retrieveEmailCampaign(req.params.id);
9
+ const statuses = ["queued", "sent", "delivered", "opened", "clicked", "failed", "bounced"];
10
+ const deliveries = {};
11
+ for (const status of statuses) {
12
+ const [, count] = await service.listAndCountEmailDeliveries({ campaign_id: req.params.id, status }, { take: 1 });
13
+ deliveries[status] = count;
14
+ }
15
+ return res.json({ campaign, deliveries });
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vc3RhdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFXQztBQWJELHlFQUEySDtBQUVwSCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxJQUFBLG1DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFjLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDMUYsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQTtJQUM3QyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBVyxDQUF3QyxDQUFBO1FBQ3pLLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDNUIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0FBQzNDLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function POST(req: MedusaRequest<Record<string, any>>, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const email_center_1 = require("../../../../../../modules/email-center");
5
+ async function POST(req, res) {
6
+ const to = String(req.body?.to || "").trim().toLowerCase();
7
+ if (!/^\S+@\S+\.\S+$/.test(to))
8
+ return res.status(400).json({ message: "Érvényes teszt e-mail-cím szükséges." });
9
+ const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
10
+ const campaign = await service.retrieveEmailCampaign(req.params.id);
11
+ const unsubscribeUrl = "https://example.com/unsubscribe-test";
12
+ const data = (0, email_center_1.emailVariables)({ email: to, unsubscribe_url: unsubscribeUrl });
13
+ let content = {
14
+ subject: (0, email_center_1.renderTemplateString)(campaign.subject, data, false),
15
+ html: (0, email_center_1.renderTemplateString)(campaign.html, data, true),
16
+ text: (0, email_center_1.renderTemplateString)(campaign.text, data, false),
17
+ };
18
+ content = (0, email_center_1.ensureMarketingUnsubscribe)(content, unsubscribeUrl, campaign.locale);
19
+ content.html = (0, email_center_1.renderEmailHtmlDocument)(content.html, data);
20
+ const result = await (0, email_center_1.sendManagedEmail)({ container: req.scope, to, content, locale: campaign.locale, idempotencyKey: `campaign-test:${campaign.id}:${Date.now()}:${to}`, track: false });
21
+ return res.status(201).json({ delivery: result.delivery });
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vdGVzdC1zZW5kL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esb0JBZ0JDO0FBbEJELHlFQUFrTjtBQUUzTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXVDLEVBQUUsR0FBbUI7SUFDckYsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDLENBQUE7SUFDaEgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQW1DLENBQUE7SUFDckcsTUFBTSxjQUFjLEdBQUcsc0NBQXNDLENBQUE7SUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBQSw2QkFBYyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUMzRSxJQUFJLE9BQU8sR0FBRztRQUNaLE9BQU8sRUFBRSxJQUFBLG1DQUFvQixFQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUM1RCxJQUFJLEVBQUUsSUFBQSxtQ0FBb0IsRUFBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDckQsSUFBSSxFQUFFLElBQUEsbUNBQW9CLEVBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0tBQ3ZELENBQUE7SUFDRCxPQUFPLEdBQUcsSUFBQSx5Q0FBMEIsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM5RSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUEsc0NBQXVCLEVBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsK0JBQWdCLEVBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDaE0sT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUM1RCxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
3
+ export declare function POST(req: MedusaRequest<Record<string, any>>, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ exports.POST = POST;
5
+ const email_center_1 = require("../../../../modules/email-center");
6
+ async function GET(req, res) {
7
+ const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
8
+ const limit = clamp(req.query?.limit, 1, 200, 50);
9
+ const offset = clamp(req.query?.offset, 0, 1000000, 0);
10
+ const filters = {};
11
+ if (typeof req.query?.status === "string" && req.query.status)
12
+ filters.status = req.query.status;
13
+ const [campaigns, count] = await service.listAndCountEmailCampaigns(filters, { take: limit, skip: offset, order: { created_at: "DESC" } });
14
+ return res.json({ campaigns, count, limit, offset });
15
+ }
16
+ async function POST(req, res) {
17
+ const body = req.body || {};
18
+ const name = required(body.name, "Kampánynév");
19
+ const subject = required(body.subject, "Tárgy");
20
+ const html = required(body.html, "HTML tartalom");
21
+ const text = required(body.text, "Szöveges tartalom");
22
+ const scheduledAt = body.scheduled_at ? new Date(body.scheduled_at) : null;
23
+ if (scheduledAt && Number.isNaN(scheduledAt.getTime()))
24
+ return res.status(400).json({ message: "Érvénytelen időzítés." });
25
+ const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
26
+ const campaign = await service.createEmailCampaigns({
27
+ name, subject, html, text,
28
+ locale: (0, email_center_1.normalizeLocale)(body.locale),
29
+ template_key: typeof body.template_key === "string" && body.template_key.trim() ? body.template_key.trim() : null,
30
+ segment: body.segment && typeof body.segment === "object" ? body.segment : null,
31
+ scheduled_at: scheduledAt,
32
+ status: scheduledAt ? "scheduled" : "draft",
33
+ metadata: body.metadata && typeof body.metadata === "object" ? body.metadata : null,
34
+ });
35
+ return res.status(201).json({ campaign });
36
+ }
37
+ function required(value, label) { const text = typeof value === "string" ? value.trim() : ""; if (!text)
38
+ throw new Error(`${label} megadása kötelező.`); return text; }
39
+ function clamp(value, min, max, fallback) { const n = Number(Array.isArray(value) ? value[0] : value); return Number.isInteger(n) ? Math.max(min, Math.min(max, n)) : fallback; }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esa0JBUUM7QUFFRCxvQkFtQkM7QUEvQkQsbUVBQWdIO0FBRXpHLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN0RCxNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFBO0lBQzNDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUNoRyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLDBCQUEwQixDQUFDLE9BQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFXLENBQUMsQ0FBQTtJQUM1SixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxN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
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const newsletter_1 = require("../../../../../modules/newsletter");
5
+ async function GET(req, res) {
6
+ const service = req.scope.resolve(newsletter_1.NEWSLETTER_MODULE);
7
+ const filters = {};
8
+ const status = text(req.query?.status);
9
+ const source = text(req.query?.source);
10
+ if (status)
11
+ filters.status = status;
12
+ if (source)
13
+ filters.source = source;
14
+ const subscribers = await service.listNewsletterSubscribers(filters, {
15
+ take: 100_000,
16
+ skip: 0,
17
+ order: { created_at: "DESC" },
18
+ });
19
+ const header = [
20
+ "email",
21
+ "status",
22
+ "source",
23
+ "consent_at",
24
+ "consent_version",
25
+ "double_opt_in",
26
+ "confirmation_sent_at",
27
+ "confirmed_at",
28
+ "subscribed_at",
29
+ "unsubscribed_at",
30
+ "utm_source",
31
+ "utm_medium",
32
+ "utm_campaign",
33
+ "utm_term",
34
+ "utm_content",
35
+ "created_at",
36
+ "updated_at",
37
+ ];
38
+ const rows = subscribers.map((subscriber) => {
39
+ const utm = subscriber.utm && typeof subscriber.utm === "object" ? subscriber.utm : {};
40
+ return [
41
+ subscriber.email,
42
+ subscriber.status,
43
+ subscriber.source,
44
+ subscriber.consent_at,
45
+ subscriber.consent_version,
46
+ subscriber.double_opt_in,
47
+ subscriber.confirmation_sent_at,
48
+ subscriber.confirmed_at,
49
+ subscriber.subscribed_at,
50
+ subscriber.unsubscribed_at,
51
+ utm.utm_source,
52
+ utm.utm_medium,
53
+ utm.utm_campaign,
54
+ utm.utm_term,
55
+ utm.utm_content,
56
+ subscriber.created_at,
57
+ subscriber.updated_at,
58
+ ].map(csvCell).join(",");
59
+ });
60
+ const csv = `\uFEFF${[header.join(","), ...rows].join("\r\n")}\r\n`;
61
+ const stamp = new Date().toISOString().slice(0, 10);
62
+ res.setHeader("content-type", "text/csv; charset=utf-8");
63
+ res.setHeader("content-disposition", `attachment; filename="newsletter-subscribers-${stamp}.csv"`);
64
+ return res.status(200).send(csv);
65
+ }
66
+ function csvCell(value) {
67
+ const text = value == null ? "" : value instanceof Date ? value.toISOString() : String(value);
68
+ return `"${text.replace(/"/g, '""')}"`;
69
+ }
70
+ function text(value) {
71
+ const raw = Array.isArray(value) ? value[0] : value;
72
+ return typeof raw === "string" ? raw.trim() : "";
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvc3Vic2NyaWJlcnMvZXhwb3J0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esa0JBOERDO0FBaEVELGtFQUE2RjtBQUV0RixLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQXNCLENBQUE7SUFDekUsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN0QyxJQUFJLE1BQU07UUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUNuQyxJQUFJLE1BQU07UUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUVuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxPQUFnQixFQUFFO1FBQzVFLElBQUksRUFBRSxPQUFPO1FBQ2IsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0tBQ3JCLENBQTBDLENBQUE7SUFFcEQsTUFBTSxNQUFNLEdBQUc7UUFDYixPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVE7UUFDUixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsWUFBWTtRQUNaLFlBQVk7UUFDWixjQUFjO1FBQ2QsVUFBVTtRQUNWLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtLQUNiLENBQUE7SUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdEYsT0FBTztZQUNMLFVBQVUsQ0FBQyxLQUFLO1lBQ2hCLFVBQVUsQ0FBQyxNQUFNO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNO1lBQ2pCLFVBQVUsQ0FBQyxVQUFVO1lBQ3JCLFVBQVUsQ0FBQyxlQUFlO1lBQzFCLFVBQVUsQ0FBQyxhQUFhO1lBQ3hCLFVBQVUsQ0FBQyxvQkFBb0I7WUFDL0IsVUFBVSxDQUFDLFlBQVk7WUFDdkIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsVUFBVSxDQUFDLGVBQWU7WUFDMUIsR0FBRyxDQUFDLFVBQVU7WUFDZCxHQUFHLENBQUMsVUFBVTtZQUNkLEdBQUcsQ0FBQyxZQUFZO1lBQ2hCLEdBQUcsQ0FBQyxRQUFRO1lBQ1osR0FBRyxDQUFDLFdBQVc7WUFDZixVQUFVLENBQUMsVUFBVTtZQUNyQixVQUFVLENBQUMsVUFBVTtTQUN0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUIsQ0FBQyxDQUFDLENBQUE7SUFFRixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNuRCxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO0lBQ3hELEdBQUcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsZ0RBQWdELEtBQUssT0FBTyxDQUFDLENBQUE7SUFDbEcsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixNQUFNLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdGLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUFjO0lBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ25ELE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNsRCxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const newsletter_1 = require("../../../../modules/newsletter");
5
+ async function GET(req, res) {
6
+ const service = req.scope.resolve(newsletter_1.NEWSLETTER_MODULE);
7
+ const limit = clamp(req.query?.limit, 1, 200, 100);
8
+ const offset = clamp(req.query?.offset, 0, 1_000_000, 0);
9
+ const filters = {};
10
+ const status = text(req.query?.status);
11
+ const source = text(req.query?.source);
12
+ if (status)
13
+ filters.status = status;
14
+ if (source)
15
+ filters.source = source;
16
+ const [subscribers, count] = await service.listAndCountNewsletterSubscribers(filters, {
17
+ take: limit,
18
+ skip: offset,
19
+ order: { created_at: "DESC" },
20
+ });
21
+ return res.json({
22
+ subscribers: subscribers.map(publicAdminSubscriber),
23
+ count,
24
+ limit,
25
+ offset,
26
+ });
27
+ }
28
+ function publicAdminSubscriber(subscriber) {
29
+ return {
30
+ id: subscriber.id,
31
+ email: subscriber.email,
32
+ status: subscriber.status,
33
+ source: subscriber.source,
34
+ page_url: subscriber.page_url,
35
+ utm: subscriber.utm,
36
+ consent_at: subscriber.consent_at,
37
+ consent_version: subscriber.consent_version,
38
+ consent_url: subscriber.consent_url,
39
+ double_opt_in: subscriber.double_opt_in,
40
+ confirmation_sent_at: subscriber.confirmation_sent_at,
41
+ confirmed_at: subscriber.confirmed_at,
42
+ subscribed_at: subscriber.subscribed_at,
43
+ unsubscribed_at: subscriber.unsubscribed_at,
44
+ created_at: subscriber.created_at,
45
+ updated_at: subscriber.updated_at,
46
+ };
47
+ }
48
+ function text(value) {
49
+ const raw = Array.isArray(value) ? value[0] : value;
50
+ return typeof raw === "string" ? raw.trim() : "";
51
+ }
52
+ function clamp(value, min, max, fallback) {
53
+ const raw = Array.isArray(value) ? value[0] : value;
54
+ const number = Number(raw);
55
+ return Number.isInteger(number) ? Math.max(min, Math.min(max, number)) : fallback;
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvc3Vic2NyaWJlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFzQkM7QUF4QkQsK0RBQTBGO0FBRW5GLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw4QkFBaUIsQ0FBc0IsQ0FBQTtJQUN6RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNsRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN4RCxNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3RDLElBQUksTUFBTTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ25DLElBQUksTUFBTTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBRW5DLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsaUNBQWlDLENBQUMsT0FBZ0IsRUFBRTtRQUM3RixJQUFJLEVBQUUsS0FBSztRQUNYLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtLQUNyQixDQUFDLENBQUE7SUFFWCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDZCxXQUFXLEVBQUcsV0FBcUQsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7UUFDOUYsS0FBSztRQUNMLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsVUFBK0I7SUFDNUQsT0FBTztRQUNMLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNqQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1FBQ3pCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1FBQ25CLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtRQUNqQyxlQUFlLEVBQUUsVUFBVSxDQUFDLGVBQWU7UUFDM0MsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1FBQ25DLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYTtRQUN2QyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsb0JBQW9CO1FBQ3JELFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtRQUNyQyxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7UUFDdkMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1FBQzNDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtRQUNqQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7S0FDbEMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUFjO0lBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ25ELE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsUUFBZ0I7SUFDdkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzFCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO0FBQ25GLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ type Body = {
3
+ status?: unknown;
4
+ moderation_note?: unknown;
5
+ };
6
+ export declare function POST(req: MedusaRequest<Body>, res: MedusaResponse): Promise<MedusaResponse>;
7
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const core_audit_1 = require("../../../../modules/core-audit");
5
+ const product_review_1 = require("../../../../modules/product-review");
6
+ async function POST(req, res) {
7
+ const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
8
+ const status = text(req.body?.status, 40);
9
+ if (!product_review_1.PRODUCT_REVIEW_STATUSES.includes(status)) {
10
+ return res.status(400).json({ message: "Érvénytelen értékelés státusz." });
11
+ }
12
+ const actorId = req.auth_context?.actor_id || null;
13
+ try {
14
+ const review = await service.retrieveProductReview(req.params.id);
15
+ const updated = await service.updateProductReviews({
16
+ id: review.id,
17
+ status,
18
+ moderation_note: text(req.body?.moderation_note, 2000) || null,
19
+ moderated_at: new Date(),
20
+ moderated_by: actorId,
21
+ });
22
+ await (0, core_audit_1.writeCoreAudit)(req.scope, {
23
+ action: `product_review.${status}`,
24
+ resourceType: "product_review",
25
+ resourceId: review.id,
26
+ integration: "product-review",
27
+ actorId,
28
+ summary: `Termékértékelés moderálva: ${status}.`,
29
+ details: { product_id: review.product_id, customer_id: review.customer_id, status },
30
+ });
31
+ return res.json({ review: updated });
32
+ }
33
+ catch (error) {
34
+ return res.status(400).json({ message: error instanceof Error ? error.message : "Az értékelés nem moderálható." });
35
+ }
36
+ }
37
+ function text(value, max) {
38
+ return typeof value === "string" ? value.trim().slice(0, max) : "";
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtcmV2aWV3cy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsb0JBZ0NDO0FBekNELCtEQUErRDtBQUMvRCx1RUFJMkM7QUFJcEMsS0FBSyxVQUFVLElBQUksQ0FBQyxHQUF3QixFQUFFLEdBQW1CO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUF5QixDQUFBO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN6QyxJQUFJLENBQUUsd0NBQTZDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFJLEdBQTJELENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUE7SUFDM0csSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQW1DLENBQUE7UUFDbkcsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDakQsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2IsTUFBTTtZQUNOLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSTtZQUM5RCxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDeEIsWUFBWSxFQUFFLE9BQU87U0FDYixDQUFtQyxDQUFBO1FBRTdDLE1BQU0sSUFBQSwyQkFBYyxFQUFDLEdBQUcsQ0FBQyxLQUFjLEVBQUU7WUFDdkMsTUFBTSxFQUFFLGtCQUFrQixNQUFNLEVBQUU7WUFDbEMsWUFBWSxFQUFFLGdCQUFnQjtZQUM5QixVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDckIsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixPQUFPO1lBQ1AsT0FBTyxFQUFFLDhCQUE4QixNQUFNLEdBQUc7WUFDaEQsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1NBQ3BGLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUE7SUFDcEgsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUFjLEVBQUUsR0FBVztJQUN2QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNwRSxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const product_review_1 = require("../../../modules/product-review");
5
+ async function GET(req, res) {
6
+ const limit = clamp(req.query?.limit, 1, 200, 50);
7
+ const offset = clamp(req.query?.offset, 0, 100_000, 0);
8
+ const filters = {};
9
+ const status = text(req.query?.status);
10
+ const productId = text(req.query?.product_id);
11
+ const customerId = text(req.query?.customer_id);
12
+ if (status && product_review_1.PRODUCT_REVIEW_STATUSES.includes(status))
13
+ filters.status = status;
14
+ if (productId)
15
+ filters.product_id = productId;
16
+ if (customerId)
17
+ filters.customer_id = customerId;
18
+ const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
19
+ const [reviews, count] = await service.listAndCountProductReviews(filters, { take: limit, skip: offset, order: { created_at: "DESC" } });
20
+ return res.json({ reviews, count, limit, offset });
21
+ }
22
+ function text(value) {
23
+ const raw = Array.isArray(value) ? value[0] : value;
24
+ return typeof raw === "string" ? raw.trim() : "";
25
+ }
26
+ function clamp(value, min, max, fallback) {
27
+ const raw = Array.isArray(value) ? value[0] : value;
28
+ const number = Number(raw);
29
+ return Number.isFinite(number) ? Math.max(min, Math.min(max, Math.trunc(number))) : fallback;
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtcmV2aWV3cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLGtCQWtCQztBQXhCRCxvRUFJd0M7QUFFakMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3RELE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUE7SUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDL0MsSUFBSSxNQUFNLElBQUssd0NBQTZDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RHLElBQUksU0FBUztRQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBQzdDLElBQUksVUFBVTtRQUFFLE9BQU8sQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFBO0lBRWhELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUF5QixDQUFBO0lBQ2hGLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsMEJBQTBCLENBQy9ELE9BQWdCLEVBQ2hCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBVyxDQUNuQixDQUFBO0lBRXBELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7QUFDcEQsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLEtBQWM7SUFDMUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDbkQsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ2xELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFjLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxRQUFnQjtJQUN2RSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO0FBQzlGLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function POST(req: MedusaRequest<Record<string, any> | Array<Record<string, any>>>, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const email_center_1 = require("../../../../modules/email-center");
6
+ async function POST(req, res) {
7
+ if (!authorized(req))
8
+ return res.status(401).json({ message: "Unauthorized" });
9
+ const events = Array.isArray(req.body) ? req.body : [req.body || {}];
10
+ const results = [];
11
+ for (const body of events.slice(0, 1000))
12
+ results.push(await processEvent(req, body));
13
+ return res.json({ processed: results.length, results });
14
+ }
15
+ async function processEvent(req, body) {
16
+ const event = normalizeEvent(body.event || body.type);
17
+ if (!event)
18
+ return { ok: false, message: "Unsupported event" };
19
+ const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
20
+ const deliveryId = String(body.delivery_id || body.hszrdm_delivery_id || body.unique_args?.hszrdm_delivery_id || body.custom_args?.hszrdm_delivery_id || "").trim();
21
+ const providerMessageId = String(body.provider_message_id || body.message_id || body.sg_message_id || "").trim();
22
+ let delivery;
23
+ if (deliveryId) {
24
+ try {
25
+ delivery = await service.retrieveEmailDelivery(deliveryId);
26
+ }
27
+ catch {
28
+ delivery = undefined;
29
+ }
30
+ }
31
+ if (!delivery && providerMessageId) {
32
+ const rows = await service.listEmailDeliveries({ provider_message_id: providerMessageId }, { take: 1 });
33
+ delivery = rows[0];
34
+ }
35
+ if (!delivery)
36
+ return { ok: false, message: "Delivery not found", delivery_id: deliveryId || null, provider_message_id: providerMessageId || null };
37
+ const now = new Date();
38
+ const preserveEngagement = ["opened", "clicked"].includes(delivery.status) && event === "delivered";
39
+ const updated = await service.updateEmailDeliveries({
40
+ id: delivery.id,
41
+ status: preserveEngagement ? delivery.status : event,
42
+ provider_message_id: providerMessageId || delivery.provider_message_id || null,
43
+ ...(event === "delivered" ? { delivered_at: delivery.delivered_at || now } : { failed_at: delivery.failed_at || now, error: String(body.error || body.reason || body.response || event).slice(0, 4000) }),
44
+ });
45
+ if (delivery.campaign_id)
46
+ await (0, email_center_1.refreshCampaignStats)(req.scope, delivery.campaign_id);
47
+ return { ok: true, delivery_id: delivery.id, status: preserveEngagement ? delivery.status : event, delivery: updated };
48
+ }
49
+ function normalizeEvent(value) {
50
+ const event = String(value || "").toLowerCase();
51
+ if (["delivered", "delivery"].includes(event))
52
+ return "delivered";
53
+ if (["bounce", "bounced", "blocked", "dropped"].includes(event))
54
+ return "bounced";
55
+ if (["failed", "failure", "deferred"].includes(event))
56
+ return "failed";
57
+ return null;
58
+ }
59
+ function authorized(req) {
60
+ const secret = process.env.EMAIL_WEBHOOK_SECRET || "";
61
+ if (!secret)
62
+ return false;
63
+ const auth = String(req.headers.authorization || "");
64
+ const supplied = auth.startsWith("Bearer ") ? auth.slice(7) : String(req.headers["x-email-webhook-secret"] || "");
65
+ const a = Buffer.from((0, node_crypto_1.createHash)("sha256").update(supplied).digest("hex"));
66
+ const b = Buffer.from((0, node_crypto_1.createHash)("sha256").update(secret).digest("hex"));
67
+ return a.length === b.length && (0, node_crypto_1.timingSafeEqual)(a, b);
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL2VtYWlsL3N0YXR1cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLG9CQU1DO0FBVkQsNkNBQXlEO0FBRXpELG1FQUFxSDtBQUU5RyxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQW9FLEVBQUUsR0FBbUI7SUFDbEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDOUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNwRSxNQUFNLE9BQU8sR0FBbUMsRUFBRSxDQUFBO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLEdBQWtCLEVBQUUsSUFBeUI7SUFDdkUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUE7SUFDOUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNuSyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2hILElBQUksUUFBeUMsQ0FBQTtJQUM3QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDO1lBQUMsUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBbUMsQ0FBQTtRQUFDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO1FBQUMsQ0FBQztJQUNySSxDQUFDO0lBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQVcsQ0FBMEMsQ0FBQTtRQUNsSyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUVuSixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3RCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssV0FBVyxDQUFBO0lBQ25HLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDO1FBQ2xELEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUNmLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztRQUNwRCxtQkFBbUIsRUFBRSxpQkFBaUIsSUFBSSxRQUFRLENBQUMsbUJBQW1CLElBQUksSUFBSTtRQUM5RSxHQUFHLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDak0sQ0FBQyxDQUFBO0lBQ1gsSUFBSSxRQUFRLENBQUMsV0FBVztRQUFFLE1BQU0sSUFBQSxtQ0FBb0IsRUFBQyxHQUFHLENBQUMsS0FBYyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM5RixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUE7QUFDeEgsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQWM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUNqRSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQ2pGLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUN0RSxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFrQjtJQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQTtJQUNyRCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2pILE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUMxRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEUsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBQSw2QkFBZSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN2RCxDQUFDIn0=
@@ -222,6 +222,14 @@ exports.default = (0, http_1.defineMiddlewares)({
222
222
  (0, http_1.authenticate)("customer", ["bearer", "session"]),
223
223
  ],
224
224
  },
225
+ {
226
+ matcher: "/store/products/:id/reviews",
227
+ method: ["POST"],
228
+ middlewares: [
229
+ preventCustomerDataCaching,
230
+ (0, http_1.authenticate)("customer", ["session", "bearer"]),
231
+ ],
232
+ },
225
233
  {
226
234
  matcher: "/store/core/pricing*",
227
235
  method: ["GET"],
@@ -308,4 +316,4 @@ exports.default = (0, http_1.defineMiddlewares)({
308
316
  },
309
317
  ],
310
318
  });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBTWlDO0FBQ2pDLHFEQUFxRTtBQUNyRSxpRUFBZ0U7QUFDaEUsaUVBR2tDO0FBQ2xDLDJEQUcrQjtBQUMvQiw0REFJaUM7QUFDakMsd0NBS3VCO0FBc0J2QixTQUFTLDBCQUEwQixDQUNqQyxJQUFtQixFQUNuQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxrREFBOEIsQ0FBQyxDQUFBO0lBQzlELEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ25DLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLE9BQU8sSUFBSSxFQUFFLENBQUE7QUFDZixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDbEMsb0NBQW9CLENBQ1csQ0FBQTtRQUVqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsMkNBQTJCLEVBQUM7WUFDL0MsVUFBVTtZQUNWLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7U0FDdEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRTdELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixJQUFJLEVBQUUs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
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBTWlDO0FBQ2pDLHFEQUFxRTtBQUNyRSxpRUFBZ0U7QUFDaEUsaUVBR2tDO0FBQ2xDLDJEQUcrQjtBQUMvQiw0REFJaUM7QUFDakMsd0NBS3VCO0FBc0J2QixTQUFTLDBCQUEwQixDQUNqQyxJQUFtQixFQUNuQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxrREFBOEIsQ0FBQyxDQUFBO0lBQzlELEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ25DLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLE9BQU8sSUFBSSxFQUFFLENBQUE7QUFDZixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDbEMsb0NBQW9CLENBQ1csQ0FBQTtRQUVqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsMkNBQTJCLEVBQUM7WUFDL0MsVUFBVTtZQUNWLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7U0FDdEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRTdELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixJQUFJLEVBQUUs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
@@ -0,0 +1,2 @@
1
+ import type { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function DELETE(req: AuthenticatedMedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = DELETE;
4
+ const wishlist_1 = require("../../../../../modules/wishlist");
5
+ async function DELETE(req, res) {
6
+ const customerId = String(req.auth_context?.actor_id || "").trim();
7
+ const productId = String(req.params.productId || "").trim();
8
+ if (!customerId)
9
+ return res.status(401).json({ message: "Bejelentkezett ügyfél szükséges." });
10
+ if (!productId)
11
+ return res.status(400).json({ message: "A productId megadása kötelező." });
12
+ const service = req.scope.resolve(wishlist_1.WISHLIST_MODULE);
13
+ const [item] = await service.listWishlistItems({ customer_id: customerId, product_id: productId }, { take: 1 });
14
+ if (item?.id)
15
+ await service.deleteWishlistItems(item.id);
16
+ return res.status(200).json({ product_id: productId, deleted: Boolean(item?.id) });
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2FjY291bnQvd2lzaGxpc3QvW3Byb2R1Y3RJZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSx3QkFjQztBQWhCRCw4REFBdUY7QUFFaEYsS0FBSyxVQUFVLE1BQU0sQ0FBQyxHQUErQixFQUFFLEdBQW1CO0lBQy9FLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDM0QsSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQTtJQUM3RixJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFBO0lBRTFGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDBCQUFlLENBQW9CLENBQUE7SUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixDQUM1QyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVyxFQUMzRCxFQUFFLElBQUksRUFBRSxDQUFDLEVBQVcsQ0FDb0IsQ0FBQTtJQUUxQyxJQUFJLElBQUksRUFBRSxFQUFFO1FBQUUsTUFBTSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNwRixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import type { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ type Body = {
3
+ product_ids?: unknown;
4
+ };
5
+ export declare function POST(req: AuthenticatedMedusaRequest<Body>, res: MedusaResponse): Promise<MedusaResponse>;
6
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const wishlist_1 = require("../../../../../modules/wishlist");
6
+ async function POST(req, res) {
7
+ const customerId = String(req.auth_context?.actor_id || "").trim();
8
+ if (!customerId)
9
+ return res.status(401).json({ message: "Bejelentkezett ügyfél szükséges." });
10
+ const requestedIds = normalizeIds(req.body?.product_ids);
11
+ if (!requestedIds.length)
12
+ return res.json({ merged: 0, ignored: 0, product_ids: [] });
13
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
14
+ const products = await query.graph({
15
+ entity: "product",
16
+ fields: ["id"],
17
+ filters: { id: requestedIds },
18
+ pagination: { take: requestedIds.length, skip: 0 },
19
+ });
20
+ const validIds = new Set((products.data || []).map((product) => String(product.id || "")).filter(Boolean));
21
+ const service = req.scope.resolve(wishlist_1.WISHLIST_MODULE);
22
+ const existing = await service.listWishlistItems({ customer_id: customerId }, { take: 500 });
23
+ const existingIds = new Set(existing.map((item) => String(item.product_id || "")));
24
+ let merged = 0;
25
+ for (const productId of requestedIds) {
26
+ if (!validIds.has(productId) || existingIds.has(productId))
27
+ continue;
28
+ try {
29
+ await service.createWishlistItems({ customer_id: customerId, product_id: productId });
30
+ existingIds.add(productId);
31
+ merged += 1;
32
+ }
33
+ catch {
34
+ // The unique customer/product index makes concurrent merges idempotent.
35
+ }
36
+ }
37
+ return res.json({
38
+ merged,
39
+ ignored: requestedIds.length - merged,
40
+ product_ids: [...existingIds],
41
+ });
42
+ }
43
+ function normalizeIds(value) {
44
+ if (!Array.isArray(value))
45
+ return [];
46
+ return [...new Set(value
47
+ .map((item) => typeof item === "string" ? item.trim() : "")
48
+ .filter(Boolean))]
49
+ .slice(0, 200);
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2FjY291bnQvd2lzaGxpc3QvbWVyZ2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxvQkF3Q0M7QUFoREQscURBQXFFO0FBQ3JFLDhEQUF1RjtBQU9oRixLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXFDLEVBQUUsR0FBbUI7SUFDbkYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xFLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLENBQUE7SUFFN0YsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRXJGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBeUIsQ0FBQTtJQUN4RixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRTtRQUM3QixVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0tBQ25ELENBQUMsQ0FBQTtJQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFMUcsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBb0IsQ0FBQTtJQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsQ0FDOUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFXLEVBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBVyxDQUNrQixDQUFBO0lBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVsRixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDZCxLQUFLLE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQUUsU0FBUTtRQUNwRSxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVyxDQUFDLENBQUE7WUFDOUYsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMxQixNQUFNLElBQUksQ0FBQyxDQUFBO1FBQ2IsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHdFQUF3RTtRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztRQUNkLE1BQU07UUFDTixPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNO1FBQ3JDLFdBQVcsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0tBQzlCLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUs7YUFDckIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2pCLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDbEIsQ0FBQyJ9
@@ -0,0 +1,7 @@
1
+ import type { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ type Body = {
3
+ product_id?: unknown;
4
+ };
5
+ export declare function GET(req: AuthenticatedMedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
6
+ export declare function POST(req: AuthenticatedMedusaRequest<Body>, res: MedusaResponse): Promise<MedusaResponse>;
7
+ export {};