@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.
- package/dist/admin.cjs +3624 -2642
- package/dist/admin.js +2415 -1433
- package/dist/api.cjs +41 -37
- package/dist/api.js +9 -5
- package/dist/chunk-3VZAAQUV.js +106 -0
- package/dist/{chunk-UHT4INVW.js → chunk-77YWLP4X.js} +625 -252
- package/dist/{chunk-BXYZDMTZ.cjs → chunk-7L556RGL.cjs} +3 -94
- package/dist/{chunk-T3HPSF7K.js → chunk-AYWDQFJZ.js} +3 -0
- package/dist/{chunk-URN7GS23.js → chunk-BWOITUNI.js} +203 -1062
- package/dist/{chunk-CNAHVRRU.cjs → chunk-CJEOH6QC.cjs} +676 -312
- package/dist/{chunk-O2642WVS.js → chunk-DTUL3Q5L.js} +17 -3
- package/dist/{chunk-YSYX4GUD.cjs → chunk-EWXG4E74.cjs} +213 -1082
- package/dist/chunk-GWDI752Q.js +83 -0
- package/dist/chunk-H3IVLIPR.cjs +86 -0
- package/dist/chunk-JLDHK2QE.cjs +109 -0
- package/dist/chunk-KAOHOHCA.js +901 -0
- package/dist/{chunk-2KUCQVAQ.js → chunk-MWEK7N3F.js} +2 -91
- package/dist/{chunk-V25RDUOU.cjs → chunk-MXABMVF7.cjs} +38 -4
- package/dist/chunk-OVTOP42W.js +199 -0
- package/dist/{chunk-73WVHINE.cjs → chunk-RHYVNRYG.cjs} +18 -4
- package/dist/{chunk-L3525VXI.js → chunk-RXTUSF3R.js} +36 -2
- package/dist/{chunk-77I3KS7V.cjs → chunk-UEE4PTTB.cjs} +3 -0
- package/dist/chunk-WFMVD567.cjs +209 -0
- package/dist/chunk-YVP4NQII.cjs +914 -0
- package/dist/{email-queue-6NJY6HNM.cjs → email-queue-VTYL2KFA.cjs} +7 -6
- package/dist/{email-queue-OI2HSCGE.js → email-queue-YPRSVG56.js} +3 -2
- package/dist/email-service-ATCPJFWG.cjs +28 -0
- package/dist/email-service-DPKVQOKP.js +3 -0
- package/dist/{emit-order-notification-trigger-TNEZOYEE.cjs → emit-order-notification-trigger-WI4HGMKH.cjs} +4 -4
- package/dist/{emit-order-notification-trigger-CZU3V2WE.js → emit-order-notification-trigger-XVG2B5ZF.js} +2 -2
- package/dist/{erp-order-invoice-3GXDE443.js → erp-order-invoice-3UGWLICU.js} +2 -1
- package/dist/{erp-order-invoice-EYYNR526.cjs → erp-order-invoice-KJYJNWMG.cjs} +6 -5
- package/dist/index.cjs +366 -316
- package/dist/index.d.cts +61 -21
- package/dist/index.d.ts +61 -21
- package/dist/index.js +79 -29
- package/dist/migrations/1783000000000-AddOrderPendingProcessingCompletedTriggers.ts +56 -0
- package/dist/migrations/1783100000000-AddSmsToOrderNotificationBindingsChannelEnum.ts +17 -0
- package/dist/migrations/1783200000000-AddOrderAssigneeColumns.ts +30 -0
- package/dist/order-assignees-handlers-LKMAGLG6.js +150 -0
- package/dist/order-assignees-handlers-NPKD64P6.cjs +152 -0
- package/dist/order-completion-otp-handlers-IMMQGHDR.cjs +363 -0
- package/dist/order-completion-otp-handlers-WGM7HWG4.js +361 -0
- package/dist/order-notification-dispatcher-5TUFCDU7.cjs +35 -0
- package/dist/order-notification-dispatcher-JKFQJYGG.js +10 -0
- package/dist/sms-notification-templates-handlers-SJLO7JGZ.js +47 -0
- package/dist/sms-notification-templates-handlers-YSB3L2PK.cjs +49 -0
- package/package.json +1 -1
- package/dist/order-notification-dispatcher-KJVGLK5E.cjs +0 -24
- 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;
|