@infuro/cms-core 1.0.57 → 1.0.58

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 CHANGED
@@ -887,7 +887,7 @@ var init_admin_config_context = __esm({
887
887
  var CMS_VERSION;
888
888
  var init_cms_version = __esm({
889
889
  "src/lib/cms-version.ts"() {
890
- CMS_VERSION = "1.0.57" ;
890
+ CMS_VERSION = "1.0.58" ;
891
891
  }
892
892
  });
893
893
  function useCatalogCategories(enabled = true) {
package/dist/admin.js CHANGED
@@ -853,7 +853,7 @@ var init_admin_config_context = __esm({
853
853
  var CMS_VERSION;
854
854
  var init_cms_version = __esm({
855
855
  "src/lib/cms-version.ts"() {
856
- CMS_VERSION = "1.0.57" ;
856
+ CMS_VERSION = "1.0.58" ;
857
857
  }
858
858
  });
859
859
  function useCatalogCategories(enabled = true) {
package/dist/api.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkCMXNHMHP_cjs = require('./chunk-CMXNHMHP.cjs');
3
+ var chunkBHUEXLD2_cjs = require('./chunk-BHUEXLD2.cjs');
4
4
  require('./chunk-XQ3QUHWR.cjs');
5
5
  require('./chunk-HY3AXLOI.cjs');
6
- require('./chunk-JN4AFHZ4.cjs');
6
+ require('./chunk-HXLC56ZK.cjs');
7
7
  require('./chunk-UCKN4BBY.cjs');
8
8
  require('./chunk-7NMT3GBR.cjs');
9
9
  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 chunkCMXNHMHP_cjs.createAnalyticsHandlers; }
25
+ get: function () { return chunkBHUEXLD2_cjs.createAnalyticsHandlers; }
26
26
  });
27
27
  Object.defineProperty(exports, "createBlogBySlugHandler", {
28
28
  enumerable: true,
29
- get: function () { return chunkCMXNHMHP_cjs.createBlogBySlugHandler; }
29
+ get: function () { return chunkBHUEXLD2_cjs.createBlogBySlugHandler; }
30
30
  });
31
31
  Object.defineProperty(exports, "createChangePasswordHandler", {
32
32
  enumerable: true,
33
- get: function () { return chunkCMXNHMHP_cjs.createChangePasswordHandler; }
33
+ get: function () { return chunkBHUEXLD2_cjs.createChangePasswordHandler; }
34
34
  });
35
35
  Object.defineProperty(exports, "createCmsApiHandler", {
36
36
  enumerable: true,
37
- get: function () { return chunkCMXNHMHP_cjs.createCmsApiHandler; }
37
+ get: function () { return chunkBHUEXLD2_cjs.createCmsApiHandler; }
38
38
  });
39
39
  Object.defineProperty(exports, "createCrudByIdHandler", {
40
40
  enumerable: true,
41
- get: function () { return chunkCMXNHMHP_cjs.createCrudByIdHandler; }
41
+ get: function () { return chunkBHUEXLD2_cjs.createCrudByIdHandler; }
42
42
  });
43
43
  Object.defineProperty(exports, "createCrudHandler", {
44
44
  enumerable: true,
45
- get: function () { return chunkCMXNHMHP_cjs.createCrudHandler; }
45
+ get: function () { return chunkBHUEXLD2_cjs.createCrudHandler; }
46
46
  });
47
47
  Object.defineProperty(exports, "createDashboardStatsHandler", {
48
48
  enumerable: true,
49
- get: function () { return chunkCMXNHMHP_cjs.createDashboardStatsHandler; }
49
+ get: function () { return chunkBHUEXLD2_cjs.createDashboardStatsHandler; }
50
50
  });
51
51
  Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
52
52
  enumerable: true,
53
- get: function () { return chunkCMXNHMHP_cjs.createEcommerceAnalyticsHandler; }
53
+ get: function () { return chunkBHUEXLD2_cjs.createEcommerceAnalyticsHandler; }
54
54
  });
55
55
  Object.defineProperty(exports, "createForgotPasswordHandler", {
56
56
  enumerable: true,
57
- get: function () { return chunkCMXNHMHP_cjs.createForgotPasswordHandler; }
57
+ get: function () { return chunkBHUEXLD2_cjs.createForgotPasswordHandler; }
58
58
  });
59
59
  Object.defineProperty(exports, "createFormBySlugHandler", {
60
60
  enumerable: true,
61
- get: function () { return chunkCMXNHMHP_cjs.createFormBySlugHandler; }
61
+ get: function () { return chunkBHUEXLD2_cjs.createFormBySlugHandler; }
62
62
  });
63
63
  Object.defineProperty(exports, "createInviteAcceptHandler", {
64
64
  enumerable: true,
65
- get: function () { return chunkCMXNHMHP_cjs.createInviteAcceptHandler; }
65
+ get: function () { return chunkBHUEXLD2_cjs.createInviteAcceptHandler; }
66
66
  });
67
67
  Object.defineProperty(exports, "createJobScheduleHandlers", {
68
68
  enumerable: true,
69
- get: function () { return chunkCMXNHMHP_cjs.createJobScheduleHandlers; }
69
+ get: function () { return chunkBHUEXLD2_cjs.createJobScheduleHandlers; }
70
70
  });
71
71
  Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
72
72
  enumerable: true,
73
- get: function () { return chunkCMXNHMHP_cjs.createLlmAgentKnowledgeHandlers; }
73
+ get: function () { return chunkBHUEXLD2_cjs.createLlmAgentKnowledgeHandlers; }
74
74
  });
