@infuro/cms-core 1.0.56 → 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.56" ;
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.56" ;
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 chunkJGR4ZUON_cjs = require('./chunk-JGR4ZUON.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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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 chunkJGR4ZUON_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-LI3CUI54.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';
@@ -12,7 +12,7 @@ import { retireSoftDeletedUniqueValue, activeUniqueValueExists } from './chunk-D
12
12
  import { permissionRowsToRecord, logRbac, isSuperAdmin, vendorPortalFlagsFromUser, VENDOR_SCOPED_STORE_ENTITIES, isVendorPortalUser, getPermissionableEntityKeys, VENDOR_STORE_RBAC_ENTITIES, isSuperAdminGroupName, VENDOR_RBAC_ENTITIES, VENDOR_VIEWER_ROLE_NAME, DEFAULT_VENDOR_ROLE_DEFS, VENDOR_GROUP_NAME, resolveVendorScopeFromSessionUser, canManageVendorRoles, isPlatformAdministrator, canManageVendorTeam, resolveDisabledMultiVendorScope, logEntityAccessDecision, explainSessionEntityAccess } from './chunk-JIWUVQ6B.js';
13
13
  import { queueErp } from './chunk-SYBOCAWB.js';
14
14
  import { __name } from './chunk-SHUYVCID.js';
15
- import { PrimaryGeneratedColumn, Column, Entity, CreateDateColumn, UpdateDateColumn, Unique, ManyToOne, JoinColumn, OneToMany, Index, ManyToMany, JoinTable, In, ILike, Between, MoreThanOrEqual, LessThanOrEqual, Not, MoreThan, IsNull } from 'typeorm';
15
+ import { PrimaryGeneratedColumn, Column, Entity, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, Unique, OneToMany, Index, ManyToMany, JoinTable, In, ILike, Between, MoreThanOrEqual, LessThanOrEqual, Not, MoreThan, IsNull } from 'typeorm';
16
16
  import { Country, State, City } from 'country-state-city';
17
17
  import crypto2, { randomBytes, randomUUID, createHmac, timingSafeEqual, randomInt } from 'crypto';
18
18
  import Parser from 'rss-parser';
@@ -12056,8 +12056,11 @@ 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;
12061
+ vendor;
12060
12062
  userId;
12063
+ user;
12061
12064
  token;
12062
12065
  platform;
12063
12066
  deviceId;
@@ -12073,18 +12076,38 @@ _ts_decorate2([
12073
12076
  ], UserDeviceToken.prototype, "id", void 0);
12074
12077
  _ts_decorate2([
12075
12078
  Column({
12076
- type: "uuid",
12077
- name: "vendor_id"
12079
+ type: "integer",
12080
+ name: "vendor_id",
12081
+ nullable: true
12078
12082
  }),
12079
- _ts_metadata2("design:type", String)
12083
+ _ts_metadata2("design:type", Object)
12080
12084
  ], UserDeviceToken.prototype, "vendorId", void 0);
12085
+ _ts_decorate2([
12086
+ ManyToOne("Vendor", {
12087
+ onDelete: "CASCADE",
12088
+ nullable: true
12089
+ }),
12090
+ JoinColumn({
12091
+ name: "vendor_id"
12092
+ }),
12093
+ _ts_metadata2("design:type", Object)
12094
+ ], UserDeviceToken.prototype, "vendor", void 0);
12081
12095
  _ts_decorate2([
12082
12096
  Column({
12083
- type: "uuid",
12097
+ type: "integer",
12084
12098
  name: "user_id"
12085
12099
  }),
12086
- _ts_metadata2("design:type", String)
12100
+ _ts_metadata2("design:type", Number)
12087
12101
  ], UserDeviceToken.prototype, "userId", void 0);
12102
+ _ts_decorate2([
12103
+ ManyToOne("User", {
12104
+ onDelete: "CASCADE"
12105
+ }),
12106
+ JoinColumn({
12107
+ name: "user_id"
12108
+ }),
12109
+ _ts_metadata2("design:type", Object)
12110
+ ], UserDeviceToken.prototype, "user", void 0);
12088
12111
  _ts_decorate2([
12089
12112
  Column({
12090
12113
  type: "text"
@@ -12159,6 +12182,22 @@ UserDeviceToken = _ts_decorate2([
12159
12182
  ], UserDeviceToken);
12160
12183
 
12161
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");
12162
12201
  function createDeviceTokensHandlers(config) {
12163
12202
  const { dataSource, entityMap, json } = config;
12164
12203
  return /* @__PURE__ */ __name(async function handleDeviceTokensApi(req, pathSegments) {
@@ -12230,18 +12269,28 @@ function createDeviceTokensHandlers(config) {
12230
12269
  if (method === "POST") {
12231
12270
  try {
12232
12271
  const body = await req.json().catch(() => ({}));
12233
- const vendorId = body.vendor_id?.trim();
12234
- const userId = body.user_id?.trim();
12272
+ const vendorParsed = parseOptionalVendorId(body.vendor_id);
12273
+ const userParsed = parseRequiredPositiveInt(body.user_id, "user_id");
12235
12274
  const token = body.token?.trim();
12236
12275
  const platformRaw = body.platform?.trim().toLowerCase();
12237
- if (!vendorId || !userId || !token || !platformRaw) {
12276
+ if (vendorParsed !== null && typeof vendorParsed === "object") {
12277
+ return json({
12278
+ success: false,
12279
+ error: vendorParsed.error
12280
+ }, {
12281
+ status: 400
12282
+ });
12283
+ }
12284
+ if (typeof userParsed === "object" || !token || !platformRaw) {
12238
12285
  return json({
12239
12286
  success: false,
12240
- error: "vendor_id, user_id, token, and platform (android|ios) are required"
12287
+ error: (typeof userParsed === "object" ? userParsed.error : null) || "user_id, token, and platform (android|ios) are required"
12241
12288
  }, {
12242
12289
  status: 400
12243
12290
  });
12244
12291
  }
12292
+ const vendorId = vendorParsed;
12293
+ const userId = userParsed;
12245
12294
  if (platformRaw !== "android" && platformRaw !== "ios") {
12246
12295
  return json({
12247
12296
  success: false,
@@ -12307,13 +12356,35 @@ function createDeviceTokensHandlers(config) {
12307
12356
  if (method === "GET") {
12308
12357
  try {
12309
12358
  const url = new URL(req.url);
12310
- const userId = url.searchParams.get("userId")?.trim();
12311
- const vendorId = url.searchParams.get("vendorId")?.trim();
12359
+ const userIdRaw = url.searchParams.get("userId")?.trim();
12360
+ const vendorIdRaw = url.searchParams.get("vendorId")?.trim();
12312
12361
  const whereCondition = {
12313
12362
  isActive: true
12314
12363
  };
12315
- if (userId) whereCondition.userId = userId;
12316
- 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
+ }
12317
12388
  const tokens = await tokenRepo.find({
12318
12389
  where: whereCondition,
12319
12390
  order: {
@@ -12340,16 +12411,17 @@ function createDeviceTokensHandlers(config) {
12340
12411
  if (method === "DELETE") {
12341
12412
  try {
12342
12413
  const body = await req.json().catch(() => ({}));
12343
- const userId = body.user_id?.trim();
12414
+ const userParsed = parseRequiredPositiveInt(body.user_id, "user_id");
12344
12415
  const token = body.token?.trim();
12345
- if (!userId || !token) {
12416
+ if (typeof userParsed === "object" || !token) {
12346
12417
  return json({
12347
12418
  success: false,
12348
- 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"
12349
12420
  }, {
12350
12421
  status: 400
12351
12422
  });
12352
12423
  }
12424
+ const userId = userParsed;
12353
12425
  await tokenRepo.update({
12354
12426
  userId,
12355
12427
  token
@@ -29771,7 +29843,7 @@ function createCmsApiHandler(config) {
29771
29843
  status: 400
29772
29844
  });
29773
29845
  }
29774
- const { resendOrderNotification } = await import('./order-notification-dispatcher-AT4IFAGL.js');
29846
+ const { resendOrderNotification } = await import('./order-notification-dispatcher-64WDCHHG.js');
29775
29847
  const result = await resendOrderNotification(triggerKey, orderId, {
29776
29848
  dataSource,
29777
29849
  entityMap,