@infuro/cms-core 1.0.50 → 1.0.51
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 +843 -402
- package/dist/admin.d.cts +13 -1
- package/dist/admin.d.ts +13 -1
- package/dist/admin.js +843 -402
- package/dist/api.cjs +33 -33
- package/dist/api.js +2 -2
- package/dist/{chunk-IPDHT2UV.js → chunk-CTXBYO2J.js} +94 -104
- package/dist/{chunk-UUWAUHUW.cjs → chunk-JN4AFHZ4.cjs} +94 -105
- package/dist/{chunk-JE22VP6S.js → chunk-MXIWUFBP.js} +1 -1
- package/dist/{chunk-LT2WOPKA.js → chunk-NUXR7BUG.js} +179 -59
- package/dist/{chunk-KOTXDSQB.cjs → chunk-UQWZUZ5X.cjs} +1 -1
- package/dist/{chunk-JCMOOPNX.cjs → chunk-YOW457RA.cjs} +208 -88
- package/dist/{emit-order-notification-trigger-6XX7LSC4.js → emit-order-notification-trigger-HZQPPSFB.js} +1 -1
- package/dist/{emit-order-notification-trigger-NASG7ZEO.cjs → emit-order-notification-trigger-NR3VN6C6.cjs} +3 -3
- package/dist/index.cjs +280 -246
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +54 -20
- package/dist/{order-notification-dispatcher-3TA4ETYJ.js → order-notification-dispatcher-AT4IFAGL.js} +1 -1
- package/dist/{order-notification-dispatcher-ZEAZ5SHV.cjs → order-notification-dispatcher-YBAWDOIO.cjs} +4 -4
- package/package.json +1 -1
package/dist/api.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkYOW457RA_cjs = require('./chunk-YOW457RA.cjs');
|
|
4
4
|
require('./chunk-HY3AXLOI.cjs');
|
|
5
|
-
require('./chunk-
|
|
5
|
+
require('./chunk-JN4AFHZ4.cjs');
|
|
6
6
|
require('./chunk-UCKN4BBY.cjs');
|
|
7
7
|
require('./chunk-7NMT3GBR.cjs');
|
|
8
8
|
require('./chunk-V25RDUOU.cjs');
|
|
@@ -22,127 +22,127 @@ require('./chunk-USNT2KNT.cjs');
|
|
|
22
22
|
|
|
23
23
|
Object.defineProperty(exports, "createAnalyticsHandlers", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkYOW457RA_cjs.createAnalyticsHandlers; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "createBlogBySlugHandler", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkYOW457RA_cjs.createBlogBySlugHandler; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "createChangePasswordHandler", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkYOW457RA_cjs.createChangePasswordHandler; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "createCmsApiHandler", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkYOW457RA_cjs.createCmsApiHandler; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "createCrudByIdHandler", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkYOW457RA_cjs.createCrudByIdHandler; }
|
|
42
42
|
});
|
|
43
43
|
Object.defineProperty(exports, "createCrudHandler", {
|
|
44
44
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkYOW457RA_cjs.createCrudHandler; }
|
|
46
46
|
});
|
|
47
47
|
Object.defineProperty(exports, "createDashboardStatsHandler", {
|
|
48
48
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkYOW457RA_cjs.createDashboardStatsHandler; }
|
|
50
50
|
});
|
|
51
51
|
Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkYOW457RA_cjs.createEcommerceAnalyticsHandler; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "createForgotPasswordHandler", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkYOW457RA_cjs.createForgotPasswordHandler; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "createFormBySlugHandler", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkYOW457RA_cjs.createFormBySlugHandler; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "createInviteAcceptHandler", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkYOW457RA_cjs.createInviteAcceptHandler; }
|
|
66
66
|
});
|
|
67
67
|
Object.defineProperty(exports, "createJobScheduleHandlers", {
|
|
68
68
|
enumerable: true,
|
|
69
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunkYOW457RA_cjs.createJobScheduleHandlers; }
|
|
70
70
|
});
|
|
71
71
|
Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
|
|
72
72
|
enumerable: true,
|
|
73
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunkYOW457RA_cjs.createLlmAgentKnowledgeHandlers; }
|
|
74
74
|
});
|
|
75
75
|
Object.defineProperty(exports, "createMediaZipExtractHandler", {
|
|
76
76
|
enumerable: true,
|
|
77
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunkYOW457RA_cjs.createMediaZipExtractHandler; }
|
|
78
78
|
});
|
|
79
79
|
Object.defineProperty(exports, "createSetPasswordHandler", {
|
|
80
80
|
enumerable: true,
|
|
81
|
-
get: function () { return
|
|
81
|
+
get: function () { return chunkYOW457RA_cjs.createSetPasswordHandler; }
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(exports, "createSettingsApiHandlers", {
|
|
84
84
|
enumerable: true,
|
|
85
|
-
get: function () { return
|
|
85
|
+
get: function () { return chunkYOW457RA_cjs.createSettingsApiHandlers; }
|
|
86
86
|
});
|
|
87
87
|
Object.defineProperty(exports, "createStorefrontApiHandler", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkYOW457RA_cjs.createStorefrontApiHandler; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "createUploadHandler", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkYOW457RA_cjs.createUploadHandler; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "createUserAuthApiRouter", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkYOW457RA_cjs.createUserAuthApiRouter; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "createUserAvatarHandler", {
|
|
100
100
|
enumerable: true,
|
|
101
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunkYOW457RA_cjs.createUserAvatarHandler; }
|
|
102
102
|
});
|
|
103
103
|
Object.defineProperty(exports, "createUserProfileHandler", {
|
|
104
104
|
enumerable: true,
|
|
105
|
-
get: function () { return
|
|
105
|
+
get: function () { return chunkYOW457RA_cjs.createUserProfileHandler; }
|
|
106
106
|
});
|
|
107
107
|
Object.defineProperty(exports, "createUsersApiHandlers", {
|
|
108
108
|
enumerable: true,
|
|
109
|
-
get: function () { return
|
|
109
|
+
get: function () { return chunkYOW457RA_cjs.createUsersApiHandlers; }
|
|
110
110
|
});
|
|
111
111
|
Object.defineProperty(exports, "createVendorDashboardHandler", {
|
|
112
112
|
enumerable: true,
|
|
113
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunkYOW457RA_cjs.createVendorDashboardHandler; }
|
|
114
114
|
});
|
|
115
115
|
Object.defineProperty(exports, "createVendorOnboardHandlers", {
|
|
116
116
|
enumerable: true,
|
|
117
|
-
get: function () { return
|
|
117
|
+
get: function () { return chunkYOW457RA_cjs.createVendorOnboardHandlers; }
|
|
118
118
|
});
|
|
119
119
|
Object.defineProperty(exports, "getPublicSettingsGroup", {
|
|
120
120
|
enumerable: true,
|
|
121
|
-
get: function () { return
|
|
121
|
+
get: function () { return chunkYOW457RA_cjs.getPublicSettingsGroup; }
|
|
122
122
|
});
|
|
123
123
|
Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
|
|
124
124
|
enumerable: true,
|
|
125
|
-
get: function () { return
|
|
125
|
+
get: function () { return chunkYOW457RA_cjs.mergeGuardrailsIntoSystemPrompt; }
|
|
126
126
|
});
|
|
127
127
|
Object.defineProperty(exports, "parseLlmAgentValidationRules", {
|
|
128
128
|
enumerable: true,
|
|
129
|
-
get: function () { return
|
|
129
|
+
get: function () { return chunkYOW457RA_cjs.parseLlmAgentValidationRules; }
|
|
130
130
|
});
|
|
131
131
|
Object.defineProperty(exports, "simpleDecrypt", {
|
|
132
132
|
enumerable: true,
|
|
133
|
-
get: function () { return
|
|
133
|
+
get: function () { return chunkYOW457RA_cjs.simpleDecrypt; }
|
|
134
134
|
});
|
|
135
135
|
Object.defineProperty(exports, "simpleEncrypt", {
|
|
136
136
|
enumerable: true,
|
|
137
|
-
get: function () { return
|
|
137
|
+
get: function () { return chunkYOW457RA_cjs.simpleEncrypt; }
|
|
138
138
|
});
|
|
139
139
|
Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
|
|
140
140
|
enumerable: true,
|
|
141
|
-
get: function () { return
|
|
141
|
+
get: function () { return chunkYOW457RA_cjs.validateUserMessageAgainstAgentRules; }
|
|
142
142
|
});
|
|
143
143
|
Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
|
|
144
144
|
enumerable: true,
|
|
145
|
-
get: function () { return
|
|
145
|
+
get: function () { return chunkYOW457RA_cjs.validateUserMessageAgainstStructuredRules; }
|
|
146
146
|
});
|
|
147
147
|
Object.defineProperty(exports, "createCmsAuthBundle", {
|
|
148
148
|
enumerable: true,
|
package/dist/api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-
|
|
1
|
+
export { createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-NUXR7BUG.js';
|
|
2
2
|
import './chunk-3K5AIEIZ.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-CTXBYO2J.js';
|
|
4
4
|
import './chunk-HCIRL37O.js';
|
|
5
5
|
import './chunk-JXF23MPG.js';
|
|
6
6
|
import './chunk-L3525VXI.js';
|
|
@@ -57,6 +57,9 @@ function buildEventOrderTemplateVariables(input) {
|
|
|
57
57
|
currency: String(order.currency ?? "INR"),
|
|
58
58
|
lines: orderLines
|
|
59
59
|
};
|
|
60
|
+
const qrToken = order.qrToken?.trim() || order.orderNumber?.trim() || "";
|
|
61
|
+
const fallbackQrUrl = qrToken ? `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(qrToken)}` : "";
|
|
62
|
+
const fallbackTicketQr = fallbackQrUrl ? `<img src="${fallbackQrUrl}" alt="Ticket QR Code" width="200" height="200" style="display:block;margin:12px 0;border:1px solid #e5e7eb;border-radius:8px;" />` : "";
|
|
60
63
|
return {
|
|
61
64
|
eventName: event.name ?? productNames ?? "",
|
|
62
65
|
vendorName: vendorName.trim(),
|
|
@@ -73,6 +76,8 @@ function buildEventOrderTemplateVariables(input) {
|
|
|
73
76
|
trackUrl,
|
|
74
77
|
invoiceNumber,
|
|
75
78
|
invoiceUrl,
|
|
79
|
+
ticketQr: fallbackTicketQr,
|
|
80
|
+
qrImageUrl: fallbackQrUrl,
|
|
76
81
|
orderDetails: formatOrderDetailsText(orderDetailsPayload),
|
|
77
82
|
orderDetailsHtml: formatOrderDetailsHtml(orderDetailsPayload)
|
|
78
83
|
};
|
|
@@ -2099,72 +2104,27 @@ async function getGoogleAccessToken(clientEmail, privateKey) {
|
|
|
2099
2104
|
return tokenData.access_token;
|
|
2100
2105
|
}
|
|
2101
2106
|
__name(getGoogleAccessToken, "getGoogleAccessToken");
|
|
2102
|
-
async function resolveFcmServiceAccount(dataSource, entityMap) {
|
|
2103
|
-
const pushSettings = await getSettingsGroup(dataSource, entityMap, "push");
|
|
2104
|
-
let projectId = pushSettings.firebase_project_id?.trim();
|
|
2105
|
-
let clientEmail = pushSettings.firebase_client_email?.trim();
|
|
2106
|
-
let privateKey = pushSettings.firebase_private_key?.trim();
|
|
2107
|
-
if (pushSettings.firebase_service_account_json?.trim()) {
|
|
2108
|
-
try {
|
|
2109
|
-
const parsed = JSON.parse(pushSettings.firebase_service_account_json.trim());
|
|
2110
|
-
if (parsed.project_id) projectId = parsed.project_id;
|
|
2111
|
-
if (parsed.client_email) clientEmail = parsed.client_email;
|
|
2112
|
-
if (parsed.private_key) privateKey = parsed.private_key;
|
|
2113
|
-
} catch {
|
|
2114
|
-
}
|
|
2115
|
-
}
|
|
2116
|
-
if (!projectId || !clientEmail || !privateKey) {
|
|
2117
|
-
return {
|
|
2118
|
-
ok: false,
|
|
2119
|
-
error: "Firebase Service Account JSON / credentials are not configured"
|
|
2120
|
-
};
|
|
2121
|
-
}
|
|
2122
|
-
return {
|
|
2123
|
-
ok: true,
|
|
2124
|
-
account: {
|
|
2125
|
-
projectId,
|
|
2126
|
-
clientEmail,
|
|
2127
|
-
privateKey
|
|
2128
|
-
}
|
|
2129
|
-
};
|
|
2130
|
-
}
|
|
2131
|
-
__name(resolveFcmServiceAccount, "resolveFcmServiceAccount");
|
|
2132
|
-
async function validateFcmCredentials(dataSource, entityMap) {
|
|
2133
|
-
try {
|
|
2134
|
-
const resolved = await resolveFcmServiceAccount(dataSource, entityMap);
|
|
2135
|
-
if (!resolved.ok) {
|
|
2136
|
-
return {
|
|
2137
|
-
success: false,
|
|
2138
|
-
error: resolved.error
|
|
2139
|
-
};
|
|
2140
|
-
}
|
|
2141
|
-
const { projectId, clientEmail, privateKey } = resolved.account;
|
|
2142
|
-
await getGoogleAccessToken(clientEmail, privateKey);
|
|
2143
|
-
return {
|
|
2144
|
-
success: true,
|
|
2145
|
-
projectId,
|
|
2146
|
-
clientEmail
|
|
2147
|
-
};
|
|
2148
|
-
} catch (err) {
|
|
2149
|
-
const errorMsg = err instanceof Error ? err.message : "Unknown credential validation error";
|
|
2150
|
-
console.error("[fcm-push] Exception in validateFcmCredentials", errorMsg);
|
|
2151
|
-
return {
|
|
2152
|
-
success: false,
|
|
2153
|
-
error: errorMsg
|
|
2154
|
-
};
|
|
2155
|
-
}
|
|
2156
|
-
}
|
|
2157
|
-
__name(validateFcmCredentials, "validateFcmCredentials");
|
|
2158
2107
|
async function sendFcmPushNotification(dataSource, entityMap, msg) {
|
|
2159
2108
|
try {
|
|
2160
|
-
const
|
|
2161
|
-
|
|
2109
|
+
const pushSettings = await getSettingsGroup(dataSource, entityMap, "push");
|
|
2110
|
+
let projectId = pushSettings.firebase_project_id?.trim();
|
|
2111
|
+
let clientEmail = pushSettings.firebase_client_email?.trim();
|
|
2112
|
+
let privateKey = pushSettings.firebase_private_key?.trim();
|
|
2113
|
+
if (pushSettings.firebase_service_account_json?.trim()) {
|
|
2114
|
+
try {
|
|
2115
|
+
const parsed = JSON.parse(pushSettings.firebase_service_account_json.trim());
|
|
2116
|
+
if (parsed.project_id) projectId = parsed.project_id;
|
|
2117
|
+
if (parsed.client_email) clientEmail = parsed.client_email;
|
|
2118
|
+
if (parsed.private_key) privateKey = parsed.private_key;
|
|
2119
|
+
} catch {
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
if (!projectId || !clientEmail || !privateKey) {
|
|
2162
2123
|
return {
|
|
2163
2124
|
success: false,
|
|
2164
|
-
error:
|
|
2125
|
+
error: "Firebase Service Account JSON / credentials are not configured"
|
|
2165
2126
|
};
|
|
2166
2127
|
}
|
|
2167
|
-
const { projectId, clientEmail, privateKey } = resolved.account;
|
|
2168
2128
|
const accessToken = await getGoogleAccessToken(clientEmail, privateKey);
|
|
2169
2129
|
const fcmEndpoint = `https://fcm.googleapis.com/v1/projects/${projectId}/messages:send`;
|
|
2170
2130
|
const fcmPayload = {
|
|
@@ -2275,59 +2235,69 @@ async function loadBoundTemplate(triggerKey, channel, audienceType = "customers"
|
|
|
2275
2235
|
console.warn("[order-notifications] order_notification_bindings or message_templates missing from entityMap");
|
|
2276
2236
|
return null;
|
|
2277
2237
|
}
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
triggerKey,
|
|
2282
|
-
channel,
|
|
2283
|
-
type: audienceType,
|
|
2284
|
-
enabled: true
|
|
2285
|
-
}
|
|
2286
|
-
});
|
|
2287
|
-
if (!binding && audienceType === "customers") {
|
|
2288
|
-
binding = await bindingRepo.findOne({
|
|
2238
|
+
try {
|
|
2239
|
+
const bindingRepo = dataSource.getRepository(entityMap.order_notification_bindings);
|
|
2240
|
+
let binding = await bindingRepo.findOne({
|
|
2289
2241
|
where: {
|
|
2290
2242
|
triggerKey,
|
|
2291
2243
|
channel,
|
|
2244
|
+
type: audienceType,
|
|
2292
2245
|
enabled: true
|
|
2293
2246
|
}
|
|
2294
|
-
});
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
}
|
|
2304
|
-
const templateId = binding.messageTemplateId;
|
|
2305
|
-
if (templateId == null) {
|
|
2306
|
-
console.warn("[order-notifications] binding exists but no template selected", {
|
|
2307
|
-
triggerKey,
|
|
2308
|
-
channel,
|
|
2309
|
-
audienceType
|
|
2310
|
-
});
|
|
2311
|
-
return null;
|
|
2312
|
-
}
|
|
2313
|
-
const template = await dataSource.getRepository(entityMap.message_templates).findOne({
|
|
2314
|
-
where: {
|
|
2315
|
-
id: templateId,
|
|
2316
|
-
channel,
|
|
2317
|
-
deleted: false,
|
|
2318
|
-
enabled: true
|
|
2247
|
+
}).catch(() => null);
|
|
2248
|
+
if (!binding && audienceType === "customers") {
|
|
2249
|
+
binding = await bindingRepo.findOne({
|
|
2250
|
+
where: {
|
|
2251
|
+
triggerKey,
|
|
2252
|
+
channel,
|
|
2253
|
+
enabled: true
|
|
2254
|
+
}
|
|
2255
|
+
}).catch(() => null);
|
|
2319
2256
|
}
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2257
|
+
if (!binding) {
|
|
2258
|
+
console.warn("[order-notifications] no order_notification_bindings row", {
|
|
2259
|
+
triggerKey,
|
|
2260
|
+
channel,
|
|
2261
|
+
audienceType
|
|
2262
|
+
});
|
|
2263
|
+
return null;
|
|
2264
|
+
}
|
|
2265
|
+
const templateId = binding.messageTemplateId;
|
|
2266
|
+
if (templateId == null) {
|
|
2267
|
+
console.warn("[order-notifications] binding exists but no template selected", {
|
|
2268
|
+
triggerKey,
|
|
2269
|
+
channel,
|
|
2270
|
+
audienceType
|
|
2271
|
+
});
|
|
2272
|
+
return null;
|
|
2273
|
+
}
|
|
2274
|
+
const template = await dataSource.getRepository(entityMap.message_templates).findOne({
|
|
2275
|
+
where: {
|
|
2276
|
+
id: templateId,
|
|
2277
|
+
channel,
|
|
2278
|
+
deleted: false,
|
|
2279
|
+
enabled: true
|
|
2280
|
+
}
|
|
2281
|
+
}).catch(() => null);
|
|
2282
|
+
if (!template) {
|
|
2283
|
+
console.warn("[order-notifications] bound template not found or disabled", {
|
|
2284
|
+
triggerKey,
|
|
2285
|
+
channel,
|
|
2286
|
+
audienceType,
|
|
2287
|
+
templateId
|
|
2288
|
+
});
|
|
2289
|
+
return null;
|
|
2290
|
+
}
|
|
2291
|
+
return template;
|
|
2292
|
+
} catch (err) {
|
|
2293
|
+
console.warn("[order-notifications] loadBoundTemplate query failed", {
|
|
2323
2294
|
triggerKey,
|
|
2324
2295
|
channel,
|
|
2325
2296
|
audienceType,
|
|
2326
|
-
|
|
2297
|
+
error: err instanceof Error ? err.message : String(err)
|
|
2327
2298
|
});
|
|
2328
2299
|
return null;
|
|
2329
2300
|
}
|
|
2330
|
-
return template;
|
|
2331
2301
|
}
|
|
2332
2302
|
__name(loadBoundTemplate, "loadBoundTemplate");
|
|
2333
2303
|
function mergeTriggerVariables(payload, rich) {
|
|
@@ -2344,9 +2314,11 @@ function mergeTriggerVariables(payload, rich) {
|
|
|
2344
2314
|
refundAmount: String(payload.refundAmount)
|
|
2345
2315
|
} : {}
|
|
2346
2316
|
};
|
|
2317
|
+
const extraVars = payload.extraVariables ?? {};
|
|
2347
2318
|
return {
|
|
2348
2319
|
...basic,
|
|
2349
|
-
...rich ?? {}
|
|
2320
|
+
...rich ?? {},
|
|
2321
|
+
...extraVars
|
|
2350
2322
|
};
|
|
2351
2323
|
}
|
|
2352
2324
|
__name(mergeTriggerVariables, "mergeTriggerVariables");
|
|
@@ -2542,7 +2514,23 @@ async function getAdminRecipientEmails(dataSource, entityMap) {
|
|
|
2542
2514
|
}
|
|
2543
2515
|
} catch {
|
|
2544
2516
|
}
|
|
2545
|
-
|
|
2517
|
+
const vendorEmails = /* @__PURE__ */ new Set();
|
|
2518
|
+
try {
|
|
2519
|
+
const vRows = await dataSource.query(`SELECT DISTINCT LOWER(TRIM(email)) AS email FROM vendors WHERE COALESCE(deleted, false) = false AND email IS NOT NULL AND TRIM(email) != ''`).catch(() => []);
|
|
2520
|
+
for (const r of vRows) {
|
|
2521
|
+
if (r.email) vendorEmails.add(r.email.toLowerCase());
|
|
2522
|
+
}
|
|
2523
|
+
const vuRows = await dataSource.query(`SELECT DISTINCT LOWER(TRIM(u.email)) AS email
|
|
2524
|
+
FROM users u
|
|
2525
|
+
LEFT JOIN user_groups g ON g.id = u."groupId"
|
|
2526
|
+
WHERE COALESCE(u.deleted, false) = false
|
|
2527
|
+
AND (LOWER(g.name) LIKE '%vendor%' OR u."groupId" = 5)`).catch(() => []);
|
|
2528
|
+
for (const r of vuRows) {
|
|
2529
|
+
if (r.email) vendorEmails.add(r.email.toLowerCase());
|
|
2530
|
+
}
|
|
2531
|
+
} catch {
|
|
2532
|
+
}
|
|
2533
|
+
return Array.from(emails).filter((e) => !vendorEmails.has(e.toLowerCase()));
|
|
2546
2534
|
}
|
|
2547
2535
|
__name(getAdminRecipientEmails, "getAdminRecipientEmails");
|
|
2548
2536
|
function formatBodyForEmailHtml(body) {
|
|
@@ -2776,6 +2764,8 @@ function initWhatsappTriggerDispatcher(deps) {
|
|
|
2776
2764
|
if (initialized) return;
|
|
2777
2765
|
initialized = true;
|
|
2778
2766
|
const { dataSource, entityMap, getCms } = deps;
|
|
2767
|
+
void dataSource.query(`ALTER TYPE "order_notification_bindings_channel_enum" ADD VALUE IF NOT EXISTS 'mobile'`).catch(() => {
|
|
2768
|
+
});
|
|
2779
2769
|
notificationTriggerEmitter.onAnyTrigger((triggerKey, payload) => {
|
|
2780
2770
|
void handleTrigger(triggerKey, payload, dataSource, entityMap, getCms).catch((err) => {
|
|
2781
2771
|
console.error("[order-notifications]", triggerKey, err);
|
|
@@ -2835,4 +2825,4 @@ async function resendOrderNotification(triggerKey, orderId, deps) {
|
|
|
2835
2825
|
}
|
|
2836
2826
|
__name(resendOrderNotification, "resendOrderNotification");
|
|
2837
2827
|
|
|
2838
|
-
export { CHAT_EMAIL_LOG, EmailService, WhatsAppService, buildChatbotSystemPromptWithEmailTool, buildEventOrderTemplateVariables, buildTranscriptForLeadEmail, detectChatLeadIntent, emailPlugin, emailTemplates, getSettingsGroup, initWhatsappTriggerDispatcher, isWhatsAppPluginEnabled, joinRecipientsForSend, mergeWhatsAppConfigLayers, parseEmailRecipientsFromConfig, parseIntentRecipientEmails, queueWhatsApp, registerWhatsAppQueueProcessor, renderEmail, renderLayout, resendOrderNotification, resolveChatEmailToolSettings, sendChatLeadEmail, sendFcmPushNotification, serializeEmailRecipients,
|
|
2828
|
+
export { CHAT_EMAIL_LOG, EmailService, WhatsAppService, buildChatbotSystemPromptWithEmailTool, buildEventOrderTemplateVariables, buildTranscriptForLeadEmail, detectChatLeadIntent, emailPlugin, emailTemplates, getSettingsGroup, initWhatsappTriggerDispatcher, isWhatsAppPluginEnabled, joinRecipientsForSend, mergeWhatsAppConfigLayers, parseEmailRecipientsFromConfig, parseIntentRecipientEmails, queueWhatsApp, registerWhatsAppQueueProcessor, renderEmail, renderLayout, resendOrderNotification, resolveChatEmailToolSettings, sendChatLeadEmail, sendFcmPushNotification, serializeEmailRecipients, whatsAppConfigured };
|