75
75
  Object.defineProperty(exports, "createMediaZipExtractHandler", {
76
76
  enumerable: true,
77
- get: function () { return chunkCMXNHMHP_cjs.createMediaZipExtractHandler; }
77
+ get: function () { return chunkBHUEXLD2_cjs.createMediaZipExtractHandler; }
78
78
  });
79
79
  Object.defineProperty(exports, "createSetPasswordHandler", {
80
80
  enumerable: true,
81
- get: function () { return chunkCMXNHMHP_cjs.createSetPasswordHandler; }
81
+ get: function () { return chunkBHUEXLD2_cjs.createSetPasswordHandler; }
82
82
  });
83
83
  Object.defineProperty(exports, "createSettingsApiHandlers", {
84
84
  enumerable: true,
85
- get: function () { return chunkCMXNHMHP_cjs.createSettingsApiHandlers; }
85
+ get: function () { return chunkBHUEXLD2_cjs.createSettingsApiHandlers; }
86
86
  });
87
87
  Object.defineProperty(exports, "createStorefrontApiHandler", {
88
88
  enumerable: true,
89
- get: function () { return chunkCMXNHMHP_cjs.createStorefrontApiHandler; }
89
+ get: function () { return chunkBHUEXLD2_cjs.createStorefrontApiHandler; }
90
90
  });
91
91
  Object.defineProperty(exports, "createUploadHandler", {
92
92
  enumerable: true,
93
- get: function () { return chunkCMXNHMHP_cjs.createUploadHandler; }
93
+ get: function () { return chunkBHUEXLD2_cjs.createUploadHandler; }
94
94
  });
95
95
  Object.defineProperty(exports, "createUserAuthApiRouter", {
96
96
  enumerable: true,
97
- get: function () { return chunkCMXNHMHP_cjs.createUserAuthApiRouter; }
97
+ get: function () { return chunkBHUEXLD2_cjs.createUserAuthApiRouter; }
98
98
  });
99
99
  Object.defineProperty(exports, "createUserAvatarHandler", {
100
100
  enumerable: true,
101
- get: function () { return chunkCMXNHMHP_cjs.createUserAvatarHandler; }
101
+ get: function () { return chunkBHUEXLD2_cjs.createUserAvatarHandler; }
102
102
  });
103
103
  Object.defineProperty(exports, "createUserProfileHandler", {
104
104
  enumerable: true,
105
- get: function () { return chunkCMXNHMHP_cjs.createUserProfileHandler; }
105
+ get: function () { return chunkBHUEXLD2_cjs.createUserProfileHandler; }
106
106
  });
107
107
  Object.defineProperty(exports, "createUsersApiHandlers", {
108
108
  enumerable: true,
109
- get: function () { return chunkCMXNHMHP_cjs.createUsersApiHandlers; }
109
+ get: function () { return chunkBHUEXLD2_cjs.createUsersApiHandlers; }
110
110
  });
