@hszrdm/core 1.0.3 → 1.2.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 (192) hide show
  1. package/.medusa/server/src/admin/index.js +4375 -2368
  2. package/.medusa/server/src/admin/index.mjs +4376 -2369
  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/cms/entries/[id]/route.d.ts +6 -0
  10. package/.medusa/server/src/api/admin/cms/entries/[id]/route.js +78 -0
  11. package/.medusa/server/src/api/admin/cms/entries/route.d.ts +5 -0
  12. package/.medusa/server/src/api/admin/cms/entries/route.js +77 -0
  13. package/.medusa/server/src/api/admin/cms/taxonomy/[id]/route.d.ts +5 -0
  14. package/.medusa/server/src/api/admin/cms/taxonomy/[id]/route.js +50 -0
  15. package/.medusa/server/src/api/admin/cms/taxonomy/route.d.ts +5 -0
  16. package/.medusa/server/src/api/admin/cms/taxonomy/route.js +60 -0
  17. package/.medusa/server/src/api/admin/core/status/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/core/status/route.js +11 -0
  19. package/.medusa/server/src/api/admin/featured-products/[id]/route.d.ts +7 -0
  20. package/.medusa/server/src/api/admin/featured-products/[id]/route.js +54 -0
  21. package/.medusa/server/src/api/admin/leads/[id]/route.d.ts +9 -0
  22. package/.medusa/server/src/api/admin/leads/[id]/route.js +64 -0
  23. package/.medusa/server/src/api/admin/leads/route.d.ts +2 -0
  24. package/.medusa/server/src/api/admin/leads/route.js +26 -0
  25. package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.d.ts +2 -0
  26. package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.js +74 -0
  27. package/.medusa/server/src/api/admin/newsletter/subscribers/route.d.ts +2 -0
  28. package/.medusa/server/src/api/admin/newsletter/subscribers/route.js +57 -0
  29. package/.medusa/server/src/api/admin/product-reviews/[id]/route.d.ts +7 -0
  30. package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +40 -0
  31. package/.medusa/server/src/api/admin/product-reviews/route.d.ts +2 -0
  32. package/.medusa/server/src/api/admin/product-reviews/route.js +31 -0
  33. package/.medusa/server/src/api/admin/quote-requests/[id]/draft-order/route.d.ts +8 -0
  34. package/.medusa/server/src/api/admin/quote-requests/[id]/draft-order/route.js +160 -0
  35. package/.medusa/server/src/api/admin/quote-requests/[id]/order/route.d.ts +2 -0
  36. package/.medusa/server/src/api/admin/quote-requests/[id]/order/route.js +54 -0
  37. package/.medusa/server/src/api/admin/quote-requests/[id]/route.d.ts +5 -0
  38. package/.medusa/server/src/api/admin/quote-requests/[id]/route.js +80 -0
  39. package/.medusa/server/src/api/admin/quote-requests/route.d.ts +2 -0
  40. package/.medusa/server/src/api/admin/quote-requests/route.js +19 -0
  41. package/.medusa/server/src/api/middlewares.js +19 -6
  42. package/.medusa/server/src/api/store/account/wishlist/[productId]/route.d.ts +2 -0
  43. package/.medusa/server/src/api/store/account/wishlist/[productId]/route.js +18 -0
  44. package/.medusa/server/src/api/store/account/wishlist/merge/route.d.ts +6 -0
  45. package/.medusa/server/src/api/store/account/wishlist/merge/route.js +51 -0
  46. package/.medusa/server/src/api/store/account/wishlist/route.d.ts +7 -0
  47. package/.medusa/server/src/api/store/account/wishlist/route.js +76 -0
  48. package/.medusa/server/src/api/store/cms/config/route.d.ts +2 -0
  49. package/.medusa/server/src/api/store/cms/config/route.js +17 -0
  50. package/.medusa/server/src/api/store/cms/entries/[slug]/route.d.ts +2 -0
  51. package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +62 -0
  52. package/.medusa/server/src/api/store/cms/entries/route.d.ts +2 -0
  53. package/.medusa/server/src/api/store/cms/entries/route.js +87 -0
  54. package/.medusa/server/src/api/store/cms/taxonomy/route.d.ts +2 -0
  55. package/.medusa/server/src/api/store/cms/taxonomy/route.js +44 -0
  56. package/.medusa/server/src/api/store/core/pricing/variants/[id]/route.d.ts +2 -0
  57. package/.medusa/server/src/api/store/core/pricing/variants/[id]/route.js +152 -0
  58. package/.medusa/server/src/api/store/featured-products/route.d.ts +2 -0
  59. package/.medusa/server/src/api/store/featured-products/route.js +38 -0
  60. package/.medusa/server/src/api/store/leads/config/route.d.ts +2 -0
  61. package/.medusa/server/src/api/store/leads/config/route.js +21 -0
  62. package/.medusa/server/src/api/store/leads/route.d.ts +4 -0
  63. package/.medusa/server/src/api/store/leads/route.js +176 -0
  64. package/.medusa/server/src/api/store/newsletter/config/route.d.ts +2 -0
  65. package/.medusa/server/src/api/store/newsletter/config/route.js +14 -0
  66. package/.medusa/server/src/api/store/newsletter/confirm/route.d.ts +4 -0
  67. package/.medusa/server/src/api/store/newsletter/confirm/route.js +52 -0
  68. package/.medusa/server/src/api/store/newsletter/route.d.ts +4 -0
  69. package/.medusa/server/src/api/store/newsletter/route.js +172 -0
  70. package/.medusa/server/src/api/store/newsletter/unsubscribe/route.d.ts +4 -0
  71. package/.medusa/server/src/api/store/newsletter/unsubscribe/route.js +54 -0
  72. package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +8 -0
  73. package/.medusa/server/src/api/store/products/[id]/reviews/route.js +174 -0
  74. package/.medusa/server/src/api/store/quote-requests/config/route.d.ts +2 -0
  75. package/.medusa/server/src/api/store/quote-requests/config/route.js +13 -0
  76. package/.medusa/server/src/api/store/quote-requests/route.d.ts +5 -0
  77. package/.medusa/server/src/api/store/quote-requests/route.js +214 -0
  78. package/.medusa/server/src/api/store/seo/route.js +42 -10
  79. package/.medusa/server/src/api/store/seo/structured-data/route.js +3 -2
  80. package/.medusa/server/src/config.js +7 -1
  81. package/.medusa/server/src/core/admin-analytics-dashboard.d.ts +1 -0
  82. package/.medusa/server/src/core/admin-analytics-dashboard.js +15 -3
  83. package/.medusa/server/src/core/ai-translation.d.ts +26 -0
  84. package/.medusa/server/src/core/ai-translation.js +173 -0
  85. package/.medusa/server/src/core/featured-products.d.ts +19 -0
  86. package/.medusa/server/src/core/featured-products.js +45 -0
  87. package/.medusa/server/src/core/pricing-tiers.d.ts +25 -0
  88. package/.medusa/server/src/core/pricing-tiers.js +88 -0
  89. package/.medusa/server/src/core/release-info.d.ts +10 -0
  90. package/.medusa/server/src/core/release-info.js +22 -0
  91. package/.medusa/server/src/core/version.d.ts +4 -4
  92. package/.medusa/server/src/core/version.js +3 -3
  93. package/.medusa/server/src/lib/modules/arukereso/config.js +2 -2
  94. package/.medusa/server/src/lib/modules/google-merchant/config.d.ts +2 -0
  95. package/.medusa/server/src/lib/modules/google-merchant/config.js +9 -2
  96. package/.medusa/server/src/lib/modules/google-merchant/feed.d.ts +1 -0
  97. package/.medusa/server/src/lib/modules/google-merchant/feed.js +4 -2
  98. package/.medusa/server/src/localized-config.d.ts +9 -0
  99. package/.medusa/server/src/localized-config.js +14 -0
  100. package/.medusa/server/src/modules/cms/config.d.ts +11 -0
  101. package/.medusa/server/src/modules/cms/config.js +65 -0
  102. package/.medusa/server/src/modules/cms/content-types.d.ts +24 -0
  103. package/.medusa/server/src/modules/cms/content-types.js +27 -0
  104. package/.medusa/server/src/modules/cms/index.d.ts +9 -0
  105. package/.medusa/server/src/modules/cms/index.js +32 -0
  106. package/.medusa/server/src/modules/cms/migrations/Migration20261029170000.d.ts +5 -0
  107. package/.medusa/server/src/modules/cms/migrations/Migration20261029170000.js +27 -0
  108. package/.medusa/server/src/modules/cms/migrations/Migration20261029190000.d.ts +5 -0
  109. package/.medusa/server/src/modules/cms/migrations/Migration20261029190000.js +52 -0
  110. package/.medusa/server/src/modules/cms/models/cms.d.ts +67 -0
  111. package/.medusa/server/src/modules/cms/models/cms.js +64 -0
  112. package/.medusa/server/src/modules/cms/service.d.ts +82 -0
  113. package/.medusa/server/src/modules/cms/service.js +9 -0
  114. package/.medusa/server/src/modules/cms/utils.d.ts +67 -0
  115. package/.medusa/server/src/modules/cms/utils.js +190 -0
  116. package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +2 -2
  117. package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +6 -2
  118. package/.medusa/server/src/modules/lead/config.d.ts +37 -0
  119. package/.medusa/server/src/modules/lead/config.js +147 -0
  120. package/.medusa/server/src/modules/lead/email.d.ts +17 -0
  121. package/.medusa/server/src/modules/lead/email.js +68 -0
  122. package/.medusa/server/src/modules/lead/index.d.ts +9 -0
  123. package/.medusa/server/src/modules/lead/index.js +27 -0
  124. package/.medusa/server/src/modules/lead/migrations/Migration20261029163000.d.ts +5 -0
  125. package/.medusa/server/src/modules/lead/migrations/Migration20261029163000.js +19 -0
  126. package/.medusa/server/src/modules/lead/models/lead.d.ts +26 -0
  127. package/.medusa/server/src/modules/lead/models/lead.js +53 -0
  128. package/.medusa/server/src/modules/lead/service.d.ts +29 -0
  129. package/.medusa/server/src/modules/lead/service.js +11 -0
  130. package/.medusa/server/src/modules/lead/spam.d.ts +24 -0
  131. package/.medusa/server/src/modules/lead/spam.js +114 -0
  132. package/.medusa/server/src/modules/newsletter/config.d.ts +14 -0
  133. package/.medusa/server/src/modules/newsletter/config.js +51 -0
  134. package/.medusa/server/src/modules/newsletter/email.d.ts +9 -0
  135. package/.medusa/server/src/modules/newsletter/email.js +38 -0
  136. package/.medusa/server/src/modules/newsletter/events.d.ts +10 -0
  137. package/.medusa/server/src/modules/newsletter/events.js +34 -0
  138. package/.medusa/server/src/modules/newsletter/index.d.ts +10 -0
  139. package/.medusa/server/src/modules/newsletter/index.js +33 -0
  140. package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.d.ts +5 -0
  141. package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.js +18 -0
  142. package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.d.ts +21 -0
  143. package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.js +35 -0
  144. package/.medusa/server/src/modules/newsletter/service.d.ts +24 -0
  145. package/.medusa/server/src/modules/newsletter/service.js +11 -0
  146. package/.medusa/server/src/modules/newsletter/token.d.ts +10 -0
  147. package/.medusa/server/src/modules/newsletter/token.js +97 -0
  148. package/.medusa/server/src/modules/product-review/config.d.ts +5 -0
  149. package/.medusa/server/src/modules/product-review/config.js +10 -0
  150. package/.medusa/server/src/modules/product-review/index.d.ts +7 -0
  151. package/.medusa/server/src/modules/product-review/index.js +18 -0
  152. package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.d.ts +5 -0
  153. package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.js +18 -0
  154. package/.medusa/server/src/modules/product-review/models/product-review.d.ts +16 -0
  155. package/.medusa/server/src/modules/product-review/models/product-review.js +26 -0
  156. package/.medusa/server/src/modules/product-review/service.d.ts +25 -0
  157. package/.medusa/server/src/modules/product-review/service.js +12 -0
  158. package/.medusa/server/src/modules/quote-request/config.d.ts +14 -0
  159. package/.medusa/server/src/modules/quote-request/config.js +52 -0
  160. package/.medusa/server/src/modules/quote-request/email.d.ts +17 -0
  161. package/.medusa/server/src/modules/quote-request/email.js +133 -0
  162. package/.medusa/server/src/modules/quote-request/index.d.ts +8 -0
  163. package/.medusa/server/src/modules/quote-request/index.js +23 -0
  164. package/.medusa/server/src/modules/quote-request/migrations/Migration20261029160000.d.ts +5 -0
  165. package/.medusa/server/src/modules/quote-request/migrations/Migration20261029160000.js +20 -0
  166. package/.medusa/server/src/modules/quote-request/models/quote-request.d.ts +24 -0
  167. package/.medusa/server/src/modules/quote-request/models/quote-request.js +54 -0
  168. package/.medusa/server/src/modules/quote-request/service.d.ts +32 -0
  169. package/.medusa/server/src/modules/quote-request/service.js +12 -0
  170. package/.medusa/server/src/modules/seo/models/seo-page.js +5 -5
  171. package/.medusa/server/src/modules/seo/sitemap.js +44 -10
  172. package/.medusa/server/src/modules/seo/structured-data.d.ts +1 -1
  173. package/.medusa/server/src/modules/seo/structured-data.js +41 -25
  174. package/.medusa/server/src/modules/seo/technical.d.ts +7 -2
  175. package/.medusa/server/src/modules/seo/technical.js +45 -6
  176. package/.medusa/server/src/modules/seo/types.d.ts +2 -0
  177. package/.medusa/server/src/modules/wishlist/index.d.ts +5 -0
  178. package/.medusa/server/src/modules/wishlist/index.js +14 -0
  179. package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.d.ts +5 -0
  180. package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.js +17 -0
  181. package/.medusa/server/src/modules/wishlist/models/wishlist-item.d.ts +6 -0
  182. package/.medusa/server/src/modules/wishlist/models/wishlist-item.js +14 -0
  183. package/.medusa/server/src/modules/wishlist/service.d.ts +15 -0
  184. package/.medusa/server/src/modules/wishlist/service.js +12 -0
  185. package/.medusa/server/src/scripts/ensure-locales.d.ts +2 -0
  186. package/.medusa/server/src/scripts/ensure-locales.js +34 -0
  187. package/.medusa/server/src/scripts/ensure-shipping.d.ts +3 -0
  188. package/.medusa/server/src/scripts/ensure-shipping.js +211 -0
  189. package/.medusa/server/src/scripts/verify-bootstrap.js +19 -2
  190. package/.medusa/server/src/subscribers/quote-request-order-placed.d.ts +7 -0
  191. package/.medusa/server/src/subscribers/quote-request-order-placed.js +27 -0
  192. package/package.json +3 -2
