@dev.smartpricing/message-composer-utils 4.2.13-ux.0 → 4.2.14-stage-fix.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 (48) hide show
  1. package/dist/utils/templates/email.js +22 -1
  2. package/dist/utils/templates/email.js.map +1 -1
  3. package/dist/utils/templates/email.test.js +74 -0
  4. package/dist/utils/templates/email.test.js.map +1 -0
  5. package/dist/utils/validations.js +1 -1
  6. package/dist/utils/validations.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/types/dynamic-values.ts +6 -0
  9. package/src/types/submission-job.ts +2 -1
  10. package/src/utils/templates/email.test.ts +101 -0
  11. package/src/utils/templates/email.ts +27 -1
  12. package/src/utils/validations.ts +1 -1
  13. package/dist/schemas/ai-integration.js +0 -34
  14. package/dist/schemas/ai-integration.js.map +0 -1
  15. package/dist/schemas/brand.js +0 -40
  16. package/dist/schemas/brand.js.map +0 -1
  17. package/dist/schemas/common.js +0 -34
  18. package/dist/schemas/common.js.map +0 -1
  19. package/dist/schemas/dynamic-values.js +0 -16
  20. package/dist/schemas/dynamic-values.js.map +0 -1
  21. package/dist/schemas/index.js +0 -15
  22. package/dist/schemas/index.js.map +0 -1
  23. package/dist/schemas/language.js +0 -13
  24. package/dist/schemas/language.js.map +0 -1
  25. package/dist/schemas/media.js +0 -35
  26. package/dist/schemas/media.js.map +0 -1
  27. package/dist/schemas/message-compilation.js +0 -31
  28. package/dist/schemas/message-compilation.js.map +0 -1
  29. package/dist/schemas/message-group.js +0 -70
  30. package/dist/schemas/message-group.js.map +0 -1
  31. package/dist/schemas/message.js +0 -33
  32. package/dist/schemas/message.js.map +0 -1
  33. package/dist/schemas/meta-integration.js +0 -42
  34. package/dist/schemas/meta-integration.js.map +0 -1
  35. package/dist/schemas/onboarding.js +0 -42
  36. package/dist/schemas/onboarding.js.map +0 -1
  37. package/dist/schemas/organization.js +0 -7
  38. package/dist/schemas/organization.js.map +0 -1
  39. package/dist/schemas/property.js +0 -8
  40. package/dist/schemas/property.js.map +0 -1
  41. package/dist/schemas/tracking.js +0 -6
  42. package/dist/schemas/tracking.js.map +0 -1
  43. package/dist/types/api/apiTemplates.js +0 -2
  44. package/dist/types/api/apiTemplates.js.map +0 -1
  45. package/dist/types/template.js +0 -2
  46. package/dist/types/template.js.map +0 -1
  47. package/dist/utils/templates/email-maizzle.js +0 -433
  48. package/dist/utils/templates/email-maizzle.js.map +0 -1
