@infuro/cms-core 1.0.61 → 1.0.63

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 (50) hide show
  1. package/dist/admin.cjs +3624 -2642
  2. package/dist/admin.js +2415 -1433
  3. package/dist/api.cjs +41 -37
  4. package/dist/api.js +9 -5
  5. package/dist/chunk-3VZAAQUV.js +106 -0
  6. package/dist/{chunk-UHT4INVW.js → chunk-77YWLP4X.js} +625 -252
  7. package/dist/{chunk-BXYZDMTZ.cjs → chunk-7L556RGL.cjs} +3 -94
  8. package/dist/{chunk-T3HPSF7K.js → chunk-AYWDQFJZ.js} +3 -0
  9. package/dist/{chunk-URN7GS23.js → chunk-BWOITUNI.js} +203 -1062
  10. package/dist/{chunk-CNAHVRRU.cjs → chunk-CJEOH6QC.cjs} +676 -312
  11. package/dist/{chunk-O2642WVS.js → chunk-DTUL3Q5L.js} +17 -3
  12. package/dist/{chunk-YSYX4GUD.cjs → chunk-EWXG4E74.cjs} +213 -1082
  13. package/dist/chunk-GWDI752Q.js +83 -0
  14. package/dist/chunk-H3IVLIPR.cjs +86 -0
  15. package/dist/chunk-JLDHK2QE.cjs +109 -0
  16. package/dist/chunk-KAOHOHCA.js +901 -0
  17. package/dist/{chunk-2KUCQVAQ.js → chunk-MWEK7N3F.js} +2 -91
  18. package/dist/{chunk-V25RDUOU.cjs → chunk-MXABMVF7.cjs} +38 -4
  19. package/dist/chunk-OVTOP42W.js +199 -0
  20. package/dist/{chunk-73WVHINE.cjs → chunk-RHYVNRYG.cjs} +18 -4
  21. package/dist/{chunk-L3525VXI.js → chunk-RXTUSF3R.js} +36 -2
  22. package/dist/{chunk-77I3KS7V.cjs → chunk-UEE4PTTB.cjs} +3 -0
  23. package/dist/chunk-WFMVD567.cjs +209 -0
  24. package/dist/chunk-YVP4NQII.cjs +914 -0
  25. package/dist/{email-queue-6NJY6HNM.cjs → email-queue-VTYL2KFA.cjs} +7 -6
  26. package/dist/{email-queue-OI2HSCGE.js → email-queue-YPRSVG56.js} +3 -2
  27. package/dist/email-service-ATCPJFWG.cjs +28 -0
  28. package/dist/email-service-DPKVQOKP.js +3 -0
  29. package/dist/{emit-order-notification-trigger-TNEZOYEE.cjs → emit-order-notification-trigger-WI4HGMKH.cjs} +4 -4
  30. package/dist/{emit-order-notification-trigger-CZU3V2WE.js → emit-order-notification-trigger-XVG2B5ZF.js} +2 -2
  31. package/dist/{erp-order-invoice-3GXDE443.js → erp-order-invoice-3UGWLICU.js} +2 -1
  32. package/dist/{erp-order-invoice-EYYNR526.cjs → erp-order-invoice-KJYJNWMG.cjs} +6 -5
  33. package/dist/index.cjs +366 -316
  34. package/dist/index.d.cts +61 -21
  35. package/dist/index.d.ts +61 -21
  36. package/dist/index.js +79 -29
  37. package/dist/migrations/1783000000000-AddOrderPendingProcessingCompletedTriggers.ts +56 -0
  38. package/dist/migrations/1783100000000-AddSmsToOrderNotificationBindingsChannelEnum.ts +17 -0
  39. package/dist/migrations/1783200000000-AddOrderAssigneeColumns.ts +30 -0
  40. package/dist/order-assignees-handlers-LKMAGLG6.js +150 -0
  41. package/dist/order-assignees-handlers-NPKD64P6.cjs +152 -0
  42. package/dist/order-completion-otp-handlers-IMMQGHDR.cjs +363 -0
  43. package/dist/order-completion-otp-handlers-WGM7HWG4.js +361 -0
  44. package/dist/order-notification-dispatcher-5TUFCDU7.cjs +35 -0
  45. package/dist/order-notification-dispatcher-JKFQJYGG.js +10 -0
  46. package/dist/sms-notification-templates-handlers-SJLO7JGZ.js +47 -0
  47. package/dist/sms-notification-templates-handlers-YSB3L2PK.cjs +49 -0
  48. package/package.json +1 -1
  49. package/dist/order-notification-dispatcher-KJVGLK5E.cjs +0 -24
  50. package/dist/order-notification-dispatcher-ZSFKEYMP.js +0 -7