@@ -0,0 +1,11 @@
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 newsletter_subscriber_1 = __importDefault(require("./models/newsletter-subscriber"));
8
+ class NewsletterService extends (0, utils_1.MedusaService)({ NewsletterSubscriber: newsletter_subscriber_1.default }) {
9
+ }
10
+ exports.default = NewsletterService;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL25ld3NsZXR0ZXIvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUF5RDtBQUN6RCwyRkFBaUU7QUFFakUsTUFBTSxpQkFBa0IsU0FBUSxJQUFBLHFCQUFhLEVBQUMsRUFBRSxvQkFBb0IsRUFBcEIsK0JBQW9CLEVBQUUsQ0FBQztDQUFHO0FBRTFFLGtCQUFlLGlCQUFpQixDQUFBIn0=
@@ -0,0 +1,10 @@
1
+ export declare function createNewsletterToken(bytes?: number): {
2
+ token: string;
3
+ hash: string;
4
+ };
5
+ export declare function hashNewsletterToken(token: string): string;
6
+ export declare function createNewsletterUnsubscribeToken(subscriberId: string, email: string): string;
7
+ export declare function newsletterSubscriberIdFromUnsubscribeToken(token: string): string;
8
+ export declare function verifyNewsletterUnsubscribeToken(token: string, subscriberId: string, email: string): boolean;
9
+ export declare function normalizeNewsletterEmail(value: unknown): string;
10
+ export declare function normalizeNewsletterUtm(value: unknown): Record<string, string>;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNewsletterToken = createNewsletterToken;
4
+ exports.hashNewsletterToken = hashNewsletterToken;
5
+ exports.createNewsletterUnsubscribeToken = createNewsletterUnsubscribeToken;
6
+ exports.newsletterSubscriberIdFromUnsubscribeToken = newsletterSubscriberIdFromUnsubscribeToken;
7
+ exports.verifyNewsletterUnsubscribeToken = verifyNewsletterUnsubscribeToken;
8
+ exports.normalizeNewsletterEmail = normalizeNewsletterEmail;
9
+ exports.normalizeNewsletterUtm = normalizeNewsletterUtm;
10
+ const node_crypto_1 = require("node:crypto");
11
+ function createNewsletterToken(bytes = 32) {
12
+ const token = (0, node_crypto_1.randomBytes)(bytes).toString("base64url");
13
+ return { token, hash: hashNewsletterToken(token) };
14
+ }
15
+ function hashNewsletterToken(token) {
16
+ return (0, node_crypto_1.createHash)("sha256").update(token, "utf8").digest("hex");
17
+ }
18
+ function createNewsletterUnsubscribeToken(subscriberId, email) {
19
+ const id = String(subscriberId || "").trim();
20
+ if (!id)
21
+ throw new Error("A feliratkozó azonosítója hiányzik.");
22
+ const normalizedEmail = normalizeNewsletterEmail(email);
23
+ const encodedId = Buffer.from(id, "utf8").toString("base64url");
24
+ const signature = signUnsubscribeToken(id, normalizedEmail);
25
+ return `${encodedId}.${signature}`;
26
+ }
27
+ function newsletterSubscriberIdFromUnsubscribeToken(token) {
28
+ const parts = String(token || "").trim().split(".");
29
+ if (parts.length !== 2 || !parts[0] || !parts[1])
30
+ throw new Error("Érvénytelen leiratkozó token.");
31
+ let id = "";
32
+ try {
33
+ id = Buffer.from(parts[0], "base64url").toString("utf8").trim();
34
+ }
35
+ catch {
36
+ id = "";
37
+ }
38
+ if (!id || id.length > 255)
39
+ throw new Error("Érvénytelen leiratkozó token.");
40
+ return id;
41
+ }
42
+ function verifyNewsletterUnsubscribeToken(token, subscriberId, email) {
43
+ const parts = String(token || "").trim().split(".");
44
+ if (parts.length !== 2)
45
+ return false;
46
+ let tokenId;
47
+ try {
48
+ tokenId = newsletterSubscriberIdFromUnsubscribeToken(token);
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ if (tokenId !== subscriberId)
54
+ return false;
55
+ const expected = signUnsubscribeToken(subscriberId, normalizeNewsletterEmail(email));
56
+ const provided = Buffer.from(parts[1], "utf8");
57
+ const wanted = Buffer.from(expected, "utf8");
58
+ return provided.length === wanted.length && (0, node_crypto_1.timingSafeEqual)(provided, wanted);
59
+ }
60
+ function normalizeNewsletterEmail(value) {
61
+ if (typeof value !== "string")
62
+ throw new Error("Az e-mail-cím megadása kötelező.");
63
+ const email = value.trim().toLowerCase();
64
+ if (!email || email.length > 320 || !/^\S+@\S+\.\S+$/.test(email)) {
65
+ throw new Error("Érvényes e-mail-cím szükséges.");
66
+ }
67
+ return email;
68
+ }
69
+ function normalizeNewsletterUtm(value) {
70
+ if (!value || typeof value !== "object" || Array.isArray(value))
71
+ return {};
72
+ const allowed = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
73
+ const input = value;
74
+ const output = {};
75
+ for (const key of allowed) {
76
+ const raw = input[key];
77
+ if (typeof raw !== "string")
78
+ continue;
79
+ const normalized = raw.trim().slice(0, 500);
80
+ if (normalized)
81
+ output[key] = normalized;
82
+ }
83
+ return output;
84
+ }
85
+ function signUnsubscribeToken(subscriberId, email) {
86
+ return (0, node_crypto_1.createHmac)("sha256", newsletterTokenSecret())
87
+ .update(`${subscriberId}:${email}`, "utf8")
88
+ .digest("base64url");
89
+ }
90
+ function newsletterTokenSecret() {
91
+ const secret = String(process.env.NEWSLETTER_TOKEN_SECRET || process.env.COOKIE_SECRET || "").trim();
92
+ if (secret.length < 32) {
93
+ throw new Error("NEWSLETTER_TOKEN_SECRET vagy legalább 32 karakteres COOKIE_SECRET szükséges a leiratkozó linkekhez.");
94
+ }
95
+ return secret;
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9uZXdzbGV0dGVyL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsc0RBR0M7QUFFRCxrREFFQztBQUVELDRFQU9DO0FBRUQsZ0dBT0M7QUFFRCw0RUFXQztBQUVELDREQU9DO0FBRUQsd0RBWUM7QUEvREQsNkNBQWtGO0FBRWxGLFNBQWdCLHFCQUFxQixDQUFDLEtBQUssR0FBRyxFQUFFO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUEseUJBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFPLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQUMsWUFBb0IsRUFBRSxLQUFhO0lBQ2xGLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUMsSUFBSSxDQUFDLEVBQUU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sU0FBUyxHQUFHLG9CQUFvQixD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
@@ -0,0 +1,5 @@
1
+ export type ProductReviewConfig = {
2
+ enabled: boolean;
3
+ requireVerifiedPurchase: boolean;
4
+ };
5
+ export declare function loadProductReviewConfig(env?: NodeJS.ProcessEnv): ProductReviewConfig;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadProductReviewConfig = loadProductReviewConfig;
4
+ function loadProductReviewConfig(env = process.env) {
5
+ return {
6
+ enabled: env.PRODUCT_REVIEWS_ENABLED !== "false",
7
+ requireVerifiedPurchase: env.PRODUCT_REVIEWS_REQUIRE_VERIFIED_PURCHASE === "true",
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcHJvZHVjdC1yZXZpZXcvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBS0M7QUFMRCxTQUFnQix1QkFBdUIsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUMxRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyx1QkFBdUIsS0FBSyxPQUFPO1FBQ2hELHVCQUF1QixFQUFFLEdBQUcsQ0FBQyx5Q0FBeUMsS0FBSyxNQUFNO0tBQ2xGLENBQUE7QUFDSCxDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import ProductReviewService from "./service";
2
+ export declare const PRODUCT_REVIEW_MODULE = "productReview";
3
+ declare const _default: any;
4
+ export default _default;
5
+ export { ProductReviewService };
6
+ export { PRODUCT_REVIEW_STATUSES } from "./models/product-review";
7
+ export { loadProductReviewConfig, type ProductReviewConfig } from "./config";
@@ -0,0 +1,18 @@
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
+ exports.loadProductReviewConfig = exports.PRODUCT_REVIEW_STATUSES = exports.ProductReviewService = exports.PRODUCT_REVIEW_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.ProductReviewService = service_1.default;
10
+ exports.PRODUCT_REVIEW_MODULE = "productReview";
11
+ exports.default = (0, utils_1.Module)(exports.PRODUCT_REVIEW_MODULE, {
12
+ service: service_1.default,
13
+ });
14
+ var product_review_1 = require("./models/product-review");
15
+ Object.defineProperty(exports, "PRODUCT_REVIEW_STATUSES", { enumerable: true, get: function () { return product_review_1.PRODUCT_REVIEW_STATUSES; } });
16
+ var config_1 = require("./config");
17
+ Object.defineProperty(exports, "loadProductReviewConfig", { enumerable: true, get: function () { return config_1.loadProductReviewConfig; } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQTRDO0FBUW5DLCtCQVJGLGlCQUFvQixDQVFFO0FBTmhCLFFBQUEscUJBQXFCLEdBQUcsZUFBZSxDQUFBO0FBRXBELGtCQUFlLElBQUEsY0FBTSxFQUFDLDZCQUFxQixFQUFFO0lBQzNDLE9BQU8sRUFBRSxpQkFBb0I7Q0FDOUIsQ0FBQyxDQUFBO0FBR0YsMERBQWlFO0FBQXhELHlIQUFBLHVCQUF1QixPQUFBO0FBQ2hDLG1DQUE0RTtBQUFuRSxpSEFBQSx1QkFBdUIsT0FBQSJ9
@@ -0,0 +1,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20261030160100 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261030160100 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20261030160100 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "product_review" ("id" text not null, "product_id" text not null, "customer_id" text not null, "customer_name" text null, "rating" int not null, "body" text not null, "status" text check ("status" in ('pending','approved','rejected')) not null default 'pending', "verified_purchase" boolean not null default false, "order_id" text null, "moderation_note" text null, "moderated_at" timestamptz null, "moderated_by" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "product_review_pkey" primary key ("id"));`);
8
+ this.addSql(`create unique index if not exists "IDX_product_review_product_customer" on "product_review" ("product_id", "customer_id") where deleted_at is null;`);
9
+ this.addSql(`create index if not exists "IDX_product_review_product_status_created" on "product_review" ("product_id", "status", "created_at") where deleted_at is null;`);
10
+ this.addSql(`create index if not exists "IDX_product_review_customer_created" on "product_review" ("customer_id", "created_at") where deleted_at is null;`);
11
+ this.addSql(`create index if not exists "IDX_product_review_status_created" on "product_review" ("status", "created_at") where deleted_at is null;`);
12
+ }
13
+ async down() {
14
+ this.addSql(`drop table if exists "product_review" cascade;`);
15
+ }
16
+ }
17
+ exports.Migration20261030160100 = Migration20261030160100;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMzAxNjAxMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYxMDMwMTYwMTAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ3BELEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyw0bkJBQTRuQixDQUFDLENBQUE7UUFDem9CLElBQUksQ0FBQyxNQUFNLENBQUMscUpBQXFKLENBQUMsQ0FBQTtRQUNsSyxJQUFJLENBQUMsTUFBTSxDQUFDLDZKQUE2SixDQUFDLENBQUE7UUFDMUssSUFBSSxDQUFDLE1BQU0sQ0FBQyw4SUFBOEksQ0FBQyxDQUFBO1FBQzNKLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQTtJQUN0SixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGO0FBWkQsMERBWUMifQ==
@@ -0,0 +1,16 @@
1
+ export declare const PRODUCT_REVIEW_STATUSES: readonly ["pending", "approved", "rejected"];
2
+ declare const ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
3
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
4
+ product_id: import("@medusajs/framework/utils").TextProperty;
5
+ customer_id: import("@medusajs/framework/utils").TextProperty;
6
+ customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
7
+ rating: import("@medusajs/framework/utils").NumberProperty;
8
+ body: import("@medusajs/framework/utils").TextProperty;
9
+ status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
10
+ verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
11
+ order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
12
+ moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
13
+ moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
14
+ moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
15
+ }>, "product_review">;
16
+ export default ProductReview;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRODUCT_REVIEW_STATUSES = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.PRODUCT_REVIEW_STATUSES = ["pending", "approved", "rejected"];
6
+ const ProductReview = utils_1.model.define("product_review", {
7
+ id: utils_1.model.id().primaryKey(),
8
+ product_id: utils_1.model.text(),
9
+ customer_id: utils_1.model.text(),
10
+ customer_name: utils_1.model.text().nullable(),
11
+ rating: utils_1.model.number(),
12
+ body: utils_1.model.text(),
13
+ status: utils_1.model.enum(["pending", "approved", "rejected"]).default("pending"),
14
+ verified_purchase: utils_1.model.boolean().default(false),
15
+ order_id: utils_1.model.text().nullable(),
16
+ moderation_note: utils_1.model.text().nullable(),
17
+ moderated_at: utils_1.model.dateTime().nullable(),
18
+ moderated_by: utils_1.model.text().nullable(),
19
+ }).indexes([
20
+ { on: ["product_id", "customer_id"], unique: true },
21
+ { on: ["product_id", "status", "created_at"] },
22
+ { on: ["customer_id", "created_at"] },
23
+ { on: ["status", "created_at"] },
24
+ ]);
25
+ exports.default = ProductReview;
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1yZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9tb2RlbHMvcHJvZHVjdC1yZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBVSxDQUFBO0FBRW5GLE1BQU0sYUFBYSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7SUFDbkQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDeEIsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDekIsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7SUFDdEIsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxRSxpQkFBaUIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqRCxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxlQUFlLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxZQUFZLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNuRCxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDOUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7Q0FDakMsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsYUFBYSxDQUFBIn0=
@@ -0,0 +1,25 @@
1
+ declare const ProductReviewBaseService: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
2
+ readonly ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
3
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
4
+ product_id: import("@medusajs/framework/utils").TextProperty;
5
+ customer_id: import("@medusajs/framework/utils").TextProperty;
6
+ customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
7
+ rating: import("@medusajs/framework/utils").NumberProperty;
8
+ body: import("@medusajs/framework/utils").TextProperty;
9
+ status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
10
+ verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
11
+ order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
12
+ moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
13
+ moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
14
+ moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
15
+ }>, "product_review">;
16
+ }>>;
17
+ type ProductReviewBaseServiceInstance = InstanceType<typeof ProductReviewBaseService>;
18
+ export default class ProductReviewService extends ProductReviewBaseService {
19
+ createProductReviews: ProductReviewBaseServiceInstance["createProductReviews"];
20
+ updateProductReviews: ProductReviewBaseServiceInstance["updateProductReviews"];
21
+ retrieveProductReview: ProductReviewBaseServiceInstance["retrieveProductReview"];
22
+ listProductReviews: ProductReviewBaseServiceInstance["listProductReviews"];
23
+ listAndCountProductReviews: ProductReviewBaseServiceInstance["listAndCountProductReviews"];
24
+ }
25
+ export {};
@@ -0,0 +1,12 @@
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 product_review_1 = __importDefault(require("./models/product-review"));
8
+ const ProductReviewBaseService = (0, utils_1.MedusaService)({ ProductReview: product_review_1.default });
9
+ class ProductReviewService extends ProductReviewBaseService {
10
+ }
11
+ exports.default = ProductReviewService;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Byb2R1Y3QtcmV2aWV3L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsNkVBQW1EO0FBRW5ELE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxxQkFBYSxFQUFDLEVBQUUsYUFBYSxFQUFiLHdCQUFhLEVBQUUsQ0FBQyxDQUFBO0FBR2pFLE1BQXFCLG9CQUFxQixTQUFRLHdCQUF3QjtDQU16RTtBQU5ELHVDQU1DIn0=
@@ -0,0 +1,14 @@
1
+ export type QuoteExtraFieldDefinition = {
2
+ key: string;
3
+ label: string;
4
+ type: "text" | "textarea" | "number" | "boolean" | "select";
5
+ required: boolean;
6
+ options?: string[];
7
+ };
8
+ export type QuoteRequestConfig = {
9
+ enabled: boolean;
10
+ emailEnabled: boolean;
11
+ adminEmails: string[];
12
+ extraFields: QuoteExtraFieldDefinition[];
13
+ };
14
+ export declare function loadQuoteRequestConfig(env?: NodeJS.ProcessEnv): QuoteRequestConfig;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadQuoteRequestConfig = loadQuoteRequestConfig;
4
+ function loadQuoteRequestConfig(env = process.env) {
5
+ return {
6
+ enabled: env.QUOTE_REQUESTS_ENABLED !== "false",
7
+ emailEnabled: env.QUOTE_EMAIL_ENABLED !== "false",
8
+ adminEmails: splitEmails(env.QUOTE_ADMIN_EMAILS || env.QUOTE_ADMIN_EMAIL || ""),
9
+ extraFields: parseExtraFields(env.QUOTE_EXTRA_FIELDS_JSON),
10
+ };
11
+ }
12
+ function splitEmails(value) {
13
+ return [...new Set(value.split(/[;,]/).map((email) => email.trim()).filter(Boolean))];
14
+ }
15
+ function parseExtraFields(raw) {
16
+ if (!raw?.trim())
17
+ return [];
18
+ try {
19
+ const parsed = JSON.parse(raw);
20
+ if (!Array.isArray(parsed))
21
+ return [];
22
+ return parsed.flatMap((value) => {
23
+ if (!value || typeof value !== "object" || Array.isArray(value))
24
+ return [];
25
+ const row = value;
26
+ const key = text(row.key);
27
+ const label = text(row.label) || key;
28
+ const type = text(row.type);
29
+ if (!key || !/^[a-zA-Z0-9_.-]{1,80}$/.test(key))
30
+ return [];
31
+ if (!["text", "textarea", "number", "boolean", "select"].includes(type))
32
+ return [];
33
+ const options = Array.isArray(row.options)
34
+ ? row.options.map(text).filter(Boolean).slice(0, 100)
35
+ : undefined;
36
+ return [{
37
+ key,
38
+ label: label.slice(0, 160),
39
+ type: type,
40
+ required: row.required === true,
41
+ ...(options?.length ? { options } : {}),
42
+ }];
43
+ }).slice(0, 50);
44
+ }
45
+ catch {
46
+ return [];
47
+ }
48
+ }
49
+ function text(value) {
50
+ return typeof value === "string" ? value.trim() : "";
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcXVvdGUtcmVxdWVzdC9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSx3REFTQztBQVRELFNBQWdCLHNCQUFzQixDQUNwQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUVwQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsS0FBSyxPQUFPO1FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsbUJBQW1CLEtBQUssT0FBTztRQUNqRCxXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQy9FLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUM7S0FDM0QsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3ZGLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQXVCO0lBQy9DLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDM0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQStCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDMUUsTUFBTSxHQUFHLEdBQUcsS0FBZ0MsQ0FBQTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFBO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDMUQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDbEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ2IsT0FBTyxDQUFDO29CQUNOLEdBQUc7b0JBQ0gsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztvQkFDMUIsSUFBSSxFQUFFLElBQXlDO29CQUMvQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJO29CQUMvQixHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUN4QyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsS0FBYztJQUMxQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDdEQsQ0FBQyJ9
@@ -0,0 +1,17 @@
1
+ type QuoteLike = Record<string, any>;
2
+ export declare function quoteRequestCreatedEmail(quote: QuoteLike, brand?: string): {
3
+ subject: string;
4
+ text: string;
5
+ html: string;
6
+ };
7
+ export declare function quoteRequestAdminEmail(quote: QuoteLike, brand?: string): {
8
+ subject: string;
9
+ text: string;
10
+ html: string;
11
+ };
12
+ export declare function quoteRequestStatusEmail(quote: QuoteLike, brand?: string): {
13
+ subject: string;
14
+ text: string;
15
+ html: string;
16
+ };
17
+ export {};
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quoteRequestCreatedEmail = quoteRequestCreatedEmail;
4
+ exports.quoteRequestAdminEmail = quoteRequestAdminEmail;
5
+ exports.quoteRequestStatusEmail = quoteRequestStatusEmail;
6
+ function quoteRequestCreatedEmail(quote, brand = "HSZRDM Commerce") {
7
+ const company = text(quote.company_name);
8
+ const contact = text(quote.contact_name);
9
+ const itemCount = Array.isArray(quote.items)
10
+ ? quote.items.reduce((sum, item) => sum + Math.max(0, Number(item?.quantity) || 0), 0)
11
+ : 0;
12
+ const subject = `Ajánlatkérésed megérkezett – ${brand}`;
13
+ const body = [
14
+ `Kedves ${contact || "Érdeklődő"}!`,
15
+ "",
16
+ "Megkaptuk az ajánlatkérésedet, hamarosan feldolgozzuk.",
17
+ company ? `Cég: ${company}` : "",
18
+ `Tételek összes mennyisége: ${itemCount}`,
19
+ `Azonosító: ${text(quote.id)}`,
20
+ "",
21
+ brand,
22
+ ].filter(Boolean).join("\n");
23
+ return { subject, text: body, html: simpleHtml(body) };
24
+ }
25
+ function quoteRequestAdminEmail(quote, brand = "HSZRDM Commerce") {
26
+ const subject = `Új ajánlatkérés – ${text(quote.company_name) || text(quote.contact_name) || text(quote.id)}`;
27
+ const body = [
28
+ `Új ajánlatkérés érkezett a ${brand} rendszerbe.`,
29
+ "",
30
+ `Azonosító: ${text(quote.id)}`,
31
+ `Cég: ${text(quote.company_name) || "—"}`,
32
+ `Kapcsolattartó: ${text(quote.contact_name) || "—"}`,
33
+ `E-mail: ${text(quote.contact_email) || "—"}`,
34
+ `Telefon: ${text(quote.contact_phone) || "—"}`,
35
+ `Rendelés típusa: ${text(quote.order_type) || "—"}`,
36
+ `Gyakoriság: ${text(quote.recurrence) || "—"}`,
37
+ "",
38
+ ...quoteLines(quote, false),
39
+ ].join("\n");
40
+ return { subject, text: body, html: simpleHtml(body) };
41
+ }
42
+ function quoteRequestStatusEmail(quote, brand = "HSZRDM Commerce") {
43
+ const labels = {
44
+ reviewing: "feldolgozás alatt",
45
+ quoted: "elkészült az ajánlat",
46
+ accepted: "elfogadva",
47
+ rejected: "elutasítva",
48
+ draft_order: "rendelés-előkészítés alatt",
49
+ ordered: "rendeléssé alakítva",
50
+ closed: "lezárva",
51
+ };
52
+ const status = text(quote.status);
53
+ const label = labels[status] || status;
54
+ const showPricing = status === "quoted" || status === "accepted";
55
+ const subject = status === "quoted"
56
+ ? `Elkészült az ajánlatod – ${brand}`
57
+ : `Ajánlatkérés frissítés – ${brand}`;
58
+ const body = [
59
+ `Kedves ${text(quote.contact_name) || "Érdeklődő"}!`,
60
+ "",
61
+ `Az ajánlatkérésed státusza megváltozott: ${label}.`,
62
+ `Azonosító: ${text(quote.id)}`,
63
+ ...(showPricing ? ["", ...quoteLines(quote, true)] : []),
64
+ "",
65
+ brand,
66
+ ].join("\n");
67
+ return { subject, text: body, html: simpleHtml(body) };
68
+ }
69
+ function quoteLines(quote, showPricing) {
70
+ const items = Array.isArray(quote.items) ? quote.items : [];
71
+ if (!items.length)
72
+ return ["Tételek: —"];
73
+ const currency = text(quote.currency_code).toUpperCase() || "HUF";
74
+ let total = 0;
75
+ let hasCompletePricing = true;
76
+ const lines = items.map((item, index) => {
77
+ const title = text(item.title) || `Tétel ${index + 1}`;
78
+ const quantity = positiveNumber(item.quantity) || 1;
79
+ const unitPrice = finiteNumber(item.unit_price);
80
+ if (unitPrice == null)
81
+ hasCompletePricing = false;
82
+ else
83
+ total += unitPrice * quantity;
84
+ if (!showPricing || unitPrice == null) {
85
+ return `• ${title} × ${quantity}`;
86
+ }
87
+ return `• ${title} × ${quantity} – ${formatAmount(unitPrice, currency)} / egység`;
88
+ });
89
+ if (showPricing && hasCompletePricing) {
90
+ lines.push(`Összesen: ${formatAmount(total, currency)}`);
91
+ }
92
+ return lines;
93
+ }
94
+ function formatAmount(value, currency) {
95
+ try {
96
+ return new Intl.NumberFormat("hu-HU", {
97
+ style: "currency",
98
+ currency,
99
+ maximumFractionDigits: currency === "HUF" ? 0 : 2,
100
+ }).format(value);
101
+ }
102
+ catch {
103
+ return `${value} ${currency}`;
104
+ }
105
+ }
106
+ function simpleHtml(value) {
107
+ return `<div style="font-family:Arial,sans-serif;white-space:pre-line">${escapeHtml(value)}</div>`;
108
+ }
109
+ function escapeHtml(value) {
110
+ return value.replace(/[&<>"']/g, (char) => ({
111
+ "&": "&amp;",
112
+ "<": "&lt;",
113
+ ">": "&gt;",
114
+ '"': "&quot;",
115
+ "'": "&#39;",
116
+ })[char] || char);
117
+ }
118
+ function finiteNumber(value) {
119
+ const number = typeof value === "number"
120
+ ? value
121
+ : typeof value === "string" && value.trim()
122
+ ? Number(value)
123
+ : Number.NaN;
124
+ return Number.isFinite(number) && number >= 0 ? number : null;
125
+ }
126
+ function positiveNumber(value) {
127
+ const number = finiteNumber(value);
128
+ return number != null && number > 0 ? number : null;
129
+ }
130
+ function text(value) {
131
+ return typeof value === "string" ? value.trim() : "";
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L2VtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsNERBd0JDO0FBRUQsd0RBcUJDO0FBRUQsMERBOEJDO0FBL0VELFNBQWdCLHdCQUF3QixDQUN0QyxLQUFnQixFQUNoQixLQUFLLEdBQUcsaUJBQWlCO0lBRXpCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNoQixDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxRSxDQUFDLENBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ0wsTUFBTSxPQUFPLEdBQUcsZ0NBQWdDLEtBQUssRUFBRSxDQUFBO0lBQ3ZELE1BQU0sSUFBSSxHQUFHO1FBQ1gsVUFBVSxPQUFPLElBQUksV0FBVyxHQUFHO1FBQ25DLEVBQUU7UUFDRix3REFBd0Q7UUFDeEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2hDLDhCQUE4QixTQUFTLEVBQUU7UUFDekMsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQzlCLEVBQUU7UUFDRixLQUFLO0tBQ04sQ0FBQyxNQUFNLENBQUMsT0FBTyxD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
@@ -0,0 +1,8 @@
1
+ import QuoteRequestService from "./service";
2
+ export declare const QUOTE_REQUEST_MODULE = "quoteRequest";
3
+ declare const _default: any;
4
+ export default _default;
5
+ export { QuoteRequestService };
6
+ export { loadQuoteRequestConfig, type QuoteExtraFieldDefinition, type QuoteRequestConfig } from "./config";
7
+ export { quoteRequestAdminEmail, quoteRequestCreatedEmail, quoteRequestStatusEmail, } from "./email";
8
+ export { QUOTE_REQUEST_STATUSES, QUOTE_ORDER_TYPES } from "./models/quote-request";
@@ -0,0 +1,23 @@
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
+ exports.QUOTE_ORDER_TYPES = exports.QUOTE_REQUEST_STATUSES = exports.quoteRequestStatusEmail = exports.quoteRequestCreatedEmail = exports.quoteRequestAdminEmail = exports.loadQuoteRequestConfig = exports.QuoteRequestService = exports.QUOTE_REQUEST_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.QuoteRequestService = service_1.default;
10
+ exports.QUOTE_REQUEST_MODULE = "quoteRequest";
11
+ exports.default = (0, utils_1.Module)(exports.QUOTE_REQUEST_MODULE, {
12
+ service: service_1.default,
13
+ });
14
+ var config_1 = require("./config");
15
+ Object.defineProperty(exports, "loadQuoteRequestConfig", { enumerable: true, get: function () { return config_1.loadQuoteRequestConfig; } });
16
+ var email_1 = require("./email");
17
+ Object.defineProperty(exports, "quoteRequestAdminEmail", { enumerable: true, get: function () { return email_1.quoteRequestAdminEmail; } });
18
+ Object.defineProperty(exports, "quoteRequestCreatedEmail", { enumerable: true, get: function () { return email_1.quoteRequestCreatedEmail; } });
19
+ Object.defineProperty(exports, "quoteRequestStatusEmail", { enumerable: true, get: function () { return email_1.quoteRequestStatusEmail; } });
20
+ var quote_request_1 = require("./models/quote-request");
21
+ Object.defineProperty(exports, "QUOTE_REQUEST_STATUSES", { enumerable: true, get: function () { return quote_request_1.QUOTE_REQUEST_STATUSES; } });
22
+ Object.defineProperty(exports, "QUOTE_ORDER_TYPES", { enumerable: true, get: function () { return quote_request_1.QUOTE_ORDER_TYPES; } });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBMkM7QUFRbEMsOEJBUkYsaUJBQW1CLENBUUU7QUFOZixRQUFBLG9CQUFvQixHQUFHLGNBQWMsQ0FBQTtBQUVsRCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw0QkFBb0IsRUFBRTtJQUMxQyxPQUFPLEVBQUUsaUJBQW1CO0NBQzdCLENBQUMsQ0FBQTtBQUdGLG1DQUEwRztBQUFqRyxnSEFBQSxzQkFBc0IsT0FBQTtBQUMvQixpQ0FJZ0I7QUFIZCwrR0FBQSxzQkFBc0IsT0FBQTtBQUN0QixpSEFBQSx3QkFBd0IsT0FBQTtBQUN4QixnSEFBQSx1QkFBdUIsT0FBQTtBQUV6Qix3REFBa0Y7QUFBekUsdUhBQUEsc0JBQXNCLE9BQUE7QUFBRSxrSEFBQSxpQkFBaUIsT0FBQSJ9
@@ -0,0 +1,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20261029160000 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261029160000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20261029160000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "quote_request" ("id" text not null, "status" text check ("status" in ('new','reviewing','quoted','accepted','rejected','draft_order','ordered','closed')) not null, "company_name" text null, "tax_number" text null, "company_address" text null, "contact_name" text not null, "contact_email" text not null, "contact_phone" text null, "order_type" text check ("order_type" in ('one_time','recurring')) not null, "recurrence" text null, "note" text null, "admin_note" text null, "items" jsonb not null, "extra_fields" jsonb null, "customer_id" text null, "draft_order_id" text null, "order_id" text null, "currency_code" text null, "source" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "quote_request_pkey" primary key ("id"));`);
8
+ this.addSql(`create index if not exists "IDX_quote_request_status_created" on "quote_request" ("status", "created_at") where deleted_at is null;`);
9
+ this.addSql(`create index if not exists "IDX_quote_request_email_created" on "quote_request" ("contact_email", "created_at") where deleted_at is null;`);
10
+ this.addSql(`create index if not exists "IDX_quote_request_company" on "quote_request" ("company_name") where deleted_at is null;`);
11
+ this.addSql(`create index if not exists "IDX_quote_request_customer" on "quote_request" ("customer_id") where deleted_at is null;`);
12
+ this.addSql(`create index if not exists "IDX_quote_request_draft_order" on "quote_request" ("draft_order_id") where deleted_at is null;`);
13
+ this.addSql(`create index if not exists "IDX_quote_request_order" on "quote_request" ("order_id") where deleted_at is null;`);
14
+ }
15
+ async down() {
16
+ this.addSql(`drop table if exists "quote_request" cascade;`);
17
+ }
18
+ }
19
+ exports.Migration20261029160000 = Migration20261029160000;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMjkxNjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjEwMjkxNjAwMDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLDAxQkFBMDFCLENBQUMsQ0FBQTtRQUN2MkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxSUFBcUksQ0FBQyxDQUFBO1FBQ2xKLElBQUksQ0FBQyxNQUFNLENBQUMsMklBQTJJLENBQUMsQ0FBQTtRQUN4SixJQUFJLENBQUMsTUFBTSxDQUFDLHNIQUFzSCxDQUFDLENBQUE7UUFDbkksSUFBSSxDQUFDLE1BQU0sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFBO1FBQ25JLElBQUksQ0FBQyxNQUFNLENBQUMsNEhBQTRILENBQUMsQ0FBQTtRQUN6SSxJQUFJLENBQUMsTUFBTSxDQUFDLGdIQUFnSCxDQUFDLENBQUE7SUFDL0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRjtBQWRELDBEQWNDIn0=