@infuro/cms-core 1.0.69 → 1.0.71
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 +2834 -2683
- package/dist/admin.js +1593 -1442
- package/dist/api.cjs +41 -41
- package/dist/api.js +8 -8
- package/dist/auth.cjs +51 -51
- package/dist/auth.js +3 -3
- package/dist/{chunk-RBKVMHBH.js → chunk-3LF4RYAJ.js} +353 -23
- package/dist/{chunk-DBBYLSQP.js → chunk-7NQMGB2S.js} +136 -25
- package/dist/{chunk-DWNQTFJ5.js → chunk-CJY2HUJC.js} +19 -19
- package/dist/{chunk-SWSTGV4F.cjs → chunk-CKTRA3Q2.cjs} +9 -9
- package/dist/{chunk-53AMBXMM.js → chunk-ECUGNV2I.js} +1 -57
- package/dist/{chunk-QXAQ3V7R.cjs → chunk-FNLF6G2N.cjs} +7 -7
- package/dist/{chunk-T47VP2ZT.js → chunk-HZZTDM5J.js} +2 -2
- package/dist/{chunk-3XCTGADT.js → chunk-K6JT7BKY.js} +58 -1
- package/dist/{chunk-M5QDJOUP.cjs → chunk-K742UE6S.cjs} +1 -0
- package/dist/{chunk-6MM5OMRL.cjs → chunk-KB7EBYPR.cjs} +0 -58
- package/dist/{chunk-OXFC3DAM.cjs → chunk-KJB5LBFQ.cjs} +59 -0
- package/dist/{chunk-LXWF6T7F.cjs → chunk-LCZZ3S4I.cjs} +19 -19
- package/dist/{chunk-HGR4IA7I.cjs → chunk-NIBEGDD4.cjs} +15 -15
- package/dist/{chunk-D4LR3S77.js → chunk-NQF6H656.js} +1 -1
- package/dist/{chunk-QL44NCZC.cjs → chunk-OP624LWU.cjs} +222 -111
- package/dist/{chunk-MJDNS324.js → chunk-SCE2GIKH.js} +2 -2
- package/dist/{chunk-747MJJCZ.cjs → chunk-TTOEY7AH.cjs} +404 -74
- package/dist/{chunk-WHMIWJL7.js → chunk-W2ZTGLUH.js} +1 -0
- package/dist/{emit-order-notification-trigger-X36V4DOH.cjs → emit-order-notification-trigger-I4HQSTEN.cjs} +4 -4
- package/dist/{emit-order-notification-trigger-XKN2TWVF.js → emit-order-notification-trigger-TBXAZAPS.js} +2 -2
- package/dist/index.cjs +330 -330
- package/dist/index.js +13 -13
- package/dist/{order-assignees-handlers-JEJ5IDID.cjs → order-assignees-handlers-E6PQZP4H.cjs} +22 -3
- package/dist/{order-assignees-handlers-F7WOZHOG.js → order-assignees-handlers-YCT3Q3KC.js} +22 -3
- package/dist/{order-completion-otp-handlers-LNAZTMTS.cjs → order-completion-otp-handlers-2ZKRK5SN.cjs} +10 -10
- package/dist/{order-completion-otp-handlers-FIW7PZ6W.js → order-completion-otp-handlers-KHLZQQJX.js} +4 -4
- package/dist/{order-notification-dispatcher-GG5C4LKZ.cjs → order-notification-dispatcher-37KDVHBM.cjs} +8 -8
- package/dist/{order-notification-dispatcher-FS54ANAV.js → order-notification-dispatcher-Z3MXNF4U.js} +3 -3
- package/dist/{rbac-debug-db-IRKT6G62.js → rbac-debug-db-JK3U5UZK.js} +1 -1
- package/dist/{rbac-debug-db-2ZI3XKA4.cjs → rbac-debug-db-S3D6N6HN.cjs} +2 -2
- package/package.json +1 -1
|
@@ -4,62 +4,6 @@ var chunkXHPRD45G_cjs = require('./chunk-XHPRD45G.cjs');
|
|
|
4
4
|
var crypto = require('crypto');
|
|
5
5
|
var typeorm = require('typeorm');
|
|
6
6
|
|
|
7
|
-
// src/plugins/sms/sms-queue.ts
|
|
8
|
-
var SMS_QUEUE_NAME = "sms";
|
|
9
|
-
function registerSmsQueueProcessor(cms) {
|
|
10
|
-
const queue = cms.getPlugin("queue");
|
|
11
|
-
const sms = cms.getPlugin("sms");
|
|
12
|
-
if (!queue || !sms || typeof sms.send !== "function") return;
|
|
13
|
-
queue.registerProcessor(SMS_QUEUE_NAME, async (data) => {
|
|
14
|
-
const payload = data;
|
|
15
|
-
if (!payload.to) return;
|
|
16
|
-
if (payload.templateKey?.trim()) {
|
|
17
|
-
await sms.send({
|
|
18
|
-
to: payload.to,
|
|
19
|
-
templateKey: payload.templateKey.trim(),
|
|
20
|
-
variables: payload.variables,
|
|
21
|
-
otpCode: payload.otpCode
|
|
22
|
-
});
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (!payload.body?.trim()) return;
|
|
26
|
-
await sms.send({
|
|
27
|
-
to: payload.to,
|
|
28
|
-
body: payload.body,
|
|
29
|
-
otpCode: payload.otpCode,
|
|
30
|
-
variables: payload.variables
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
chunkXHPRD45G_cjs.__name(registerSmsQueueProcessor, "registerSmsQueueProcessor");
|
|
35
|
-
async function queueSms(cms, payload) {
|
|
36
|
-
const queue = cms.getPlugin("queue");
|
|
37
|
-
const sms = cms.getPlugin("sms");
|
|
38
|
-
if (queue) {
|
|
39
|
-
await queue.add(SMS_QUEUE_NAME, payload);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (sms && typeof sms.send === "function") {
|
|
43
|
-
if (payload.templateKey?.trim()) {
|
|
44
|
-
await sms.send({
|
|
45
|
-
to: payload.to,
|
|
46
|
-
templateKey: payload.templateKey.trim(),
|
|
47
|
-
variables: payload.variables,
|
|
48
|
-
otpCode: payload.otpCode
|
|
49
|
-
});
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (payload.body?.trim()) {
|
|
53
|
-
await sms.send({
|
|
54
|
-
to: payload.to,
|
|
55
|
-
body: payload.body,
|
|
56
|
-
otpCode: payload.otpCode,
|
|
57
|
-
variables: payload.variables
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
chunkXHPRD45G_cjs.__name(queueSms, "queueSms");
|
|
63
7
|
var OTP_TTL_MS = 10 * 60 * 1e3;
|
|
64
8
|
var MAX_SENDS_PER_HOUR = 5;
|
|
65
9
|
var MAX_VERIFY_ATTEMPTS = 8;
|
|
@@ -203,7 +147,5 @@ exports.createOtpChallenge = createOtpChallenge;
|
|
|
203
147
|
exports.generateNumericOtp = generateNumericOtp;
|
|
204
148
|
exports.hashOtpCode = hashOtpCode;
|
|
205
149
|
exports.normalizePhoneE164 = normalizePhoneE164;
|
|
206
|
-
exports.queueSms = queueSms;
|
|
207
|
-
exports.registerSmsQueueProcessor = registerSmsQueueProcessor;
|
|
208
150
|
exports.verifyAndConsumeOtpChallenge = verifyAndConsumeOtpChallenge;
|
|
209
151
|
exports.verifyOtpCodeHash = verifyOtpCodeHash;
|
|
@@ -2,6 +2,63 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkXHPRD45G_cjs = require('./chunk-XHPRD45G.cjs');
|
|
4
4
|
|
|
5
|
+
// src/plugins/sms/sms-queue.ts
|
|
6
|
+
var SMS_QUEUE_NAME = "sms";
|
|
7
|
+
function registerSmsQueueProcessor(cms) {
|
|
8
|
+
const queue = cms.getPlugin("queue");
|
|
9
|
+
const sms = cms.getPlugin("sms");
|
|
10
|
+
if (!queue || !sms || typeof sms.send !== "function") return;
|
|
11
|
+
queue.registerProcessor(SMS_QUEUE_NAME, async (data) => {
|
|
12
|
+
const payload = data;
|
|
13
|
+
if (!payload.to) return;
|
|
14
|
+
if (payload.templateKey?.trim()) {
|
|
15
|
+
await sms.send({
|
|
16
|
+
to: payload.to,
|
|
17
|
+
templateKey: payload.templateKey.trim(),
|
|
18
|
+
variables: payload.variables,
|
|
19
|
+
otpCode: payload.otpCode
|
|
20
|
+
});
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!payload.body?.trim()) return;
|
|
24
|
+
await sms.send({
|
|
25
|
+
to: payload.to,
|
|
26
|
+
body: payload.body,
|
|
27
|
+
otpCode: payload.otpCode,
|
|
28
|
+
variables: payload.variables
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
chunkXHPRD45G_cjs.__name(registerSmsQueueProcessor, "registerSmsQueueProcessor");
|
|
33
|
+
async function queueSms(cms, payload) {
|
|
34
|
+
const queue = cms.getPlugin("queue");
|
|
35
|
+
const sms = cms.getPlugin("sms");
|
|
36
|
+
if (queue) {
|
|
37
|
+
await queue.add(SMS_QUEUE_NAME, payload);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (sms && typeof sms.send === "function") {
|
|
41
|
+
if (payload.templateKey?.trim()) {
|
|
42
|
+
await sms.send({
|
|
43
|
+
to: payload.to,
|
|
44
|
+
templateKey: payload.templateKey.trim(),
|
|
45
|
+
variables: payload.variables,
|
|
46
|
+
otpCode: payload.otpCode
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (payload.body?.trim()) {
|
|
51
|
+
await sms.send({
|
|
52
|
+
to: payload.to,
|
|
53
|
+
body: payload.body,
|
|
54
|
+
otpCode: payload.otpCode,
|
|
55
|
+
variables: payload.variables
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
chunkXHPRD45G_cjs.__name(queueSms, "queueSms");
|
|
61
|
+
|
|
5
62
|
// src/plugins/whatsapp/whatsapp-queue.ts
|
|
6
63
|
var WHATSAPP_QUEUE_NAME = "whatsapp";
|
|
7
64
|
function maskPhone(raw) {
|
|
@@ -82,5 +139,7 @@ async function queueWhatsApp(cms, payload) {
|
|
|
82
139
|
}
|
|
83
140
|
chunkXHPRD45G_cjs.__name(queueWhatsApp, "queueWhatsApp");
|
|
84
141
|
|
|
142
|
+
exports.queueSms = queueSms;
|
|
85
143
|
exports.queueWhatsApp = queueWhatsApp;
|
|
144
|
+
exports.registerSmsQueueProcessor = registerSmsQueueProcessor;
|
|
86
145
|
exports.registerWhatsAppQueueProcessor = registerWhatsAppQueueProcessor;
|
|
@@ -72,24 +72,6 @@ function hasEntityPermission(record, entity, action) {
|
|
|
72
72
|
}
|
|
73
73
|
chunkXHPRD45G_cjs.__name(hasEntityPermission, "hasEntityPermission");
|
|
74
74
|
|
|
75
|
-
// src/auth/role-helpers.ts
|
|
76
|
-
var SUPER_ADMIN_GROUP_ID = 1;
|
|
77
|
-
var VENDOR_ADMIN_GROUP_ID = 5;
|
|
78
|
-
function isSuperAdmin(user) {
|
|
79
|
-
if (!user) return false;
|
|
80
|
-
if (user.groupId === SUPER_ADMIN_GROUP_ID) return true;
|
|
81
|
-
if (user.isRBACAdmin === true) return true;
|
|
82
|
-
return isSuperAdminGroupName(user.groupName);
|
|
83
|
-
}
|
|
84
|
-
chunkXHPRD45G_cjs.__name(isSuperAdmin, "isSuperAdmin");
|
|
85
|
-
function isVendorAdmin(user) {
|
|
86
|
-
if (!user?.email || isSuperAdmin(user)) return false;
|
|
87
|
-
if (user.groupId === VENDOR_ADMIN_GROUP_ID) return true;
|
|
88
|
-
if ((user.vendorIds?.length ?? 0) > 0) return true;
|
|
89
|
-
return isVendorGroupName(user.groupName);
|
|
90
|
-
}
|
|
91
|
-
chunkXHPRD45G_cjs.__name(isVendorAdmin, "isVendorAdmin");
|
|
92
|
-
|
|
93
75
|
// src/auth/vendor-scope.ts
|
|
94
76
|
var DEFAULT_VENDOR_SLUG = "default";
|
|
95
77
|
async function resolveDefaultVendorId(dataSource) {
|
|
@@ -233,6 +215,24 @@ function vendorPortalFlagsFromUser(input) {
|
|
|
233
215
|
}
|
|
234
216
|
chunkXHPRD45G_cjs.__name(vendorPortalFlagsFromUser, "vendorPortalFlagsFromUser");
|
|
235
217
|
|
|
218
|
+
// src/auth/role-helpers.ts
|
|
219
|
+
var SUPER_ADMIN_GROUP_ID = 1;
|
|
220
|
+
var VENDOR_ADMIN_GROUP_ID = 5;
|
|
221
|
+
function isSuperAdmin(user) {
|
|
222
|
+
if (!user) return false;
|
|
223
|
+
if (user.groupId === SUPER_ADMIN_GROUP_ID) return true;
|
|
224
|
+
if (user.isRBACAdmin === true) return true;
|
|
225
|
+
return isSuperAdminGroupName(user.groupName);
|
|
226
|
+
}
|
|
227
|
+
chunkXHPRD45G_cjs.__name(isSuperAdmin, "isSuperAdmin");
|
|
228
|
+
function isVendorAdmin(user) {
|
|
229
|
+
if (!user?.email || isSuperAdmin(user)) return false;
|
|
230
|
+
if (user.groupId === VENDOR_ADMIN_GROUP_ID) return true;
|
|
231
|
+
if ((user.vendorIds?.length ?? 0) > 0) return true;
|
|
232
|
+
return isVendorGroupName(user.groupName);
|
|
233
|
+
}
|
|
234
|
+
chunkXHPRD45G_cjs.__name(isVendorAdmin, "isVendorAdmin");
|
|
235
|
+
|
|
236
236
|
// src/lib/vendor-role-defaults.ts
|
|
237
237
|
var VENDOR_RBAC_ENTITIES = [
|
|
238
238
|
...VENDOR_STORE_RBAC_ENTITIES,
|
|
@@ -625,7 +625,7 @@ async function logEntityAccessDecision(dataSource, context, user, entity, action
|
|
|
625
625
|
const id = Number(user.id);
|
|
626
626
|
if (Number.isFinite(id)) {
|
|
627
627
|
try {
|
|
628
|
-
const { loadDbPermissionsForUser } = await import('./rbac-debug-db-
|
|
628
|
+
const { loadDbPermissionsForUser } = await import('./rbac-debug-db-S3D6N6HN.cjs');
|
|
629
629
|
dbPermissions = await loadDbPermissionsForUser(dataSource, id);
|
|
630
630
|
} catch (e) {
|
|
631
631
|
dbPermissions = {
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkK742UE6S_cjs = require('./chunk-K742UE6S.cjs');
|
|
4
4
|
var chunkXHPRD45G_cjs = require('./chunk-XHPRD45G.cjs');
|
|
5
5
|
|
|
6
6
|
// src/lib/emit-order-notification-trigger.ts
|
|
7
7
|
async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
8
8
|
if (!deps.entityMap.orders) {
|
|
9
|
-
|
|
9
|
+
chunkK742UE6S_cjs.notifyLog.skip("TRIGGER", "orders entity missing from entityMap", {
|
|
10
10
|
triggerKey,
|
|
11
11
|
orderId
|
|
12
12
|
});
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
const listenerCount =
|
|
15
|
+
const listenerCount = chunkK742UE6S_cjs.notificationTriggerEmitter.listenerCount("__any__");
|
|
16
16
|
if (listenerCount === 0) {
|
|
17
|
-
|
|
17
|
+
chunkK742UE6S_cjs.notifyLog.skip("TRIGGER", "no dispatcher listener \u2014 will try direct dispatch (pass getCms to createCmsApiHandler)", {
|
|
18
18
|
triggerKey,
|
|
19
19
|
orderId
|
|
20
20
|
});
|
|
@@ -30,7 +30,7 @@ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
|
30
30
|
]
|
|
31
31
|
});
|
|
32
32
|
if (!fullOrder) {
|
|
33
|
-
|
|
33
|
+
chunkK742UE6S_cjs.notifyLog.skip("TRIGGER", "order not found", {
|
|
34
34
|
triggerKey,
|
|
35
35
|
orderId
|
|
36
36
|
});
|
|
@@ -38,17 +38,17 @@ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
|
38
38
|
}
|
|
39
39
|
const fo = fullOrder;
|
|
40
40
|
const phone = fo.contact?.phone ?? null;
|
|
41
|
-
|
|
41
|
+
chunkK742UE6S_cjs.notifyLog.trigger("emit", {
|
|
42
42
|
triggerKey,
|
|
43
43
|
orderId,
|
|
44
44
|
orderNumber: fo.orderNumber ?? null,
|
|
45
|
-
phone:
|
|
45
|
+
phone: chunkK742UE6S_cjs.maskNotifyPhone(phone),
|
|
46
46
|
listeners: listenerCount,
|
|
47
47
|
vendorId: fo.vendorId ?? null,
|
|
48
48
|
source: extra?.source ?? "api"
|
|
49
49
|
});
|
|
50
50
|
if (!phone?.trim()) {
|
|
51
|
-
|
|
51
|
+
chunkK742UE6S_cjs.notifyLog.skip("WHATSAPP", "order contact has no phone", {
|
|
52
52
|
triggerKey,
|
|
53
53
|
orderId
|
|
54
54
|
});
|
|
@@ -91,15 +91,15 @@ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
|
91
91
|
refundAmount: resolvedRefundAmount
|
|
92
92
|
};
|
|
93
93
|
if (listenerCount === 0) {
|
|
94
|
-
|
|
94
|
+
chunkK742UE6S_cjs.notifyLog.trigger("direct dispatch (no in-process listener)", {
|
|
95
95
|
triggerKey,
|
|
96
96
|
orderId
|
|
97
97
|
});
|
|
98
98
|
try {
|
|
99
|
-
const { dispatchOrderNotificationDirectly } = await import('./order-notification-dispatcher-
|
|
99
|
+
const { dispatchOrderNotificationDirectly } = await import('./order-notification-dispatcher-37KDVHBM.cjs');
|
|
100
100
|
await dispatchOrderNotificationDirectly(triggerKey, triggerPayload, deps.dataSource, deps.entityMap);
|
|
101
101
|
} catch (err) {
|
|
102
|
-
|
|
102
|
+
chunkK742UE6S_cjs.notifyLog.error("TRIGGER", "direct dispatch failed", {
|
|
103
103
|
triggerKey,
|
|
104
104
|
orderId,
|
|
105
105
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -107,23 +107,23 @@ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
} else {
|
|
110
|
-
|
|
110
|
+
chunkK742UE6S_cjs.notifyLog.trigger("emit to dispatcher listener", {
|
|
111
111
|
triggerKey,
|
|
112
112
|
orderId,
|
|
113
113
|
listeners: listenerCount
|
|
114
114
|
});
|
|
115
|
-
|
|
115
|
+
chunkK742UE6S_cjs.notificationTriggerEmitter.emitTrigger(triggerKey, triggerPayload);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
chunkXHPRD45G_cjs.__name(emitOrderNotificationTrigger, "emitOrderNotificationTrigger");
|
|
119
119
|
function fireOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
|
|
120
|
-
|
|
120
|
+
chunkK742UE6S_cjs.notifyLog.trigger("FIRE", {
|
|
121
121
|
triggerKey,
|
|
122
122
|
orderId,
|
|
123
123
|
source: extra?.source ?? "api"
|
|
124
124
|
});
|
|
125
125
|
void emitOrderNotificationTrigger(triggerKey, orderId, deps, extra).catch((err) => {
|
|
126
|
-
|
|
126
|
+
chunkK742UE6S_cjs.notifyLog.error("TRIGGER", "fire failed", {
|
|
127
127
|
triggerKey,
|
|
128
128
|
orderId,
|
|
129
129
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { explainSessionEntityAccess, isVendorPortalUser, logRbac } from './chunk-
|
|
1
|
+
import { explainSessionEntityAccess, isVendorPortalUser, logRbac } from './chunk-CJY2HUJC.js';
|
|
2
2
|
import { __name } from './chunk-5BKT4CS5.js';
|
|
3
3
|
import { IsNull } from 'typeorm';
|
|
4
4
|
|