@@ -0,0 +1,83 @@
1
+ import { __name } from './chunk-SHUYVCID.js';
2
+
3
+ // src/plugins/whatsapp/whatsapp-queue.ts
4
+ var WHATSAPP_QUEUE_NAME = "whatsapp";
5
+ function maskPhone(raw) {
6
+ const digits = raw.replace(/\D/g, "");
7
+ if (digits.length <= 4) return "****";
8
+ return `${"*".repeat(Math.max(0, digits.length - 4))}${digits.slice(-4)}`;
9
+ }
10
+ __name(maskPhone, "maskPhone");
11
+ function registerWhatsAppQueueProcessor(cms) {
12
+ const queue = cms.getPlugin("queue");
13
+ const whatsapp = cms.getPlugin("whatsapp");
14
+ if (!queue) {
15
+ console.warn("[whatsapp] queue processor not registered: queue plugin missing");
16
+ return;
17
+ }
18
+ if (!whatsapp || typeof whatsapp.send !== "function") {
19
+ console.warn("[whatsapp] queue processor not registered: whatsapp plugin missing or not configured");
20
+ return;
21
+ }
22
+ queue.registerProcessor(WHATSAPP_QUEUE_NAME, async (data) => {
23
+ const payload = data;
24
+ if (!payload.to) {
25
+ console.warn("[whatsapp] queue job skipped: missing recipient");
26
+ return;
27
+ }
28
+ console.log("[whatsapp] queue job processing", {
29
+ to: maskPhone(payload.to),
30
+ templateKey: payload.templateKey ?? null,
31
+ externalTemplateRef: payload.externalTemplateRef ?? null
32
+ });
33
+ try {
34
+ const ok = await whatsapp.send(payload);
35
+ if (ok) {
36
+ console.log("[whatsapp] queue job completed", {
37
+ to: maskPhone(payload.to),
38
+ sent: true
39
+ });
40
+ } else {
41
+ console.warn("[whatsapp] queue job completed without delivery", {
42
+ to: maskPhone(payload.to),
43
+ sent: false
44
+ });
45
+ }
46
+ } catch (err) {
47
+ console.error("[whatsapp] queue job failed", {
48
+ to: maskPhone(payload.to),
49
+ error: err instanceof Error ? err.message : String(err)
50
+ });
51
+ }
52
+ });
53
+ console.log("[whatsapp] queue processor registered", {
54
+ queue: WHATSAPP_QUEUE_NAME
55
+ });
56
+ }
57
+ __name(registerWhatsAppQueueProcessor, "registerWhatsAppQueueProcessor");
58
+ async function queueWhatsApp(cms, payload) {
59
+ const queue = cms.getPlugin("queue");
60
+ if (queue) {
61
+ console.log("[whatsapp] enqueue", {
62
+ to: maskPhone(payload.to),
63
+ templateKey: payload.templateKey ?? null,
64
+ externalTemplateRef: payload.externalTemplateRef ?? null
65
+ });
66
+ await queue.add(WHATSAPP_QUEUE_NAME, payload);
67
+ return true;
68
+ }
69
+ const whatsapp = cms.getPlugin("whatsapp");
70
+ if (whatsapp && typeof whatsapp.send === "function") {
71
+ console.log("[whatsapp] no queue plugin \u2014 sending immediately", {
72
+ to: maskPhone(payload.to)
73
+ });
74
+ return whatsapp.send(payload);
75
+ }
76
+ console.warn("[whatsapp] send skipped: neither queue nor whatsapp plugin available", {
77
+ to: maskPhone(payload.to)
78
+ });
79
+ return false;
80
+ }
81
+ __name(queueWhatsApp, "queueWhatsApp");
82
+
83
+ export { queueWhatsApp, registerWhatsAppQueueProcessor };
@@ -0,0 +1,86 @@
1
+ 'use strict';
2
+
3
+ var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
4
+
5
+ // src/plugins/whatsapp/whatsapp-queue.ts
6
+ var WHATSAPP_QUEUE_NAME = "whatsapp";
7
+ function maskPhone(raw) {
8
+ const digits = raw.replace(/\D/g, "");
9
+ if (digits.length <= 4) return "****";
10
+ return `${"*".repeat(Math.max(0, digits.length - 4))}${digits.slice(-4)}`;
11
+ }
12
+ chunkUSNT2KNT_cjs.__name(maskPhone, "maskPhone");
13
+ function registerWhatsAppQueueProcessor(cms) {
14
+ const queue = cms.getPlugin("queue");
15
+ const whatsapp = cms.getPlugin("whatsapp");
16
+ if (!queue) {
17
+ console.warn("[whatsapp] queue processor not registered: queue plugin missing");
18
+ return;
19
+ }
20
+ if (!whatsapp || typeof whatsapp.send !== "function") {
21
+ console.warn("[whatsapp] queue processor not registered: whatsapp plugin missing or not configured");
22
+ return;
23
+ }
24
+ queue.registerProcessor(WHATSAPP_QUEUE_NAME, async (data) => {
25
+ const payload = data;
26
+ if (!payload.to) {
27
+ console.warn("[whatsapp] queue job skipped: missing recipient");
28
+ return;
29
+ }
30
+ console.log("[whatsapp] queue job processing", {
31
+ to: maskPhone(payload.to),
32
+ templateKey: payload.templateKey ?? null,
33
+ externalTemplateRef: payload.externalTemplateRef ?? null
34
+ });
35
+ try {
36
+ const ok = await whatsapp.send(payload);
37
+ if (ok) {
38
+ console.log("[whatsapp] queue job completed", {
39
+ to: maskPhone(payload.to),
40
+ sent: true
41
+ });
42
+ } else {
43
+ console.warn("[whatsapp] queue job completed without delivery", {
44
+ to: maskPhone(payload.to),
45
+ sent: false
46
+ });
47
+ }
48
+ } catch (err) {
49
+ console.error("[whatsapp] queue job failed", {
50
+ to: maskPhone(payload.to),
51
+ error: err instanceof Error ? err.message : String(err)
52
+ });
53
+ }
54
+ });
55
+ console.log("[whatsapp] queue processor registered", {
56
+ queue: WHATSAPP_QUEUE_NAME
57
+ });
58
+ }
59
+ chunkUSNT2KNT_cjs.__name(registerWhatsAppQueueProcessor, "registerWhatsAppQueueProcessor");
60
+ async function queueWhatsApp(cms, payload) {
61
+ const queue = cms.getPlugin("queue");
62
+ if (queue) {
63
+ console.log("[whatsapp] enqueue", {
64
+ to: maskPhone(payload.to),
65
+ templateKey: payload.templateKey ?? null,
66
+ externalTemplateRef: payload.externalTemplateRef ?? null
67
+ });
68
+ await queue.add(WHATSAPP_QUEUE_NAME, payload);
69
+ return true;
70
+ }
71
+ const whatsapp = cms.getPlugin("whatsapp");
72
+ if (whatsapp && typeof whatsapp.send === "function") {
73
+ console.log("[whatsapp] no queue plugin \u2014 sending immediately", {
74
+ to: maskPhone(payload.to)
75
+ });
76
+ return whatsapp.send(payload);
77
+ }
78
+ console.warn("[whatsapp] send skipped: neither queue nor whatsapp plugin available", {
79
+ to: maskPhone(payload.to)
80
+ });
81
+ return false;
82
+ }
83
+ chunkUSNT2KNT_cjs.__name(queueWhatsApp, "queueWhatsApp");
84
+
85
+ exports.queueWhatsApp = queueWhatsApp;
86
+ exports.registerWhatsAppQueueProcessor = registerWhatsAppQueueProcessor;
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
4
+
5
+ // src/plugins/email/templates/types.ts
6
+ function normalizeSocialLinkItem(o) {
7
+ const url = String(o.url ?? "").trim();
8
+ if (!url) return null;
9
+ let iconUrl = String(o.iconUrl ?? o.icon_image ?? "").trim();
10
+ let icon = String(o.icon ?? "").trim();
11
+ if (!iconUrl && /^https?:\/\//i.test(icon)) {
12
+ iconUrl = icon;
13
+ icon = "";
14
+ }
15
+ const item = {
16
+ url
17
+ };
18
+ if (iconUrl) item.iconUrl = iconUrl;
19
+ if (icon) item.icon = icon;
20
+ return item;
21
+ }
22
+ chunkUSNT2KNT_cjs.__name(normalizeSocialLinkItem, "normalizeSocialLinkItem");
23
+ function parseSocialLinksJson(raw) {
24
+ if (raw == null || raw.trim() === "") return void 0;
25
+ try {
26
+ const parsed = JSON.parse(raw);
27
+ if (!Array.isArray(parsed)) return void 0;
28
+ const out = [];
29
+ for (const item of parsed) {
30
+ if (item && typeof item === "object" && "url" in item) {
31
+ const n = normalizeSocialLinkItem(item);
32
+ if (n) out.push(n);
33
+ }
34
+ }
35
+ return out.length ? out : void 0;
36
+ } catch {
37
+ return void 0;
38
+ }
39
+ }
40
+ chunkUSNT2KNT_cjs.__name(parseSocialLinksJson, "parseSocialLinksJson");
41
+ function absolutizeEmailAssetUrl(url) {
42
+ const t = url?.trim();
43
+ if (!t) return void 0;
44
+ if (/^(https?:|cid:|data:)/i.test(t)) return t;
45
+ const base = (process.env.NEXTAUTH_URL || process.env.NEXT_PUBLIC_APP_URL || process.env.APP_URL || "").trim().replace(/\/$/, "");
46
+ if (!base) return t;
47
+ return `${base}${t.startsWith("/") ? t : `/${t}`}`;
48
+ }
49
+ chunkUSNT2KNT_cjs.__name(absolutizeEmailAssetUrl, "absolutizeEmailAssetUrl");
50
+ function mergeEmailLayoutCompanyDetails(branding, emailSettings, storeSettings) {
51
+ const fromBranding = getCompanyDetailsFromSettings(branding);
52
+ const pick = /* @__PURE__ */ chunkUSNT2KNT_cjs.__name((emailVal, fallback) => {
53
+ const t = emailVal?.trim();
54
+ return t || fallback?.trim() || void 0;
55
+ }, "pick");
56
+ const storeLogo = storeSettings?.invoiceLogoUrl || storeSettings?.companyLogo || storeSettings?.logo || "";
57
+ const storeName = storeSettings?.companyName || storeSettings?.storeName || "";
58
+ const storeEmail = storeSettings?.companyEmail || "";
59
+ const storePhone = storeSettings?.companyPhone || "";
60
+ const logoUrl = absolutizeEmailAssetUrl(pick(emailSettings.logoUrl ?? emailSettings.emailLogoUrl, fromBranding.logoUrl || storeLogo));
61
+ const companyName = pick(emailSettings.companyName ?? emailSettings.emailCompanyName, fromBranding.companyName || storeName);
62
+ const supportEmail = pick(emailSettings.supportEmail ?? emailSettings.emailSupportEmail, fromBranding.supportEmail || storeEmail);
63
+ const supportPhone = pick(emailSettings.supportPhone, storePhone || void 0);
64
+ const footerDisclaimer = pick(emailSettings.footerDisclaimer, void 0);
65
+ const followUsTitle = pick(emailSettings.followUsTitle, "Follow Us") || "Follow Us";
66
+ const socialFromEmail = parseSocialLinksJson(emailSettings.socialLinks);
67
+ const socialLinks = socialFromEmail?.length ? socialFromEmail : fromBranding.socialLinks;
68
+ return {
69
+ logoUrl,
70
+ companyName,
71
+ supportEmail,
72
+ supportPhone,
73
+ socialLinks,
74
+ footerDisclaimer,
75
+ followUsTitle
76
+ };
77
+ }
78
+ chunkUSNT2KNT_cjs.__name(mergeEmailLayoutCompanyDetails, "mergeEmailLayoutCompanyDetails");
79
+ function getCompanyDetailsFromSettings(settingsGroup) {
80
+ const logoUrl = settingsGroup.logo ?? settingsGroup.logoUrl ?? "";
81
+ const companyName = settingsGroup.companyName ?? settingsGroup.company_name ?? "";
82
+ const supportEmail = settingsGroup.supportEmail ?? settingsGroup.support_email ?? "";
83
+ let socialLinks = [];
84
+ const raw = settingsGroup.socialLinks ?? settingsGroup.social_links;
85
+ if (typeof raw === "string") {
86
+ try {
87
+ const arr = JSON.parse(raw);
88
+ if (Array.isArray(arr)) {
89
+ for (const item of arr) {
90
+ if (item && typeof item === "object") {
91
+ const n = normalizeSocialLinkItem(item);
92
+ if (n) socialLinks.push(n);
93
+ }
94
+ }
95
+ }
96
+ } catch {
97
+ }
98
+ }
99
+ return {
100
+ logoUrl: logoUrl || void 0,
101
+ companyName: companyName || void 0,
102
+ supportEmail: supportEmail || void 0,
103
+ socialLinks: socialLinks.length ? socialLinks : void 0
104
+ };
105
+ }
106
+ chunkUSNT2KNT_cjs.__name(getCompanyDetailsFromSettings, "getCompanyDetailsFromSettings");
107
+
108
+ exports.getCompanyDetailsFromSettings = getCompanyDetailsFromSettings;
109
+ exports.mergeEmailLayoutCompanyDetails = mergeEmailLayoutCompanyDetails;