@infuro/cms-core 1.0.36 → 1.0.39

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 (29) hide show
  1. package/dist/admin.cjs +459 -496
  2. package/dist/admin.js +459 -496
  3. package/dist/api.cjs +36 -36
  4. package/dist/api.js +4 -4
  5. package/dist/auth.cjs +51 -51
  6. package/dist/auth.js +3 -3
  7. package/dist/{chunk-COBORIJH.cjs → chunk-22FFHLTO.cjs} +39 -56
  8. package/dist/{chunk-X6H5VBQ2.cjs → chunk-E6WVP7BK.cjs} +6 -6
  9. package/dist/{chunk-2AEVFOQP.cjs → chunk-ERJK5QXN.cjs} +418 -139
  10. package/dist/{chunk-VMY2S32H.js → chunk-NNQBWDCI.js} +39 -56
  11. package/dist/{chunk-WO2DW4AU.cjs → chunk-OIGCAGH7.cjs} +7 -7
  12. package/dist/{chunk-UF3BYUXY.js → chunk-P7QCLE5W.js} +4 -3
  13. package/dist/{chunk-FG6I64HP.js → chunk-SBRBR3VO.js} +1 -1
  14. package/dist/{chunk-JS2W7XZ4.js → chunk-SFDZMGHD.js} +351 -72
  15. package/dist/{chunk-LI2IXVAY.js → chunk-UXMDSNIG.js} +1 -1
  16. package/dist/{chunk-KPKFNLQQ.cjs → chunk-WMXPKKXU.cjs} +4 -3
  17. package/dist/index.cjs +260 -260
  18. package/dist/index.d.cts +12 -5
  19. package/dist/index.d.ts +12 -5
  20. package/dist/index.js +8 -8
  21. package/dist/migrations/1775500000000-RssFeedsAndArticles.ts +0 -1
  22. package/dist/migrations/1775700000000-JobSchedules.ts +0 -1
  23. package/dist/migrations/1781260000000-RenameWhatsappTriggerBindingsToOrderNotificationBindings.ts +92 -0
  24. package/dist/migrations/1781270000000-ComboVendorId.ts +58 -0
  25. package/dist/{whatsapp-trigger-dispatcher-ONHXI7UY.cjs → order-notification-dispatcher-RU7BTGGX.cjs} +3 -4
  26. package/dist/{whatsapp-trigger-dispatcher-PWFI4FKP.js → order-notification-dispatcher-XWIJYDGA.js} +1 -2
  27. package/dist/{rbac-debug-db-HWP65A4O.cjs → rbac-debug-db-KHG4FJC3.cjs} +2 -2
  28. package/dist/{rbac-debug-db-QJH3AD34.js → rbac-debug-db-QWHOENBR.js} +1 -1
  29. package/package.json +147 -147
@@ -3,7 +3,6 @@
3
3
  var chunkUCKN4BBY_cjs = require('./chunk-UCKN4BBY.cjs');
4
4
  var chunkXW5ATPRW_cjs = require('./chunk-XW5ATPRW.cjs');
5
5
  var chunkOOTLNH63_cjs = require('./chunk-OOTLNH63.cjs');
6
- var chunkSPQFNIYJ_cjs = require('./chunk-SPQFNIYJ.cjs');
7
6
  var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
8
7
  var clientSes = require('@aws-sdk/client-ses');
9
8
  var nodemailer = require('nodemailer');