111
111
  Object.defineProperty(exports, "createVendorDashboardHandler", {
112
112
  enumerable: true,
113
- get: function () { return chunkCMXNHMHP_cjs.createVendorDashboardHandler; }
113
+ get: function () { return chunkBHUEXLD2_cjs.createVendorDashboardHandler; }
114
114
  });
115
115
  Object.defineProperty(exports, "createVendorOnboardHandlers", {
116
116
  enumerable: true,
117
- get: function () { return chunkCMXNHMHP_cjs.createVendorOnboardHandlers; }
117
+ get: function () { return chunkBHUEXLD2_cjs.createVendorOnboardHandlers; }
118
118
  });
119
119
  Object.defineProperty(exports, "getPublicSettingsGroup", {
120
120
  enumerable: true,
121
- get: function () { return chunkCMXNHMHP_cjs.getPublicSettingsGroup; }
121
+ get: function () { return chunkBHUEXLD2_cjs.getPublicSettingsGroup; }
122
122
  });
123
123
  Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
124
124
  enumerable: true,
125
- get: function () { return chunkCMXNHMHP_cjs.mergeGuardrailsIntoSystemPrompt; }
125
+ get: function () { return chunkBHUEXLD2_cjs.mergeGuardrailsIntoSystemPrompt; }
126
126
  });
127
127
  Object.defineProperty(exports, "parseLlmAgentValidationRules", {
128
128
  enumerable: true,
129
- get: function () { return chunkCMXNHMHP_cjs.parseLlmAgentValidationRules; }
129
+ get: function () { return chunkBHUEXLD2_cjs.parseLlmAgentValidationRules; }
130
130
  });
131
131
  Object.defineProperty(exports, "simpleDecrypt", {
132
132
  enumerable: true,
133
- get: function () { return chunkCMXNHMHP_cjs.simpleDecrypt; }
133
+ get: function () { return chunkBHUEXLD2_cjs.simpleDecrypt; }
134
134
  });
135
135
  Object.defineProperty(exports, "simpleEncrypt", {
136
136
  enumerable: true,
137
- get: function () { return chunkCMXNHMHP_cjs.simpleEncrypt; }
137
+ get: function () { return chunkBHUEXLD2_cjs.simpleEncrypt; }
138
138
  });
139
139
  Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
140
140
  enumerable: true,
141
- get: function () { return chunkCMXNHMHP_cjs.validateUserMessageAgainstAgentRules; }
141
+ get: function () { return chunkBHUEXLD2_cjs.validateUserMessageAgainstAgentRules; }
142
142
  });
143
143
  Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
144
144
  enumerable: true,
145
- get: function () { return chunkCMXNHMHP_cjs.validateUserMessageAgainstStructuredRules; }
145
+ get: function () { return chunkBHUEXLD2_cjs.validateUserMessageAgainstStructuredRules; }
146
146
  });