@@ -1,433 +0,0 @@
1
- import { SOCIAL_ICONS, SOCIAL_PLATFORMS } from "../../types/index.js";
2
- import { generateHTML } from "@tiptap/html";
3
- import { getTipTapExtensions, sanitizeContent } from "./tiptap.js";
4
- import { generateHtml } from "./messages.js";
5
- // Default internal horizontal padding for text blocks (heading, paragraph, footer, unsubscribe_link)
6
- const TEXT_HORIZONTAL_PADDING = 25;
7
- /**
8
- * Converts TipTap JSONContent to HTML for email rendering
9
- */
10
- function generateEmailHtml(content) {
11
- if (!content)
12
- return "";
13
- const extensions = getTipTapExtensions({ preset: "email" });
14
- const html = generateHTML(sanitizeContent(content, extensions), extensions);
15
- // Preserve empty paragraphs as spacing (TipTap outputs <p></p> which collapses)
16
- return html.replace(/<p><\/p>/g, "<p><br></p>");
17
- }
18
- /**
19
- * Escapes special characters for HTML attributes
20
- */
21
- function escapeHtmlAttribute(value) {
22
- if (value === undefined || value === null) {
23
- return "";
24
- }
25
- return value
26
- .replace(/&/g, "&amp;")
27
- .replace(/</g, "&lt;")
28
- .replace(/>/g, "&gt;")
29
- .replace(/"/g, "&quot;")
30
- .replace(/'/g, "&apos;");
31
- }
32
- /**
33
- * Wraps HTML content in v-pre to prevent Vue from parsing {{ }} placeholders.
34
- * Used for TipTap-generated HTML that may contain {{param}} template variables.
35
- */
36
- function _wrapVPre(html) {
37
- return `<div v-pre>${html}</div>`;
38
- }
39
- /**
40
- * Build a bg class from a color, treating #FFFFFF00 as transparent (no class).
41
- */
42
- function bgClass(color) {
43
- if (!color || color === "#FFFFFF00" || color === "transparent")
44
- return "";
45
- return ` bg-[${color}]`;
46
- }
47
- /**
48
- * Translates a spacer block to Maizzle
49
- */
50
- function translateSpacerBlock(block, settings) {
51
- const hPad = settings.horizontalSpacing ?? 0;
52
- return `<Spacer class="h-[${block.settings.height}px] px-[${hPad}px]${bgClass(block.settings.backgroundColor)}" />`;
53
- }
54
- /**
55
- * Translates a divider block to Maizzle.
56
- * Maizzle's <Hr> is a <div role="separator"> styled with bg-* for color.
57
- * For dotted/dashed styles we use a raw div with border-top.
58
- */
59
- function translateDividerBlock(block, settings) {
60
- const hPad = settings.horizontalSpacing ?? 0;
61
- const bg = bgClass(block.settings.backgroundColor);
62
- const color = escapeHtmlAttribute(block.settings.color);
63
- if (block.settings.style === "solid") {
64
- return `<Hr class="bg-[${color}] h-[${block.settings.thickness}px] my-0 mx-auto max-w-[${block.settings.width}%] px-[${hPad}px]${bg}" />`;
65
- }
66
- // dotted/dashed — Hr can't express border styles, use raw div
67
- return `<div role="separator" class="my-0 mx-auto max-w-[${block.settings.width}%] px-[${hPad}px]${bg}" style="border-top: ${block.settings.thickness}px ${block.settings.style} ${color};"></div>`;
68
- }
69
- /**
70
- * Translates a heading block to Maizzle.
71
- *
72
- * Uses <div> instead of Maizzle's <Text> (which renders <p>) because the inner
73
- * content contains block-level elements (<h1>–<h6>, <div>, <ul>, etc.).
74
- * Nesting block elements inside <p> is invalid HTML — browsers auto-close the
75
- * <p>, orphaning all styles (background, color, font, padding).
76
- * Maizzle's CSS pipeline (inlining, purging, shorthand) works on all elements,
77
- * not just Maizzle components, so <div> gets identical treatment.
78
- */
79
- function translateHeadingBlock(block, settings) {
80
- const html = generateEmailHtml(block.settings.content);
81
- const textColor = block.settings.textColor ?? settings.textColor ?? "#1F2937";
82
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
83
- const hPad = TEXT_HORIZONTAL_PADDING + (settings.horizontalSpacing ?? 0);
84
- return `<div class="overflow-hidden font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px] text-[${escapeHtmlAttribute(textColor)}] px-[${hPad}px]${bgClass(block.settings.backgroundColor)}" v-pre>
85
- <${block.settings.tag} style="margin: 0; font-size: ${block.settings.fontSize}px">${html}</${block.settings.tag}>
86
- </div>`;
87
- }
88
- /**
89
- * Translates a paragraph block to Maizzle
90
- * See translateHeadingBlock for why <div> is used instead of <Text>.
91
- */
92
- function translateParagraphBlock(block, settings) {
93
- const html = generateEmailHtml(block.settings.content);
94
- const textColor = block.settings.textColor ?? settings.textColor ?? "#1F2937";
95
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
96
- const hPad = TEXT_HORIZONTAL_PADDING + (settings.horizontalSpacing ?? 0);
97
- return `<div class="overflow-hidden font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px] text-[${escapeHtmlAttribute(textColor)}] px-[${hPad}px]${bgClass(block.settings.backgroundColor)}" v-pre>
98
- <${block.settings.tag} style="margin: 0; font-size: ${block.settings.fontSize}px">${html}</${block.settings.tag}>
99
- </div>`;
100
- }
101
- /**
102
- * Translates an image block to Maizzle
103
- */
104
- function translateImageBlock(block, settings) {
105
- const hPad = settings.horizontalSpacing ?? 0;
106
- const src = escapeHtmlAttribute(block.settings.src);
107
- const hrefAttr = block.settings.href
108
- ? ` href="${escapeHtmlAttribute(block.settings.href)}"`
109
- : "";
110
- return `<Img src="${src}" alt="" width="600"${hrefAttr} class="w-full px-[${hPad}px]" />`;
111
- }
112
- /**
113
- * Translates a button block to Maizzle
114
- */
115
- function translateButtonBlock(block, settings) {
116
- const text = generateHtml(block.settings.content, "email_v1");
117
- const borderRadius = block.settings.shape === "square"
118
- ? "0px"
119
- : block.settings.shape === "rounded"
120
- ? "4px"
121
- : "50px";
122
- const widthClass = block.settings.width === "full_width" ? " w-full box-border" : "";
123
- let href = block.settings.url;
124
- if (block.settings.linkType === "email" && !href.startsWith("mailto:")) {
125
- href = `mailto:${href}`;
126
- }
127
- else if (block.settings.linkType === "phone" && !href.startsWith("tel:")) {
128
- href = `tel:${href}`;
129
- }
130
- const textColor = block.settings.textColor ?? settings.button?.textColor ?? "#FFFFFF";
131
- const backgroundColor = block.settings.backgroundColor ??
132
- settings.button?.backgroundColor ??
133
- "#000000";
134
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
135
- const alignAttr = block.settings.width === "full_width" ? "center" : block.settings.alignment;
136
- const btn = `<Button href="${escapeHtmlAttribute(href)}" align="${alignAttr}" class="no-underline bg-[${escapeHtmlAttribute(backgroundColor)}] text-[${escapeHtmlAttribute(textColor)}] rounded-[${borderRadius}] font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px]${widthClass}">
137
- <span v-pre>${text}</span>
138
- </Button>`;
139
- const bg = bgClass(block.settings.backgroundBlock);
140
- if (bg) {
141
- return `<div class="${bg.trim()}">${btn}</div>`;
142
- }
143
- return btn;
144
- }
145
- /**
146
- * Translates a content block inside a grid column to Maizzle
147
- */
148
- function translateContentBlockToMaizzle(block, settings) {
149
- switch (block.type) {
150
- case "discount":
151
- return translateDiscountBlock(block, settings);
152
- case "heading":
153
- return translateHeadingBlock(block, settings);
154
- case "paragraph":
155
- return translateParagraphBlock(block, settings);
156
- case "image":
157
- return translateImageBlock(block, settings);
158
- case "button":
159
- return translateButtonBlock(block, settings);
160
- default:
161
- return "";
162
- }
163
- }
164
- /**
165
- * Extracts the "container background color" from a grid-allowed block.
166
- * Mirrors MJML's container-background-color which fills the parent column cell.
167
- */
168
- function getBlockContainerBg(block) {
169
- switch (block.type) {
170
- case "heading":
171
- case "paragraph":
172
- return block.settings.backgroundColor;
173
- case "discount":
174
- case "button":
175
- return block.settings.backgroundBlock;
176
- default:
177
- return undefined;
178
- }
179
- }
180
- /**
181
- * Translates a grid block to Maizzle (multi-column layout).
182
- * Columns stack to full-width rows on mobile via max-sm:min-w-full.
183
- * Lifts first block's container-bg to Column so it fills the full cell height.
184
- *
185
- * TODO: equal-height columns — add `table-cell` back on <Column> once we have
186
- * a mobile-safe approach (table-cell prevents stacking on small viewports).
187
- */
188
- function translateGridBlock(block, settings) {
189
- const cols = block.settings.columns;
190
- const widthClass = `w-${cols === 3 ? "1/3" : cols === 4 ? "1/4" : "1/2"}`;
191
- const columns = block.settings.columnData
192
- .map((col) => {
193
- const content = col.blocks
194
- .map((b) => translateContentBlockToMaizzle(b, settings))
195
- .join("\n ");
196
- const colBg = col.blocks.length > 0
197
- ? bgClass(getBlockContainerBg(col.blocks[0]))
198
- : "";
199
- return `
200
- <Column class="${widthClass} max-sm:min-w-full${colBg}">
201
- ${content}
202
- </Column>`;
203
- })
204
- .join("");
205
- return `<Row class="${bgClass(block.settings.backgroundColor).trim()}">
206
- ${columns}
207
- </Row>`;
208
- }
209
- /**
210
- * Translates a raw HTML block to Maizzle
211
- */
212
- function translateRawHtmlBlock(block) {
213
- return `<Raw>${block.settings.html}</Raw>`;
214
- }
215
- /**
216
- * Translates a discount block to Maizzle
217
- */
218
- function translateDiscountBlock(block, settings) {
219
- const html = generateEmailHtml(block.settings.content);
220
- const borderRadius = block.settings.style === "square"
221
- ? "0px"
222
- : block.settings.style === "rounded"
223
- ? "4px"
224
- : "50px";
225
- const widthClass = block.settings.width === "full_width" ? " w-full" : " inline-block";
226
- const textColor = block.settings.textColor ?? settings.textColor ?? "#1F2937";
227
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
228
- const hPad = settings.horizontalSpacing ?? 0;
229
- return `<div class="overflow-hidden font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px] text-[${escapeHtmlAttribute(textColor)}] text-center px-[${hPad}px]${bgClass(block.settings.backgroundBlock)}" v-pre>
230
- <${block.settings.tag} class="rounded-[${borderRadius}] bg-[${escapeHtmlAttribute(block.settings.backgroundComponent)}] px-2 py-3 ${widthClass} box-border" style="margin: 0; font-size: ${block.settings.fontSize}px;">${html}</${block.settings.tag}>
231
- </div>`;
232
- }
233
- /**
234
- * Translates a header block to Maizzle.
235
- * When a backgroundColor is set, wraps <Img> in a <div> so the bg fills the
236
- * full container width (mimics MJML's container-background-color on the section cell).
237
- */
238
- function translateHeaderBlock(block, settings) {
239
- const hPad = settings.horizontalSpacing ?? 0;
240
- const alignClass = block.settings.alignment === "center"
241
- ? " block mx-auto"
242
- : block.settings.alignment === "right"
243
- ? " block ml-auto"
244
- : "";
245
- const bg = bgClass(block.settings.backgroundColor);
246
- const img = `<Img src="${escapeHtmlAttribute(block.settings.src)}" alt="${escapeHtmlAttribute(block.settings.alt)}" width="${block.settings.width}" class="${alignClass.trim()}" />`;
247
- if (bg) {
248
- return `<div class="px-[${hPad}px]${bg}">${img}</div>`;
249
- }
250
- return `<Img src="${escapeHtmlAttribute(block.settings.src)}" alt="${escapeHtmlAttribute(block.settings.alt)}" width="${block.settings.width}" class="px-[${hPad}px]${alignClass}" />`;
251
- }
252
- /**
253
- * Translates a footer block to Maizzle
254
- */
255
- function translateFooterBlock(block, settings) {
256
- const html = generateEmailHtml(block.settings.content);
257
- const textColor = block.settings.textColor ?? settings.textColor ?? "#1F2937";
258
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
259
- const hPad = TEXT_HORIZONTAL_PADDING + (settings.horizontalSpacing ?? 0);
260
- return `<div class="overflow-hidden font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px] text-[${escapeHtmlAttribute(textColor)}] px-[${hPad}px]${bgClass(block.settings.backgroundColor)} leading-lg" v-pre>
261
- ${html}
262
- </div>`;
263
- }
264
- /**
265
- * Translates an unsubscribe link block to Maizzle
266
- * See translateHeadingBlock for why <div> is used instead of <Text>.
267
- */
268
- function translateUnsubscribeLinkBlock(block, settings) {
269
- const html = generateEmailHtml(block.settings.content);
270
- const textColor = block.settings.textColor ?? settings.textColor ?? "#1F2937";
271
- const fontFamily = block.settings.fontFamily ?? settings.fontFamily ?? "Arial";
272
- const hPad = TEXT_HORIZONTAL_PADDING + (settings.horizontalSpacing ?? 0);
273
- return `<div class="overflow-hidden font-[${escapeHtmlAttribute(fontFamily)}] text-[${block.settings.fontSize}px] text-[${escapeHtmlAttribute(textColor)}] text-${block.settings.alignment} px-[${hPad}px]${bgClass(block.settings.backgroundColor)}" v-pre>
274
- ${html}
275
- </div>`;
276
- }
277
- /**
278
- * Translates a socials block to Maizzle
279
- */
280
- function translateSocialsBlock(block, settings) {
281
- const hPad = settings.horizontalSpacing ?? 0;
282
- const enabledSocials = SOCIAL_PLATFORMS.filter((platform) => block.settings.socials[platform].enabled);
283
- const socialIconsHtml = enabledSocials
284
- .filter((platform) => {
285
- const url = block.settings.socials[platform].url;
286
- return url && url.trim() !== "";
287
- })
288
- .map((platform) => {
289
- const url = escapeHtmlAttribute(block.settings.socials[platform].url);
290
- const icon = SOCIAL_ICONS[platform];
291
- return `<a href="${url}" target="_blank" rel="noopener noreferrer" class="inline-block mx-1"><img src="${icon}" alt="${platform}" width="24" height="24" class="border-0 inline-block" /></a>`;
292
- })
293
- .join("");
294
- return `<Text class="m-0 text-center px-[${hPad}px]${bgClass(block.settings.backgroundColor)}">
295
- ${socialIconsHtml}
296
- </Text>`;
297
- }
298
- /**
299
- * Translates a top products block to Maizzle
300
- * Products are pre-fetched during compilation enrichment
301
- */
302
- function translateTopProductsBlock(block, settings) {
303
- const products = block._products;
304
- if (!products || products.length === 0)
305
- return "";
306
- const fontFamily = settings.fontFamily || "Arial";
307
- const displayProducts = products.slice(0, block.settings.maxProducts);
308
- const productCards = displayProducts
309
- .map((product) => {
310
- const parsed = parseFloat(product.price);
311
- const showPrice = product.price &&
312
- product.price !== "0" &&
313
- !isNaN(parsed) &&
314
- parsed !== 0;
315
- const priceHtml = showPrice
316
- ? `\n <Text class="text-[10px] leading-[16px] text-[#86837C] font-[${escapeHtmlAttribute(fontFamily)}]">${escapeHtmlAttribute(product.price)}</Text>`
317
- : "";
318
- return `<Row class="mb-2 bg-white rounded-xl border-2 border-[#F1F0EF]">
319
- <Column class="w-1/4 table-cell p-1 align-top">
320
- <Link href="${escapeHtmlAttribute(product.link)}">
321
- <Img src="${escapeHtmlAttribute(product.image)}" alt="${escapeHtmlAttribute(product.name)}" class="rounded w-full" />
322
- </Link>
323
- </Column>
324
- <Column class="w-3/4 table-cell px-2 py-3 align-top">
325
- <Text class="text-xs leading-[18px] font-medium text-[#292826] font-[${escapeHtmlAttribute(fontFamily)}]">${escapeHtmlAttribute(product.name)}</Text>${priceHtml}
326
- </Column>
327
- </Row>`;
328
- })
329
- .join("\n ");
330
- return `<div class="p-6 bg-[${escapeHtmlAttribute(block.settings.backgroundColor)}]">
331
- ${productCards}
332
- </div>`;
333
- }
334
- /**
335
- * Translates a block to a section fragment.
336
- * Adds vertical spacing between blocks via a Spacer when not the first block.
337
- */
338
- function translateBlockToSection(block, settings, isFirst) {
339
- const { verticalSpacing = 0 } = settings;
340
- const spacer = !isFirst && verticalSpacing > 0
341
- ? `<Spacer class="h-[${verticalSpacing}px]" />\n `
342
- : "";
343
- let content = "";
344
- switch (block.type) {
345
- case "spacer":
346
- content = translateSpacerBlock(block, settings);
347
- break;
348
- case "divider":
349
- content = translateDividerBlock(block, settings);
350
- break;
351
- case "heading":
352
- content = translateHeadingBlock(block, settings);
353
- break;
354
- case "paragraph":
355
- content = translateParagraphBlock(block, settings);
356
- break;
357
- case "image":
358
- content = translateImageBlock(block, settings);
359
- break;
360
- case "button":
361
- content = translateButtonBlock(block, settings);
362
- break;
363
- case "discount":
364
- content = translateDiscountBlock(block, settings);
365
- break;
366
- case "header":
367
- content = translateHeaderBlock(block, settings);
368
- break;
369
- case "raw_html":
370
- return `${spacer}${translateRawHtmlBlock(block)}`;
371
- case "grid":
372
- return `${spacer}${translateGridBlock(block, settings)}`;
373
- case "footer":
374
- content = translateFooterBlock(block, settings);
375
- break;
376
- case "unsubscribe_link":
377
- content = translateUnsubscribeLinkBlock(block, settings);
378
- break;
379
- case "socials":
380
- content = translateSocialsBlock(block, settings);
381
- break;
382
- case "top_products":
383
- return `${spacer}${translateTopProductsBlock(block, settings)}`;
384
- default:
385
- return "";
386
- }
387
- return `${spacer}${content}`;
388
- }
389
- /**
390
- * Translates an EmailMessage to a Maizzle Vue SFC string.
391
- *
392
- * The output is a raw Vue Single File Component string ready to be
393
- * compiled by Maizzle's render() API. User-generated content containing
394
- * {{param}} placeholders is wrapped in v-pre to prevent Vue evaluation.
395
- * Parameters are injected post-render via string replacement.
396
- *
397
- * @param message - The email message to translate
398
- * @returns Vue SFC string ready for Maizzle render()
399
- */
400
- export function translateEmailToMaizzle(message) {
401
- const { blocks, settings } = message.body;
402
- const sections = blocks
403
- .map((block, index) => translateBlockToSection(block, settings, index === 0))
404
- .join("\n ");
405
- const contentBackgroundColor = settings.contentBackgroundColor || "#FFFFFF";
406
- const backgroundColor = settings.backgroundColor || "#F3F4F6";
407
- const contentWidth = settings.contentWidth || 600;
408
- const preheader = message.metadata.preheader
409
- ? `\n <Preheader v-pre>${escapeHtmlAttribute(message.metadata.preheader)}</Preheader>`
410
- : "";
411
- const fontFamily = settings.fontFamily || "Arial";
412
- const textColor = settings.textColor || "#1F2937";
413
- return `<script setup>
414
- usePlaintext()
415
- </script>
416
-
417
- <template>
418
- <Layout body-class="font-[${escapeHtmlAttribute(fontFamily)}] text-[${escapeHtmlAttribute(textColor)}] bg-[${escapeHtmlAttribute(backgroundColor)}]">
419
- <Head>
420
- <style embed>
421
- p { margin: 0; line-height: 1.5em }
422
- h1, h2, h3, h4, h5, h6 { font-weight: normal; }
423
- .tiptap-emoji img { height: 1em !important; width: 1em !important; vertical-align: middle !important; }
424
- </style>
425
- </Head>${preheader}
426
- <Container class="max-w-[${contentWidth}px] bg-[${escapeHtmlAttribute(contentBackgroundColor)}]">
427
- ${sections}
428
- </Container>
429
- </Layout>
430
- </template>
431
- `;
432
- }
433
- //# sourceMappingURL=email-maizzle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-maizzle.js","sourceRoot":"","sources":["../../../src/utils/templates/email-maizzle.ts"],"names":[],"mappings":"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"}