@infuro/cms-core 1.0.33 → 1.0.35
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/README.md +22 -6
- package/dist/OrderTrackPage-W3J6WIG2.js +426 -0
- package/dist/OrderTrackPage-Z6FCJQYY.cjs +428 -0
- package/dist/admin.cjs +34072 -20487
- package/dist/admin.d.cts +191 -9
- package/dist/admin.d.ts +191 -9
- package/dist/admin.js +33913 -20423
- package/dist/api.cjs +123 -16508
- package/dist/api.d.cts +633 -3
- package/dist/api.d.ts +633 -3
- package/dist/api.js +14 -16519
- package/dist/auth.cjs +196 -955
- package/dist/auth.d.cts +201 -42
- package/dist/auth.d.ts +201 -42
- package/dist/auth.js +4 -888
- package/dist/chunk-2XE4X74C.js +29602 -0
- package/dist/chunk-3DZRIZOD.cjs +52 -0
- package/dist/chunk-3KPNTQBV.cjs +620 -0
- package/dist/chunk-46GKADYE.cjs +84 -0
- package/dist/chunk-4TRPKBKO.js +589 -0
- package/dist/chunk-5ELSW2UP.js +150 -0
- package/dist/chunk-6KPQWRFW.js +171 -0
- package/dist/chunk-7NMT3GBR.cjs +29 -0
- package/dist/chunk-7YIBMQDR.cjs +86 -0
- package/dist/chunk-BGJAV67S.cjs +29710 -0
- package/dist/chunk-CNTSLED2.cjs +559 -0
- package/dist/chunk-CRFV5WJK.js +16 -0
- package/dist/chunk-D5FBNKQM.cjs +104 -0
- package/dist/chunk-EF2JBPDM.js +114 -0
- package/dist/chunk-EQPITOP6.js +543 -0
- package/dist/chunk-GO7PPYNU.js +76 -0
- package/dist/chunk-HF3L2GIT.cjs +194 -0
- package/dist/chunk-J7XHLOLO.js +830 -0
- package/dist/chunk-JBRR5UYL.js +87 -0
- package/dist/chunk-JC6DLWTE.js +21 -0
- package/dist/chunk-JHF4YYRC.cjs +188 -0
- package/dist/chunk-JXF23MPG.js +25 -0
- package/dist/chunk-MQBT33IV.js +48 -0
- package/dist/chunk-N44BJZ4C.cjs +123 -0
- package/dist/chunk-OOTLNH63.cjs +18 -0
- package/dist/chunk-PAMVINEX.cjs +577 -0
- package/dist/chunk-PNOKNSG2.cjs +222 -0
- package/dist/chunk-QM733NUK.js +186 -0
- package/dist/chunk-R73BKDRO.cjs +90 -0
- package/dist/chunk-SHUYVCID.js +4 -0
- package/dist/chunk-SYBOCAWB.js +97 -0
- package/dist/chunk-TDV6EJHV.js +192 -0
- package/dist/chunk-TFUOHI37.cjs +839 -0
- package/dist/chunk-TIAEXJLI.cjs +182 -0
- package/dist/chunk-UPLVMVRX.cjs +23 -0
- package/dist/chunk-USNT2KNT.cjs +6 -0
- package/dist/chunk-WEMDMVHQ.js +216 -0
- package/dist/chunk-XDSNZUW7.js +564 -0
- package/dist/chunk-XQ3QUHWR.cjs +83 -0
- package/dist/chunk-XW5ATPRW.cjs +155 -0
- package/dist/chunk-ZQ4X6OAU.js +82 -0
- package/dist/chunk-ZSVCP6N3.js +83 -0
- package/dist/cli.cjs +142 -84
- package/dist/cli.js +101 -27
- package/dist/email-FKR4FXFI.js +5 -0
- package/dist/email-KVKVPNCL.cjs +58 -0
- package/dist/email-queue-CGZBVVAS.js +2 -0
- package/dist/email-queue-TPZWLTIV.cjs +23 -0
- package/dist/erp-config-enabled-CUMQ6N2V.cjs +11 -0
- package/dist/erp-config-enabled-T37X7T34.js +2 -0
- package/dist/erp-order-invoice-3YISSOWW.js +3 -0
- package/dist/erp-order-invoice-ZR5F2KTA.cjs +12 -0
- package/dist/event-order-defaults-6E543227.js +2 -0
- package/dist/event-order-defaults-DUGDVGJI.cjs +39 -0
- package/dist/event-order-notifications-5GSAOYVS.cjs +27 -0
- package/dist/event-order-notifications-IIIF23D5.js +10 -0
- package/dist/hooks.cjs +259 -132
- package/dist/hooks.d.cts +42 -1
- package/dist/hooks.d.ts +42 -1
- package/dist/hooks.js +234 -91
- package/dist/index.cjs +3884 -21070
- package/dist/index.d.cts +2255 -749
- package/dist/index.d.ts +2255 -749
- package/dist/index.js +1925 -19891
- package/dist/interpolate-WAKPN56R.cjs +11 -0
- package/dist/interpolate-WDUWDF3I.js +2 -0
- package/dist/layout-36UFTHC5.cjs +11 -0
- package/dist/layout-AOBN26XG.js +2 -0
- package/dist/migrations/1778660000004-CreateCustomerAndCustomerContacts.ts +99 -0
- package/dist/migrations/1778660000005-AddCustomerIdToVendorCustomers.ts +39 -0
- package/dist/migrations/1778660000006-UpdateVendorCustomersContactNullable.ts +36 -0
- package/dist/migrations/1778660000007-VendorOwnerCustomerContactsPermission.ts +39 -0
- package/dist/migrations/1779300000000-VendorOwnerContactsPermission.ts +39 -0
- package/dist/migrations/1779400000000-AddCustomerContactIdToOrders.ts +33 -0
- package/dist/migrations/1779400000000-ConvertStatusToEnum.ts +142 -0
- package/dist/migrations/1779400000000-SeedDefaultCurrencies.ts +33 -0
- package/dist/migrations/1779500000000-VendorRolesAndPermissions.ts +102 -0
- package/dist/migrations/1779600000000-VendorRegistrationProfile.ts +52 -0
- package/dist/migrations/1779700000000-CollectionIsCatalog.ts +22 -0
- package/dist/migrations/1779710000000-CollectionPlatformCatalog.ts +60 -0
- package/dist/migrations/1779720000000-ProductCategoryPlatformCatalog.ts +157 -0
- package/dist/migrations/1779800000000-EventsAndEventProducts.ts +173 -0
- package/dist/migrations/1779810000000-BackfillVendorRoleEventsPermissions.ts +38 -0
- package/dist/migrations/1779820000000-FixProductsCategoryForeignKey.ts +70 -0
- package/dist/migrations/1779830000000-ProductTitleColumn.ts +32 -0
- package/dist/migrations/1779840000000-EventAboutAndVisibilityFields.ts +34 -0
- package/dist/migrations/1779850000000-EventCityCountrySplit.ts +43 -0
- package/dist/migrations/1779860000000-CreateCombos.ts +140 -0
- package/dist/migrations/1780100000000-OrderAttendeesEventId.ts +55 -0
- package/dist/migrations/1780110000000-EventContactFormId.ts +49 -0
- package/dist/migrations/1780130000000-ProductVariants.ts +54 -0
- package/dist/migrations/1780140000000-EventManagementEnhancements.ts +44 -0
- package/dist/migrations/1780160000000-EventRegistrationGstProductContactForm.ts +79 -0
- package/dist/migrations/1780170000000-ComboCurrencyPrices.ts +20 -0
- package/dist/migrations/1781110000000-VendorOwnerCombosPermission.ts +38 -0
- package/dist/migrations/1781120000000-RefundPoliciesAndRequests.ts +225 -0
- package/dist/migrations/1781130000000-CreateAttendees.ts +44 -0
- package/dist/migrations/1781140000000-EventOrderNotifications.ts +29 -0
- package/dist/migrations/1781150000000-EventNamedLists.ts +28 -0
- package/dist/migrations/1781160000000-RefundPolicyEventTiers.ts +27 -0
- package/dist/migrations/1781170000000-EventRefundPolicy.ts +42 -0
- package/dist/migrations/1781180000000-RemoveCartItemsUniqueConstraint.ts +15 -0
- package/dist/migrations/1781190000000-RenameProductTaxesToProductConfig.ts +84 -0
- package/dist/migrations/1781200000000-VendorOwnerProductConfigPermissions.ts +51 -0
- package/dist/migrations/1781210000000-VendorRoleProductConfigPermissions.ts +46 -0
- package/dist/migrations/helpers/vendor-role-seed.ts +243 -0
- package/dist/paid-order-erp-3USEG6WL.js +3 -0
- package/dist/paid-order-erp-FSQ3GSXE.cjs +12 -0
- package/dist/pg-boss-service-4XF2TQ2E.js +2 -0
- package/dist/pg-boss-service-L6MTF4EQ.cjs +15 -0
- package/dist/razorpay-KLO2KNCB.js +49 -0
- package/dist/razorpay-U23LGY72.cjs +56 -0
- package/dist/rbac-debug-db-D7ME7QUY.cjs +35 -0
- package/dist/rbac-debug-db-MTCTVNNM.js +33 -0
- package/dist/sms-defaults-2NL24H57.js +2 -0
- package/dist/sms-defaults-KCOPKQBA.cjs +19 -0
- package/dist/stripe-4FD27QVJ.js +51 -0
- package/dist/stripe-VU6OEG2D.cjs +57 -0
- package/dist/theme.cjs +31 -59
- package/dist/theme.d.cts +78 -3
- package/dist/theme.d.ts +78 -3
- package/dist/theme.js +23 -20
- package/dist/vendor-invite-status-77O7ZQ3U.cjs +19 -0
- package/dist/vendor-invite-status-PWJ3DE76.js +2 -0
- package/dist/whatsapp-queue-3DXA4MXU.js +2 -0
- package/dist/whatsapp-queue-KG65MXD5.cjs +15 -0
- package/package.json +147 -141
- package/dist/admin.cjs.map +0 -1
- package/dist/admin.js.map +0 -1
- package/dist/api.cjs.map +0 -1
- package/dist/api.js.map +0 -1
- package/dist/auth.cjs.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config-DJ5CmQvS.d.cts +0 -8
- package/dist/config-DJ5CmQvS.d.ts +0 -8
- package/dist/hooks.cjs.map +0 -1
- package/dist/hooks.js.map +0 -1
- package/dist/index-DWd5Gjc4.d.ts +0 -582
- package/dist/index-rZTnpK7y.d.cts +0 -582
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/theme.cjs.map +0 -1
- package/dist/theme.js.map +0 -1
- package/dist/types-DCVaXlPV.d.cts +0 -78
- package/dist/types-DCVaXlPV.d.ts +0 -78
- package/dist/vendor-scope-DTYhJk_I.d.cts +0 -129
- package/dist/vendor-scope-DTYhJk_I.d.ts +0 -129
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { __name } from './chunk-SHUYVCID.js';
|
|
2
|
+
|
|
3
|
+
// src/lib/event-order-template-context.ts
|
|
4
|
+
function resolvePublicSiteUrl() {
|
|
5
|
+
if (typeof process !== "undefined") {
|
|
6
|
+
const u = (process.env.CMS_PUBLIC_URL || process.env.NEXT_PUBLIC_SITE_URL || "").trim();
|
|
7
|
+
if (u) return u.replace(/\/+$/, "");
|
|
8
|
+
const v = (process.env.VERCEL_URL || "").trim();
|
|
9
|
+
if (v) return v.startsWith("http") ? v.replace(/\/+$/, "") : `https://${v.replace(/\/+$/, "")}`;
|
|
10
|
+
}
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
__name(resolvePublicSiteUrl, "resolvePublicSiteUrl");
|
|
14
|
+
function buildOrderTrackUrl(qrToken, siteUrl) {
|
|
15
|
+
const token = qrToken?.trim();
|
|
16
|
+
if (!token) return "";
|
|
17
|
+
const base = (siteUrl ?? resolvePublicSiteUrl()).replace(/\/+$/, "");
|
|
18
|
+
if (!base) return `/track/${token}`;
|
|
19
|
+
return `${base}/track/${token}`;
|
|
20
|
+
}
|
|
21
|
+
__name(buildOrderTrackUrl, "buildOrderTrackUrl");
|
|
22
|
+
function buildOrderQrImageUrl(trackUrl, size = 200) {
|
|
23
|
+
if (!trackUrl.trim()) return "";
|
|
24
|
+
return `https://api.qrserver.com/v1/create-qr-code/?size=${size}x${size}&data=${encodeURIComponent(trackUrl)}`;
|
|
25
|
+
}
|
|
26
|
+
__name(buildOrderQrImageUrl, "buildOrderQrImageUrl");
|
|
27
|
+
function formatOrderDetailsText(input) {
|
|
28
|
+
const { orderNumber, total, currency, lines } = input;
|
|
29
|
+
const header = `Order: ${orderNumber}
|
|
30
|
+
Total: ${total} ${currency}`;
|
|
31
|
+
if (!lines.length) return header;
|
|
32
|
+
const items = lines.map((line) => `- ${line.name} \xD7 ${line.quantity} (${line.total} ${line.currency})`).join("\n");
|
|
33
|
+
return `${header}
|
|
34
|
+
|
|
35
|
+
Items:
|
|
36
|
+
${items}`;
|
|
37
|
+
}
|
|
38
|
+
__name(formatOrderDetailsText, "formatOrderDetailsText");
|
|
39
|
+
function formatOrderDetailsHtml(input) {
|
|
40
|
+
const text = formatOrderDetailsText(input);
|
|
41
|
+
const escaped = text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
42
|
+
return `<pre style="font-family:inherit;white-space:pre-wrap;margin:0">${escaped}</pre>`;
|
|
43
|
+
}
|
|
44
|
+
__name(formatOrderDetailsHtml, "formatOrderDetailsHtml");
|
|
45
|
+
function buildEventOrderTemplateVariables(input) {
|
|
46
|
+
const { event, order, contact, productNames, orderLines = [], siteUrl } = input;
|
|
47
|
+
const trackUrl = buildOrderTrackUrl(order.qrToken, siteUrl);
|
|
48
|
+
const qrImageUrl = buildOrderQrImageUrl(trackUrl);
|
|
49
|
+
const orderDetailsPayload = {
|
|
50
|
+
orderNumber: String(order.orderNumber ?? ""),
|
|
51
|
+
total: String(order.total ?? ""),
|
|
52
|
+
currency: String(order.currency ?? "INR"),
|
|
53
|
+
lines: orderLines
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
eventName: event.name ?? "",
|
|
57
|
+
eventSlug: event.slug ?? "",
|
|
58
|
+
venue: event.venue ?? "",
|
|
59
|
+
startDate: formatEventDate(event.startDate),
|
|
60
|
+
orderNumber: String(order.orderNumber ?? ""),
|
|
61
|
+
orderTotal: String(order.total ?? ""),
|
|
62
|
+
currency: String(order.currency ?? "INR"),
|
|
63
|
+
customerName: contact.name?.trim() || contact.email?.split("@")[0] || "Guest",
|
|
64
|
+
customerEmail: contact.email?.trim() || "",
|
|
65
|
+
customerPhone: contact.phone?.trim() || "",
|
|
66
|
+
productNames,
|
|
67
|
+
trackUrl,
|
|
68
|
+
qrImageUrl,
|
|
69
|
+
orderDetails: formatOrderDetailsText(orderDetailsPayload),
|
|
70
|
+
orderDetailsHtml: formatOrderDetailsHtml(orderDetailsPayload)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
__name(buildEventOrderTemplateVariables, "buildEventOrderTemplateVariables");
|
|
74
|
+
function formatEventDate(d) {
|
|
75
|
+
if (!d) return "";
|
|
76
|
+
try {
|
|
77
|
+
return new Date(d).toLocaleString(void 0, {
|
|
78
|
+
dateStyle: "medium",
|
|
79
|
+
timeStyle: "short"
|
|
80
|
+
});
|
|
81
|
+
} catch {
|
|
82
|
+
return String(d);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
__name(formatEventDate, "formatEventDate");
|
|
86
|
+
|
|
87
|
+
export { buildEventOrderTemplateVariables, resolvePublicSiteUrl };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __name } from './chunk-SHUYVCID.js';
|
|
2
|
+
|
|
3
|
+
// src/plugins/erp/erp-config-enabled.ts
|
|
4
|
+
async function isErpIntegrationEnabled(cms, dataSource, entityMap) {
|
|
5
|
+
if (!cms.getPlugin("erp")) return false;
|
|
6
|
+
const configRepo = dataSource.getRepository(entityMap.configs);
|
|
7
|
+
const cfgRows = await configRepo.find({
|
|
8
|
+
where: {
|
|
9
|
+
settings: "erp",
|
|
10
|
+
deleted: false
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
for (const row of cfgRows) {
|
|
14
|
+
const r = row;
|
|
15
|
+
if (r.key === "enabled" && r.value === "false") return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
__name(isErpIntegrationEnabled, "isErpIntegrationEnabled");
|
|
20
|
+
|
|
21
|
+
export { isErpIntegrationEnabled };
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk46GKADYE_cjs = require('./chunk-46GKADYE.cjs');
|
|
4
|
+
var chunkOOTLNH63_cjs = require('./chunk-OOTLNH63.cjs');
|
|
5
|
+
var chunk7YIBMQDR_cjs = require('./chunk-7YIBMQDR.cjs');
|
|
6
|
+
var chunkR73BKDRO_cjs = require('./chunk-R73BKDRO.cjs');
|
|
7
|
+
var chunkPAMVINEX_cjs = require('./chunk-PAMVINEX.cjs');
|
|
8
|
+
var chunkXW5ATPRW_cjs = require('./chunk-XW5ATPRW.cjs');
|
|
9
|
+
var chunkN44BJZ4C_cjs = require('./chunk-N44BJZ4C.cjs');
|
|
10
|
+
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
11
|
+
|
|
12
|
+
// src/lib/event-order-notifications.ts
|
|
13
|
+
async function getSettingsGroup(deps, group) {
|
|
14
|
+
const rows = await deps.dataSource.getRepository(deps.entityMap["configs"]).find({
|
|
15
|
+
where: {
|
|
16
|
+
settings: group,
|
|
17
|
+
deleted: false
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return Object.fromEntries(rows.map((r) => [
|
|
21
|
+
r.key,
|
|
22
|
+
r.value
|
|
23
|
+
]));
|
|
24
|
+
}
|
|
25
|
+
chunkUSNT2KNT_cjs.__name(getSettingsGroup, "getSettingsGroup");
|
|
26
|
+
function channelEnabled(channels, ch) {
|
|
27
|
+
if (!Array.isArray(channels) || channels.length === 0) return false;
|
|
28
|
+
return channels.includes(ch);
|
|
29
|
+
}
|
|
30
|
+
chunkUSNT2KNT_cjs.__name(channelEnabled, "channelEnabled");
|
|
31
|
+
async function dispatchEventOrderNotifications(orderId, deps) {
|
|
32
|
+
const orderRepo = deps.dataSource.getRepository(deps.entityMap["orders"]);
|
|
33
|
+
const order = await orderRepo.findOne({
|
|
34
|
+
where: {
|
|
35
|
+
id: orderId,
|
|
36
|
+
deleted: false
|
|
37
|
+
},
|
|
38
|
+
relations: [
|
|
39
|
+
"contact"
|
|
40
|
+
]
|
|
41
|
+
});
|
|
42
|
+
if (!order) return;
|
|
43
|
+
const o = order;
|
|
44
|
+
const contact = o.contact ?? {};
|
|
45
|
+
const siteUrl = chunkR73BKDRO_cjs.resolvePublicSiteUrl();
|
|
46
|
+
const itemRows = await deps.dataSource.getRepository(deps.entityMap["order_items"]).find({
|
|
47
|
+
where: {
|
|
48
|
+
orderId
|
|
49
|
+
},
|
|
50
|
+
relations: [
|
|
51
|
+
"product"
|
|
52
|
+
],
|
|
53
|
+
order: {
|
|
54
|
+
id: "ASC"
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (!itemRows.length) return;
|
|
58
|
+
const epRepo = deps.dataSource.getRepository(deps.entityMap["event_products"]);
|
|
59
|
+
const eventRepo = deps.dataSource.getRepository(deps.entityMap["events"]);
|
|
60
|
+
const templateRepo = deps.dataSource.getRepository(deps.entityMap["message_templates"]);
|
|
61
|
+
const getTemplateRow = /* @__PURE__ */ chunkUSNT2KNT_cjs.__name(async (channel, templateKey) => {
|
|
62
|
+
const row = await templateRepo.findOne({
|
|
63
|
+
where: {
|
|
64
|
+
channel,
|
|
65
|
+
templateKey,
|
|
66
|
+
deleted: false
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
if (!row) return null;
|
|
70
|
+
const r = row;
|
|
71
|
+
return {
|
|
72
|
+
subject: r.subject,
|
|
73
|
+
body: r.body,
|
|
74
|
+
externalTemplateRef: r.externalTemplateRef,
|
|
75
|
+
enabled: r.enabled
|
|
76
|
+
};
|
|
77
|
+
}, "getTemplateRow");
|
|
78
|
+
const orderLines = itemRows.map((item) => {
|
|
79
|
+
const row = item;
|
|
80
|
+
const name = row.product?.name || row.product?.title || `Product #${row.productId}`;
|
|
81
|
+
return {
|
|
82
|
+
name: String(name),
|
|
83
|
+
quantity: Number(row.quantity) || 1,
|
|
84
|
+
total: row.total,
|
|
85
|
+
currency: String(o.currency ?? "INR")
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
const eventMap = /* @__PURE__ */ new Map();
|
|
89
|
+
for (const item of itemRows) {
|
|
90
|
+
const productId = item.productId;
|
|
91
|
+
const productName = item.product?.name || item.product?.title || `Product #${productId}`;
|
|
92
|
+
const eps = await epRepo.find({
|
|
93
|
+
where: {
|
|
94
|
+
productId,
|
|
95
|
+
isActive: true
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
for (const ep of eps) {
|
|
99
|
+
const eventId = ep.eventId;
|
|
100
|
+
const existing = eventMap.get(eventId);
|
|
101
|
+
if (existing) {
|
|
102
|
+
if (!existing.productNames.includes(productName)) {
|
|
103
|
+
existing.productNames.push(productName);
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
const event = await eventRepo.findOne({
|
|
107
|
+
where: {
|
|
108
|
+
id: eventId,
|
|
109
|
+
deleted: false
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
if (event) {
|
|
113
|
+
eventMap.set(eventId, {
|
|
114
|
+
event,
|
|
115
|
+
productNames: [
|
|
116
|
+
productName
|
|
117
|
+
]
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (eventMap.size === 0) return;
|
|
124
|
+
const notifSettings = await getSettingsGroup(deps, "event_notifications");
|
|
125
|
+
if (notifSettings.enabled === "false" || notifSettings.enabled === "0") return;
|
|
126
|
+
const cms = await deps.getCms();
|
|
127
|
+
const branding = await getSettingsGroup(deps, "branding");
|
|
128
|
+
const emailSettings = await getSettingsGroup(deps, "email");
|
|
129
|
+
const companyDetails = chunkPAMVINEX_cjs.mergeEmailLayoutCompanyDetails(branding, emailSettings);
|
|
130
|
+
for (const { event, productNames: eventProductNames } of eventMap.values()) {
|
|
131
|
+
if (!event.orderNotificationsEnabled) continue;
|
|
132
|
+
const channels = event.orderNotificationChannels;
|
|
133
|
+
const overrides = event.orderNotificationTemplates;
|
|
134
|
+
const vars = chunkR73BKDRO_cjs.buildEventOrderTemplateVariables({
|
|
135
|
+
event,
|
|
136
|
+
order: {
|
|
137
|
+
orderNumber: o.orderNumber,
|
|
138
|
+
total: o.total,
|
|
139
|
+
currency: o.currency,
|
|
140
|
+
qrToken: o.qrToken
|
|
141
|
+
},
|
|
142
|
+
contact,
|
|
143
|
+
productNames: eventProductNames.join(", "),
|
|
144
|
+
orderLines,
|
|
145
|
+
siteUrl
|
|
146
|
+
});
|
|
147
|
+
if (channelEnabled(channels, "email") && contact.email?.trim()) {
|
|
148
|
+
const resolved = await chunkN44BJZ4C_cjs.resolveEventOrderTemplate("email", getTemplateRow, overrides?.email ?? null);
|
|
149
|
+
if (resolved?.enabled) {
|
|
150
|
+
const subject = chunkOOTLNH63_cjs.applyTemplateVars(resolved.subject ?? "Event registration confirmed", vars);
|
|
151
|
+
const bodyHtml = chunkOOTLNH63_cjs.applyTemplateVars(resolved.body, vars);
|
|
152
|
+
const html = chunk46GKADYE_cjs.renderLayout({
|
|
153
|
+
bodyHtml,
|
|
154
|
+
companyDetails
|
|
155
|
+
});
|
|
156
|
+
await chunkXW5ATPRW_cjs.queueEmail(cms, {
|
|
157
|
+
to: contact.email.trim(),
|
|
158
|
+
subject,
|
|
159
|
+
html,
|
|
160
|
+
text: bodyHtml.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim()
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (channelEnabled(channels, "whatsapp") && contact.phone?.trim()) {
|
|
165
|
+
const resolved = await chunkN44BJZ4C_cjs.resolveEventOrderTemplate("whatsapp", getTemplateRow, overrides?.whatsapp ?? null);
|
|
166
|
+
if (resolved?.enabled) {
|
|
167
|
+
const { EVENT_ORDER_WHATSAPP_PARAM_KEYS } = await import('./event-order-defaults-DUGDVGJI.cjs');
|
|
168
|
+
const sent = await chunk7YIBMQDR_cjs.queueWhatsApp(cms, {
|
|
169
|
+
to: contact.phone.trim(),
|
|
170
|
+
templateKey: chunkN44BJZ4C_cjs.EVENT_ORDER_TEMPLATE_KEY,
|
|
171
|
+
externalTemplateRef: resolved.externalTemplateRef,
|
|
172
|
+
body: resolved.body,
|
|
173
|
+
variables: vars,
|
|
174
|
+
templateParamOrder: EVENT_ORDER_WHATSAPP_PARAM_KEYS
|
|
175
|
+
});
|
|
176
|
+
if (!sent) {
|
|
177
|
+
console.warn("[event-order-notifications] WhatsApp not sent for order", {
|
|
178
|
+
orderId,
|
|
179
|
+
eventId: event.id
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
chunkUSNT2KNT_cjs.__name(dispatchEventOrderNotifications, "dispatchEventOrderNotifications");
|
|
187
|
+
|
|
188
|
+
exports.dispatchEventOrderNotifications = dispatchEventOrderNotifications;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __name } from './chunk-SHUYVCID.js';
|
|
2
|
+
|
|
3
|
+
// src/lib/vendor-invite-status.ts
|
|
4
|
+
function inviteStatusForActivation(activation) {
|
|
5
|
+
return activation === "invite" ? "pending" : "accepted";
|
|
6
|
+
}
|
|
7
|
+
__name(inviteStatusForActivation, "inviteStatusForActivation");
|
|
8
|
+
async function markVendorInviteAcceptedForUser(dataSource, vendorEntity, userId) {
|
|
9
|
+
await dataSource.getRepository(vendorEntity).update({
|
|
10
|
+
userId
|
|
11
|
+
}, {
|
|
12
|
+
inviteStatus: "accepted"
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
__name(markVendorInviteAcceptedForUser, "markVendorInviteAcceptedForUser");
|
|
16
|
+
async function markVendorInvitePendingForUser(dataSource, vendorEntity, userId) {
|
|
17
|
+
await dataSource.getRepository(vendorEntity).update({
|
|
18
|
+
userId
|
|
19
|
+
}, {
|
|
20
|
+
inviteStatus: "pending"
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
__name(markVendorInvitePendingForUser, "markVendorInvitePendingForUser");
|
|
24
|
+
|
|
25
|
+
export { inviteStatusForActivation, markVendorInviteAcceptedForUser, markVendorInvitePendingForUser };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { __name } from './chunk-SHUYVCID.js';
|
|
2
|
+
|
|
3
|
+
// src/message-templates/sms-defaults.ts
|
|
4
|
+
var SMS_MESSAGE_TEMPLATE_DEFAULTS = [
|
|
5
|
+
{
|
|
6
|
+
templateKey: "auth.otp_login",
|
|
7
|
+
name: "Sign-in OTP (SMS)",
|
|
8
|
+
body: "Your sign-in code is {{code}}. Valid 10 minutes.",
|
|
9
|
+
providerMeta: {
|
|
10
|
+
otpVarKey: "var1"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
templateKey: "auth.otp_verify_phone",
|
|
15
|
+
name: "Verify phone OTP (SMS)",
|
|
16
|
+
body: "Your verification code is {{code}}. Valid 10 minutes.",
|
|
17
|
+
providerMeta: {
|
|
18
|
+
otpVarKey: "var1"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
function getSmsTemplateDefault(templateKey) {
|
|
23
|
+
return SMS_MESSAGE_TEMPLATE_DEFAULTS.find((d) => d.templateKey === templateKey);
|
|
24
|
+
}
|
|
25
|
+
__name(getSmsTemplateDefault, "getSmsTemplateDefault");
|
|
26
|
+
async function resolveSmsTemplateForSend(templateKey, getRow) {
|
|
27
|
+
const def = getSmsTemplateDefault(templateKey);
|
|
28
|
+
if (!def) return null;
|
|
29
|
+
const row = await getRow("sms", templateKey);
|
|
30
|
+
let body = def.body;
|
|
31
|
+
let ref = def.externalTemplateRef;
|
|
32
|
+
let otpVarKey = def.providerMeta?.otpVarKey ?? "var1";
|
|
33
|
+
if (row && row.enabled !== false) {
|
|
34
|
+
if (row.body.trim()) body = row.body;
|
|
35
|
+
if (row.externalTemplateRef?.trim()) ref = row.externalTemplateRef.trim();
|
|
36
|
+
const pm = row.providerMeta;
|
|
37
|
+
const k = pm && typeof pm.otpVarKey === "string" ? pm.otpVarKey.trim() : "";
|
|
38
|
+
if (k) otpVarKey = k;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
body,
|
|
42
|
+
externalTemplateRef: ref?.trim() || void 0,
|
|
43
|
+
otpVarKey: otpVarKey || "var1"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
__name(resolveSmsTemplateForSend, "resolveSmsTemplateForSend");
|
|
47
|
+
|
|
48
|
+
export { SMS_MESSAGE_TEMPLATE_DEFAULTS, getSmsTemplateDefault, resolveSmsTemplateForSend };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
4
|
+
|
|
5
|
+
// src/message-templates/event-order-defaults.ts
|
|
6
|
+
var EVENT_ORDER_TEMPLATE_KEY = "eventOrderPlaced";
|
|
7
|
+
var EVENT_ORDER_TEMPLATE_VARIABLES = [
|
|
8
|
+
"eventName",
|
|
9
|
+
"eventSlug",
|
|
10
|
+
"venue",
|
|
11
|
+
"startDate",
|
|
12
|
+
"orderNumber",
|
|
13
|
+
"orderTotal",
|
|
14
|
+
"currency",
|
|
15
|
+
"customerName",
|
|
16
|
+
"customerEmail",
|
|
17
|
+
"customerPhone",
|
|
18
|
+
"productNames",
|
|
19
|
+
"trackUrl",
|
|
20
|
+
"qrImageUrl",
|
|
21
|
+
"orderDetails",
|
|
22
|
+
"orderDetailsHtml"
|
|
23
|
+
];
|
|
24
|
+
var EVENT_ORDER_WHATSAPP_PARAM_KEYS = [
|
|
25
|
+
"customerName",
|
|
26
|
+
"eventName",
|
|
27
|
+
"orderNumber",
|
|
28
|
+
"orderTotal",
|
|
29
|
+
"currency",
|
|
30
|
+
"venue",
|
|
31
|
+
"startDate",
|
|
32
|
+
"trackUrl"
|
|
33
|
+
];
|
|
34
|
+
var EVENT_ORDER_TEMPLATE_VARIABLE_HINTS = {
|
|
35
|
+
eventName: "Event title",
|
|
36
|
+
eventSlug: "Event URL slug",
|
|
37
|
+
venue: "Venue name",
|
|
38
|
+
startDate: "Formatted event start",
|
|
39
|
+
orderNumber: "Order number",
|
|
40
|
+
orderTotal: "Order total amount",
|
|
41
|
+
currency: "Currency code",
|
|
42
|
+
customerName: "Buyer name",
|
|
43
|
+
customerEmail: "Buyer email",
|
|
44
|
+
customerPhone: "Buyer phone",
|
|
45
|
+
productNames: "Comma-separated ticket names",
|
|
46
|
+
trackUrl: "Public order tracking link (QR destination)",
|
|
47
|
+
qrImageUrl: 'QR code image URL for email (use in <img src="\u2026">)',
|
|
48
|
+
orderDetails: "Plain-text order summary with line items",
|
|
49
|
+
orderDetailsHtml: "HTML order summary block",
|
|
50
|
+
trackUrlWhatsApp: "Same as trackUrl \u2014 include in Meta template as last param"
|
|
51
|
+
};
|
|
52
|
+
var EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS = [
|
|
53
|
+
{
|
|
54
|
+
channel: "email",
|
|
55
|
+
templateKey: EVENT_ORDER_TEMPLATE_KEY,
|
|
56
|
+
name: "Event order placed (email)",
|
|
57
|
+
subject: "Your tickets \u2014 {{eventName}} ({{orderNumber}})",
|
|
58
|
+
body: `<p>Hi {{customerName}},</p>
|
|
59
|
+
<p>Thank you for registering for <strong>{{eventName}}</strong>.</p>
|
|
60
|
+
{{orderDetailsHtml}}
|
|
61
|
+
<p><strong>Venue:</strong> {{venue}}<br/>
|
|
62
|
+
<strong>Date:</strong> {{startDate}}</p>
|
|
63
|
+
<p>Show this QR code at the venue or scan to open your order:</p>
|
|
64
|
+
<p style="text-align:center;margin:20px 0">
|
|
65
|
+
<img src="{{qrImageUrl}}" alt="Order QR" width="180" height="180" style="border:1px solid #e5e7eb;border-radius:8px" />
|
|
66
|
+
</p>
|
|
67
|
+
<p style="text-align:center"><a href="{{trackUrl}}">View order online</a></p>
|
|
68
|
+
<p>We look forward to seeing you there.</p>`
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
channel: "whatsapp",
|
|
72
|
+
templateKey: EVENT_ORDER_TEMPLATE_KEY,
|
|
73
|
+
name: "Event order placed (WhatsApp)",
|
|
74
|
+
body: "Hi {{customerName}}, your registration for {{eventName}} is confirmed. Order {{orderNumber}} \u2014 {{orderTotal}} {{currency}}. Venue: {{venue}}. Date: {{startDate}}. Track: {{trackUrl}}",
|
|
75
|
+
externalTemplateRef: "event_order_placed"
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
function getEventOrderTemplateDefault(channel) {
|
|
79
|
+
return EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS.find((d) => d.channel === channel);
|
|
80
|
+
}
|
|
81
|
+
chunkUSNT2KNT_cjs.__name(getEventOrderTemplateDefault, "getEventOrderTemplateDefault");
|
|
82
|
+
async function resolveEventOrderTemplate(channel, getRow, eventOverride) {
|
|
83
|
+
const def = getEventOrderTemplateDefault(channel);
|
|
84
|
+
if (!def) return null;
|
|
85
|
+
const row = await getRow(channel, EVENT_ORDER_TEMPLATE_KEY);
|
|
86
|
+
let subject = def.subject;
|
|
87
|
+
let body = def.body;
|
|
88
|
+
let externalTemplateRef = def.externalTemplateRef;
|
|
89
|
+
let enabled = true;
|
|
90
|
+
if (row) {
|
|
91
|
+
enabled = row.enabled !== false;
|
|
92
|
+
if (row.subject?.trim()) subject = row.subject.trim();
|
|
93
|
+
if (row.body.trim()) body = row.body;
|
|
94
|
+
if (row.externalTemplateRef?.trim()) externalTemplateRef = row.externalTemplateRef.trim();
|
|
95
|
+
}
|
|
96
|
+
if (eventOverride) {
|
|
97
|
+
if (eventOverride.subject?.trim()) subject = eventOverride.subject.trim();
|
|
98
|
+
if (eventOverride.body?.trim()) body = eventOverride.body;
|
|
99
|
+
if (eventOverride.externalTemplateRef?.trim()) {
|
|
100
|
+
externalTemplateRef = eventOverride.externalTemplateRef.trim();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
subject,
|
|
105
|
+
body,
|
|
106
|
+
externalTemplateRef: externalTemplateRef?.trim() || void 0,
|
|
107
|
+
enabled
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
chunkUSNT2KNT_cjs.__name(resolveEventOrderTemplate, "resolveEventOrderTemplate");
|
|
111
|
+
function pickWhatsAppTemplateParams(variables) {
|
|
112
|
+
return EVENT_ORDER_WHATSAPP_PARAM_KEYS.map((key) => String(variables[key] ?? "").slice(0, 1024));
|
|
113
|
+
}
|
|
114
|
+
chunkUSNT2KNT_cjs.__name(pickWhatsAppTemplateParams, "pickWhatsAppTemplateParams");
|
|
115
|
+
|
|
116
|
+
exports.EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS = EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS;
|
|
117
|
+
exports.EVENT_ORDER_TEMPLATE_KEY = EVENT_ORDER_TEMPLATE_KEY;
|
|
118
|
+
exports.EVENT_ORDER_TEMPLATE_VARIABLES = EVENT_ORDER_TEMPLATE_VARIABLES;
|
|
119
|
+
exports.EVENT_ORDER_TEMPLATE_VARIABLE_HINTS = EVENT_ORDER_TEMPLATE_VARIABLE_HINTS;
|
|
120
|
+
exports.EVENT_ORDER_WHATSAPP_PARAM_KEYS = EVENT_ORDER_WHATSAPP_PARAM_KEYS;
|
|
121
|
+
exports.getEventOrderTemplateDefault = getEventOrderTemplateDefault;
|
|
122
|
+
exports.pickWhatsAppTemplateParams = pickWhatsAppTemplateParams;
|
|
123
|
+
exports.resolveEventOrderTemplate = resolveEventOrderTemplate;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
4
|
+
|
|
5
|
+
// src/message-templates/interpolate.ts
|
|
6
|
+
function applyTemplateVars(template, variables) {
|
|
7
|
+
let out = template;
|
|
8
|
+
for (const [k, v] of Object.entries(variables)) {
|
|
9
|
+
out = out.split(`{{${k}}}`).join(v);
|
|
10
|
+
}
|
|
11
|
+
if (variables.code !== void 0) {
|
|
12
|
+
out = out.split("{{otp}}").join(variables.code);
|
|
13
|
+
}
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
chunkUSNT2KNT_cjs.__name(applyTemplateVars, "applyTemplateVars");
|
|
17
|
+
|
|
18
|
+
exports.applyTemplateVars = applyTemplateVars;
|