147
147
  Object.defineProperty(exports, "createCmsAuthBundle", {
148
148
  enumerable: true,
package/dist/api.js CHANGED
@@ -1,7 +1,7 @@
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-BAUV5FZQ.js';
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-AGU3B5JW.js';
2
2
  import './chunk-GO7PPYNU.js';
3
3
  import './chunk-3K5AIEIZ.js';
4
- import './chunk-CTXBYO2J.js';
4
+ import './chunk-HYW3MUXT.js';
5
5
  import './chunk-HCIRL37O.js';
6
6
  import './chunk-JXF23MPG.js';
7
7
  import './chunk-L3525VXI.js';
@@ -1,6 +1,6 @@
1
1
  import { JOB_RUNNER_QUEUE } from './chunk-GO7PPYNU.js';
2
2
  import { validateInventoryForConfirmedOrderLines, orderStatusHoldsStock, reconcileOrderInventoryBetweenSnapshots, orderInventorySnapshotFromRow, validateInventoryForOrderBecomingConfirmed } from './chunk-3K5AIEIZ.js';
3
- import { resolveChatEmailToolSettings, CHAT_EMAIL_LOG, detectChatLeadIntent, parseIntentRecipientEmails, sendChatLeadEmail, buildTranscriptForLeadEmail, buildChatbotSystemPromptWithEmailTool, sendFcmPushNotification, parseEmailRecipientsFromConfig, isWhatsAppPluginEnabled, mergeWhatsAppConfigLayers, whatsAppConfigured, WhatsAppService, registerWhatsAppQueueProcessor, emailPlugin, initWhatsappTriggerDispatcher } from './chunk-CTXBYO2J.js';
3
+ import { resolveChatEmailToolSettings, CHAT_EMAIL_LOG, detectChatLeadIntent, parseIntentRecipientEmails, sendChatLeadEmail, buildTranscriptForLeadEmail, buildChatbotSystemPromptWithEmailTool, validateFcmCredentials, sendFcmPushNotification, parseEmailRecipientsFromConfig, isWhatsAppPluginEnabled, mergeWhatsAppConfigLayers, whatsAppConfigured, WhatsAppService, registerWhatsAppQueueProcessor, emailPlugin, initWhatsappTriggerDispatcher } from './chunk-HYW3MUXT.js';
4
4
  import { inviteStatusForActivation } from './chunk-JXF23MPG.js';
5
5
  import { queueEmail, queueVendorOnboardEmails, registerEmailQueueProcessor } from './chunk-L3525VXI.js';
6
6
  import { mergeEmailLayoutCompanyDetails, unwrapErpReadData, mapErpPayloadToFulfillment, extractChildOrderRefsFromSalePayload, mapErpPayloadToInvoiceNumber, streamOrderInvoicePdf } from './chunk-2KUCQVAQ.js';
@@ -12056,6 +12056,7 @@ var UserDeviceToken = class {
12056
12056
  __name(this, "UserDeviceToken");
12057
12057
  }
12058
12058
  id;
12059
+ /** Staff/vendor app store. Null for customer/marketplace tokens (membership is `vendor_customers`). */
12059
12060
  vendorId;
12060
12061
  vendor;
12061
12062
  userId;
@@ -12076,13 +12077,15 @@ _ts_decorate2([
12076
12077
  _ts_decorate2([
12077
12078
  Column({
12078
12079
  type: "integer",
12079
- name: "vendor_id"
12080
+ name: "vendor_id",
12081
+ nullable: true
12080
12082
  }),
12081
- _ts_metadata2("design:type", Number)
12083
+ _ts_metadata2("design:type", Object)
12082
12084
  ], UserDeviceToken.prototype, "vendorId", void 0);
12083
12085
  _ts_decorate2([
12084
12086
  ManyToOne("Vendor", {
12085
- onDelete: "CASCADE"
12087
+ onDelete: "CASCADE",
12088
+ nullable: true
12086
12089
  }),
12087
12090
  JoinColumn({
12088
12091
  name: "vendor_id"
@@ -12179,6 +12182,22 @@ UserDeviceToken = _ts_decorate2([
12179
12182
  ], UserDeviceToken);
12180
12183
 
12181
12184
  // src/api/device-tokens-handlers.ts
12185
+ function parseRequiredPositiveInt(value, field) {
12186
+ const n = parseInt(String(value ?? "").trim(), 10);
12187
+ if (!Number.isFinite(n) || n <= 0) {
12188
+ return {
12189
+ error: `${field} must be a positive integer`
12190
+ };
12191
+ }
12192
+ return n;
12193
+ }
12194
+ __name(parseRequiredPositiveInt, "parseRequiredPositiveInt");
12195
+ function parseOptionalVendorId(value) {
12196
+ if (value == null) return null;
12197
+ if (typeof value === "string" && value.trim() === "") return null;
12198
+ return parseRequiredPositiveInt(value, "vendor_id");
12199
+ }
12200
+ __name(parseOptionalVendorId, "parseOptionalVendorId");
12182
12201
  function createDeviceTokensHandlers(config) {
12183
12202
  const { dataSource, entityMap, json } = config;
12184
12203
  return /* @__PURE__ */ __name(async function handleDeviceTokensApi(req, pathSegments) {
@@ -12250,18 +12269,28 @@ function createDeviceTokensHandlers(config) {
12250
12269
  if (method === "POST") {
12251
12270
  try {
12252
12271
  const body = await req.json().catch(() => ({}));
12253
- const vendorId = body.vendor_id?.trim();
12254
- const userId = body.user_id?.trim();
12272
+ const vendorParsed = parseOptionalVendorId(body.vendor_id);
12273
+ const userParsed = parseRequiredPositiveInt(body.user_id, "user_id");
12255
12274
  const token = body.token?.trim();
12256
12275
  const platformRaw = body.platform?.trim().toLowerCase();
12257
- if (!vendorId || !userId || !token || !platformRaw) {
12276
+ if (vendorParsed !== null && typeof vendorParsed === "object") {
12258
12277
  return json({
12259
12278
  success: false,
12260
- error: "vendor_id, user_id, token, and platform (android|ios) are required"
12279
+ error: vendorParsed.error
12261
12280
  }, {
12262
12281
  status: 400
12263
12282
  });
12264
12283
  }
12284
+ if (typeof userParsed === "object" || !token || !platformRaw) {
12285
+ return json({
12286
+ success: false,
12287
+ error: (typeof userParsed === "object" ? userParsed.error : null) || "user_id, token, and platform (android|ios) are required"
12288
+ }, {
12289
+ status: 400
12290
+ });
12291
+ }
12292
+ const vendorId = vendorParsed;
12293
+ const userId = userParsed;
12265
12294
  if (platformRaw !== "android" && platformRaw !== "ios") {
12266
12295
  return json({
12267
12296
  success: false,
@@ -12327,13 +12356,35 @@ function createDeviceTokensHandlers(config) {
12327
12356
  if (method === "GET") {
12328
12357
  try {
12329
12358
  const url = new URL(req.url);
12330
- const userId = url.searchParams.get("userId")?.trim();
12331
- const vendorId = url.searchParams.get("vendorId")?.trim();
12359
+ const userIdRaw = url.searchParams.get("userId")?.trim();
12360
+ const vendorIdRaw = url.searchParams.get("vendorId")?.trim();
12332
12361
  const whereCondition = {
12333
12362
  isActive: true
12334
12363
  };
12335
- if (userId) whereCondition.userId = userId;
12336
- if (vendorId) whereCondition.vendorId = vendorId;
12364
+ if (userIdRaw) {
12365
+ const userId = parseRequiredPositiveInt(userIdRaw, "userId");
12366
+ if (typeof userId === "object") {
12367
+ return json({
12368
+ success: false,
12369
+ error: userId.error
12370
+ }, {
12371
+ status: 400
12372
+ });
12373
+ }
12374
+ whereCondition.userId = userId;
12375
+ }
12376
+ if (vendorIdRaw) {
12377
+ const vendorId = parseRequiredPositiveInt(vendorIdRaw, "vendorId");
12378
+ if (typeof vendorId === "object") {
12379
+ return json({
12380
+ success: false,
12381
+ error: vendorId.error
12382
+ }, {
12383
+ status: 400
12384
+ });
12385
+ }
12386
+ whereCondition.vendorId = vendorId;
12387
+ }
12337
12388
  const tokens = await tokenRepo.find({
12338
12389
  where: whereCondition,
12339
12390
  order: {
@@ -12360,16 +12411,17 @@ function createDeviceTokensHandlers(config) {
12360
12411
  if (method === "DELETE") {
12361
12412
  try {
12362
12413
  const body = await req.json().catch(() => ({}));
12363
- const userId = body.user_id?.trim();
12414
+ const userParsed = parseRequiredPositiveInt(body.user_id, "user_id");
12364
12415
  const token = body.token?.trim();
12365
- if (!userId || !token) {
12416
+ if (typeof userParsed === "object" || !token) {
12366
12417
  return json({
12367
12418
  success: false,
12368
- error: "user_id and token are required to deactivate"
12419
+ error: (typeof userParsed === "object" ? userParsed.error : null) || "user_id and token are required to deactivate"
12369
12420
  }, {
12370
12421
  status: 400
12371
12422
  });
12372
12423
  }
12424
+ const userId = userParsed;
12373
12425
  await tokenRepo.update({
12374
12426
  userId,
12375
12427
  token
@@ -29791,7 +29843,7 @@ function createCmsApiHandler(config) {
29791
29843
  status: 400
29792
29844
  });
29793
29845
  }
29794
- const { resendOrderNotification } = await import('./order-notification-dispatcher-AT4IFAGL.js');
29846
+ const { resendOrderNotification } = await import('./order-notification-dispatcher-64WDCHHG.js');
29795
29847
  const result = await resendOrderNotification(triggerKey, orderId, {
29796
29848
  dataSource,
29797
29849
  entityMap,