@@ -440,9 +439,9 @@ var WhatsAppService = class {
440
439
  let body = opts.body?.trim() ?? "";
441
440
  const variables = opts.variables ?? {};
442
441
  if (opts.templateKey?.trim() && this.getMessageTemplateRow) {
443
- const { resolveEventOrderTemplate: resolveEventOrderTemplate2, EVENT_ORDER_TEMPLATE_KEY } = await import('./event-order-defaults-EMWBIGL3.cjs');
442
+ const { resolveEventOrderTemplate, EVENT_ORDER_TEMPLATE_KEY } = await import('./event-order-defaults-EMWBIGL3.cjs');
444
443
  if (opts.templateKey.trim() === EVENT_ORDER_TEMPLATE_KEY) {
445
- const resolved = await resolveEventOrderTemplate2("whatsapp", async (ch, key) => {
444
+ const resolved = await resolveEventOrderTemplate("whatsapp", async (ch, key) => {
446
445
  const row = await this.getMessageTemplateRow(ch, key);
447
446
  if (!row) return null;
448
447
  return {
@@ -2040,7 +2039,7 @@ function emailPlugin(config) {
2040
2039
  }
2041
2040
  chunkUSNT2KNT_cjs.__name(emailPlugin, "emailPlugin");
2042
2041
 
2043
- // src/lib/whatsapp-trigger-dispatcher.ts
2042
+ // src/lib/order-notification-dispatcher.ts
2044
2043
  var initialized = false;
2045
2044
  function maskPhone3(raw) {
2046
2045
  const digits = String(raw ?? "").replace(/\D/g, "");
@@ -2094,48 +2093,52 @@ async function isTriggerCatalogEnabled(triggerKey, dataSource, entityMap) {
2094
2093
  }
2095
2094
  }
2096
2095
  chunkUSNT2KNT_cjs.__name(isTriggerCatalogEnabled, "isTriggerCatalogEnabled");
2097
- async function loadBoundWhatsAppTemplate(triggerKey, dataSource, entityMap) {
2098
- if (!entityMap.whatsapp_trigger_bindings || !entityMap.message_templates) {
2099
- console.warn("[order-notifications] bindings or message_templates missing from entityMap");
2096
+ async function loadBoundTemplate(triggerKey, channel, dataSource, entityMap) {
2097
+ if (!entityMap.order_notification_bindings || !entityMap.message_templates) {
2098
+ console.warn("[order-notifications] order_notification_bindings or message_templates missing from entityMap");
2100
2099
  return null;
2101
2100
  }
2102
- const binding = await dataSource.getRepository(entityMap.whatsapp_trigger_bindings).findOne({
2101
+ const binding = await dataSource.getRepository(entityMap.order_notification_bindings).findOne({
2103
2102
  where: {
2104
2103
  triggerKey,
2104
+ channel,
2105
2105
  enabled: true
2106
2106
  }
2107
2107
  });
2108
2108
  if (!binding) {
2109
- console.warn("[order-notifications] no whatsapp_trigger_bindings row", {
2110
- triggerKey
2109
+ console.warn("[order-notifications] no order_notification_bindings row", {
2110
+ triggerKey,
2111
+ channel
2111
2112
  });
2112
2113
  return null;
2113
2114
  }
2114
2115
  const templateId = binding.messageTemplateId;
2115
2116
  if (templateId == null) {
2116
2117
  console.warn("[order-notifications] binding exists but no template selected", {
2117
- triggerKey
2118
+ triggerKey,
2119
+ channel
2118
2120
  });
2119
2121
  return null;
2120
2122
  }
2121
2123
  const template = await dataSource.getRepository(entityMap.message_templates).findOne({
2122
2124
  where: {
2123
2125
  id: templateId,
2124
- channel: "whatsapp",
2126
+ channel,
2125
2127
  deleted: false,
2126
2128
  enabled: true
2127
2129
  }
2128
2130
  });
2129
2131
  if (!template) {
2130
- console.warn("[order-notifications] bound WhatsApp template not found or disabled", {
2132
+ console.warn("[order-notifications] bound template not found or disabled", {
2131
2133
  triggerKey,
2134
+ channel,
2132
2135
  templateId
2133
2136
  });
2134
2137
  return null;
2135
2138
  }
2136
2139
  return template;
2137
2140
  }
2138
- chunkUSNT2KNT_cjs.__name(loadBoundWhatsAppTemplate, "loadBoundWhatsAppTemplate");
2141
+ chunkUSNT2KNT_cjs.__name(loadBoundTemplate, "loadBoundTemplate");
2139
2142
  function mergeTriggerVariables(payload, rich) {
2140
2143
  const basic = {
2141
2144
  orderId: String(payload.orderId ?? ""),
@@ -2156,43 +2159,16 @@ function mergeTriggerVariables(payload, rich) {
2156
2159
  };
2157
2160
  }
2158
2161
  chunkUSNT2KNT_cjs.__name(mergeTriggerVariables, "mergeTriggerVariables");
2159
- async function sendOrderPlacedEmail(orderId, dataSource, entityMap, getCms, variables, contactEmail) {
2160
- if (!entityMap.message_templates) return;
2161
- const templateRepo = dataSource.getRepository(entityMap.message_templates);
2162
- const getTemplateRow = /* @__PURE__ */ chunkUSNT2KNT_cjs.__name(async (channel, templateKey) => {
2163
- const row = await templateRepo.findOne({
2164
- where: {
2165
- channel,
2166
- templateKey,
2167
- deleted: false
2168
- }
2169
- });
2170
- if (!row) return null;
2171
- const r = row;
2172
- return {
2173
- subject: r.subject,
2174
- body: r.body,
2175
- externalTemplateRef: r.externalTemplateRef,
2176
- name: r.name,
2177
- language: r.providerMeta?.language ?? null,
2178
- paramOrder: r.providerMeta?.paramOrder ?? null,
2179
- enabled: r.enabled
2180
- };
2181
- }, "getTemplateRow");
2182
- const resolved = await chunkSPQFNIYJ_cjs.resolveEventOrderTemplate("email", getTemplateRow, null);
2183
- if (!resolved?.enabled) {
2184
- console.warn("[order-notifications] email template disabled or missing for order_placed", {
2185
- orderId
2186
- });
2187
- return;
2188
- }
2162
+ async function sendEmailForTrigger(triggerKey, orderId, variables, contactEmail, dataSource, entityMap, getCms) {
2163
+ const template = await loadBoundTemplate(triggerKey, "email", dataSource, entityMap);
2164
+ if (!template) return;
2189
2165
  const [branding, emailSettings] = await Promise.all([
2190
2166
  getSettingsGroup(dataSource, entityMap, "branding"),
2191
2167
  getSettingsGroup(dataSource, entityMap, "email")
2192
2168
  ]);
2193
2169
  const companyDetails = mergeEmailLayoutCompanyDetails(branding, emailSettings);
2194
- const subject = chunkOOTLNH63_cjs.applyTemplateVars(resolved.subject ?? "Order confirmed", variables);
2195
- const bodyHtml = chunkOOTLNH63_cjs.applyTemplateVars(resolved.body, variables);
2170
+ const subject = chunkOOTLNH63_cjs.applyTemplateVars(template.subject ?? "Order update", variables);
2171
+ const bodyHtml = chunkOOTLNH63_cjs.applyTemplateVars(template.body, variables);
2196
2172
  const html = renderLayout({
2197
2173
  bodyHtml,
2198
2174
  companyDetails
@@ -2205,15 +2181,21 @@ async function sendOrderPlacedEmail(orderId, dataSource, entityMap, getCms, vari
2205
2181
  text: bodyHtml.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim()
2206
2182
  });
2207
2183
  console.log("[order-notifications] email queued", {
2184
+ triggerKey,
2208
2185
  orderId,
2209
2186
  to: contactEmail
2210
2187
  });
2211
2188
  }
2212
- chunkUSNT2KNT_cjs.__name(sendOrderPlacedEmail, "sendOrderPlacedEmail");
2189
+ chunkUSNT2KNT_cjs.__name(sendEmailForTrigger, "sendEmailForTrigger");
2213
2190
  async function sendWhatsAppForTrigger(triggerKey, orderId, phone, variables, dataSource, entityMap, getCms) {
2214
- const template = await loadBoundWhatsAppTemplate(triggerKey, dataSource, entityMap);
2191
+ const template = await loadBoundTemplate(triggerKey, "whatsapp", dataSource, entityMap);
2215
2192
  if (!template) return;
2216
- const paramOrder = template.providerMeta?.paramOrder?.length ? template.providerMeta.paramOrder : chunkSPQFNIYJ_cjs.EVENT_ORDER_WHATSAPP_PARAM_KEYS;
2193
+ const paramOrder = template.providerMeta?.paramOrder ?? [];
2194
+ if (paramOrder.length === 0) {
2195
+ console.warn("[order-notifications] WhatsApp template has no paramOrder set \u2014 variables may send blank/wrong", {
2196
+ triggerKey
2197
+ });
2198
+ }
2217
2199
  const cms = await getCms();
2218
2200
  const metaTemplateName = resolveMetaWhatsAppTemplateName({
2219
2201
  externalTemplateRef: template.externalTemplateRef,
@@ -2270,21 +2252,22 @@ async function handleTrigger(triggerKey, payload, dataSource, entityMap, getCms)
2270
2252
  const variables = mergeTriggerVariables(payload, context?.variables);
2271
2253
  const contactEmail = context?.contact.email?.trim() || "";
2272
2254
  const contactPhone = context?.contact.phone?.trim() || payload.customerPhone?.trim() || "";
2273
- if (triggerKey === "order_placed" && contactEmail) {
2274
- await sendOrderPlacedEmail(payload.orderId, dataSource, entityMap, getCms, variables, contactEmail);
2275
- } else if (triggerKey === "order_placed") {
2255
+ if (contactEmail) {
2256
+ await sendEmailForTrigger(triggerKey, payload.orderId, variables, contactEmail, dataSource, entityMap, getCms);
2257
+ } else {
2276
2258
  console.warn("[order-notifications] skip email: no customer email", {
2259
+ triggerKey,
2277
2260
  orderId: payload.orderId
2278
2261
  });
2279
2262
  }
2280
- if (!contactPhone) {
2263
+ if (contactPhone) {
2264
+ await sendWhatsAppForTrigger(triggerKey, payload.orderId, contactPhone, variables, dataSource, entityMap, getCms);
2265
+ } else {
2281
2266
  console.warn("[order-notifications] skip WhatsApp: no customer phone", {
2282
2267
  triggerKey,
2283
2268
  orderId: payload.orderId
2284
2269
  });
2285
- return;
2286
2270
  }
2287
- await sendWhatsAppForTrigger(triggerKey, payload.orderId, contactPhone, variables, dataSource, entityMap, getCms);
2288
2271
  }
2289
2272
  chunkUSNT2KNT_cjs.__name(handleTrigger, "handleTrigger");
2290
2273
  function initWhatsappTriggerDispatcher(deps) {
@@ -2296,7 +2279,7 @@ function initWhatsappTriggerDispatcher(deps) {
2296
2279
  console.error("[order-notifications]", triggerKey, err);
2297
2280
  });
2298
2281
  });
2299
- console.log("[order-notifications] dispatcher initialized (email + WhatsApp)");
2282
+ console.log("[order-notifications] dispatcher initialized (email + WhatsApp, unified via order_notification_bindings)");
2300
2283
  }
2301
2284
  chunkUSNT2KNT_cjs.__name(initWhatsappTriggerDispatcher, "initWhatsappTriggerDispatcher");
2302
2285
  async function resendOrderNotification(triggerKey, orderId, deps) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkKPKFNLQQ_cjs = require('./chunk-KPKFNLQQ.cjs');
3
+ var chunkWMXPKKXU_cjs = require('./chunk-WMXPKKXU.cjs');
4
4
  var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
5
5
  var jwt = require('next-auth/jwt');
6
6
  var _CredentialsProvider = require('next-auth/providers/credentials');
@@ -11,12 +11,12 @@ var _CredentialsProvider__default = /*#__PURE__*/_interopDefault(_CredentialsPro
11
11
 
12
12
  // src/auth/seed-permissions.ts
13
13
  async function seedAdministratorPermissions(dataSource, entityMap) {
14
- const entities = chunkKPKFNLQQ_cjs.getPermissionableEntityKeys(entityMap);
14
+ const entities = chunkWMXPKKXU_cjs.getPermissionableEntityKeys(entityMap);
15
15
  const groupRepo = dataSource.getRepository(entityMap.user_groups);
16
16
  const permRepo = dataSource.getRepository(entityMap.permissions);
17
17
  const adminGroup = await groupRepo.findOne({
18
18
  where: {
19
- name: chunkKPKFNLQQ_cjs.ADMIN_GROUP_NAME,
19
+ name: chunkWMXPKKXU_cjs.ADMIN_GROUP_NAME,
20
20
  deleted: false
21
21
  }
22
22
  });
@@ -298,18 +298,18 @@ async function checkMultiVendorEnabledViaSettingsApi() {
298
298
  chunkUSNT2KNT_cjs.__name(checkMultiVendorEnabledViaSettingsApi, "checkMultiVendorEnabledViaSettingsApi");
299
299
  function sessionUserFromNextAuthUser(user) {
300
300
  const g = user.group;
301
- const isRBACAdmin = chunkKPKFNLQQ_cjs.isSuperAdmin({
301
+ const isRBACAdmin = chunkWMXPKKXU_cjs.isSuperAdmin({
302
302
  groupId: user.groupId ?? void 0,
303
303
  groupName: g?.name,
304
304
  isRBACAdmin: false
305
305
  });
306
- const entityPerms = chunkKPKFNLQQ_cjs.permissionRowsToRecord(g?.permissions);
306
+ const entityPerms = chunkWMXPKKXU_cjs.permissionRowsToRecord(g?.permissions);
307
307
  const rawAdminAccess = user.adminAccess;
308
308
  const adminAccess = rawAdminAccess === true ? true : rawAdminAccess === false ? false : void 0;
309
309
  const vendorIds = user.vendorIds ?? [];
310
310
  const vendorRole = user.vendorRole ?? null;
311
311
  const isVendorRoleOwner = user.isVendorRoleOwner ?? false;
312
- const { isVendorPortal, isVendorOwner: isVendorOwner2 } = chunkKPKFNLQQ_cjs.vendorPortalFlagsFromUser({
312
+ const { isVendorPortal, isVendorOwner: isVendorOwner2 } = chunkWMXPKKXU_cjs.vendorPortalFlagsFromUser({
313
313
  email: user.email,
314
314
  isRBACAdmin,
315
315
  groupName: g?.name,