@infuro/cms-core 1.0.45 → 1.0.46
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/README.md +19 -2
- package/dist/admin.cjs +873 -214
- package/dist/admin.d.cts +7 -1
- package/dist/admin.d.ts +7 -1
- package/dist/admin.js +874 -215
- package/dist/api.cjs +40 -37
- package/dist/api.d.cts +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.js +8 -5
- package/dist/auth.cjs +23 -23
- package/dist/auth.d.cts +1 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +2 -2
- package/dist/chunk-2KUCQVAQ.js +936 -0
- package/dist/chunk-3K5AIEIZ.js +256 -0
- package/dist/{chunk-I6NH72MO.js → chunk-57O3HZPG.js} +9 -1
- package/dist/chunk-7PMHZRF3.cjs +872 -0
- package/dist/chunk-BXYZDMTZ.cjs +953 -0
- package/dist/chunk-CQHXW4TR.js +107 -0
- package/dist/{chunk-NNQBWDCI.js → chunk-CRYKVJTO.js} +55 -959
- package/dist/chunk-DBPSJYLZ.js +47 -0
- package/dist/{chunk-TAHX46EI.cjs → chunk-FBKDMRQL.cjs} +9 -1
- package/dist/chunk-GUSHM5HN.js +862 -0
- package/dist/chunk-HY3AXLOI.cjs +265 -0
- package/dist/chunk-L3525VXI.js +243 -0
- package/dist/{chunk-ZMRQ72F6.cjs → chunk-NBY4NVTY.cjs} +3 -3
- package/dist/chunk-OY2YTBMP.cjs +50 -0
- package/dist/{chunk-BLR6H5GL.js → chunk-SF2XKMCI.js} +3 -3
- package/dist/{chunk-22FFHLTO.cjs → chunk-TCSGFAWB.cjs} +56 -970
- package/dist/{chunk-F5XFHYTG.cjs → chunk-UDVLFVEC.cjs} +661 -382
- package/dist/{chunk-MVXLRANV.js → chunk-UKC3HYXI.js} +591 -323
- package/dist/chunk-V25RDUOU.cjs +248 -0
- package/dist/chunk-XMRMZ6NQ.cjs +109 -0
- package/dist/cli.cjs +9 -4
- package/dist/cli.js +9 -4
- package/dist/{email-queue-TPZWLTIV.cjs → email-queue-6NJY6HNM.cjs} +7 -5
- package/dist/email-queue-OI2HSCGE.js +4 -0
- package/dist/erp-order-invoice-3GXDE443.js +3 -0
- package/dist/erp-order-invoice-EYYNR526.cjs +24 -0
- package/dist/index.cjs +391 -364
- package/dist/index.d.cts +267 -14
- package/dist/index.d.ts +267 -14
- package/dist/index.js +12 -110
- package/dist/migrations/1781810000000-OrderItemsVariantId.ts +44 -0
- package/dist/migrations/1781900000000-UserInviteStatusToken.ts +46 -0
- package/dist/migrations/1782000000000-ComboSlug.ts +58 -0
- package/dist/migrations/1782100000000-DiscountDeviceType.ts +20 -0
- package/dist/order-inventory-2MYRKEPC.cjs +39 -0
- package/dist/order-inventory-76V4XIGW.js +2 -0
- package/dist/order-notification-dispatcher-SBQAMM5V.cjs +21 -0
- package/dist/{order-notification-dispatcher-XWIJYDGA.js → order-notification-dispatcher-ZJZB2HUN.js} +5 -2
- package/dist/retire-soft-deleted-unique-5VXBA5XX.cjs +15 -0
- package/dist/retire-soft-deleted-unique-NXQIH4BC.js +2 -0
- package/dist/send-order-placed-emails-B5ZVJT7T.cjs +15 -0
- package/dist/send-order-placed-emails-WPI37KRZ.js +6 -0
- package/package.json +5 -4
- package/src/admin/admin.css +27 -24
- package/dist/chunk-5ELSW2UP.js +0 -150
- package/dist/chunk-PNOKNSG2.cjs +0 -222
- package/dist/chunk-WEMDMVHQ.js +0 -216
- package/dist/chunk-XW5ATPRW.cjs +0 -155
- package/dist/email-queue-CGZBVVAS.js +0 -2
- package/dist/erp-order-invoice-3YISSOWW.js +0 -3
- package/dist/erp-order-invoice-ZR5F2KTA.cjs +0 -12
- package/dist/order-notification-dispatcher-RU7BTGGX.cjs +0 -18
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkBXYZDMTZ_cjs = require('./chunk-BXYZDMTZ.cjs');
|
|
4
|
+
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
5
|
+
|
|
6
|
+
// src/plugins/email/email-queue.ts
|
|
7
|
+
var EMAIL_QUEUE_NAME = "email";
|
|
8
|
+
var registeredInvoiceOptions = {};
|
|
9
|
+
async function resolveInvoiceAttachmentForJob(cms, payload, options) {
|
|
10
|
+
if (!payload.attachInvoice || payload.orderId == null || payload.orderId < 1) {
|
|
11
|
+
return {
|
|
12
|
+
attachments: payload.attachments,
|
|
13
|
+
invoiceAttached: false
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const entityMap = options.entityMap;
|
|
17
|
+
if (!entityMap?.orders) {
|
|
18
|
+
console.warn("[email] attachInvoice skipped: entityMap not registered on email queue processor");
|
|
19
|
+
return {
|
|
20
|
+
attachments: payload.attachments,
|
|
21
|
+
invoiceAttached: false
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let dataSource;
|
|
25
|
+
try {
|
|
26
|
+
dataSource = options.getDataSource ? await options.getDataSource() : cms.dataSource;
|
|
27
|
+
} catch (err) {
|
|
28
|
+
console.error("[email] attachInvoice: getDataSource failed", err);
|
|
29
|
+
return {
|
|
30
|
+
attachments: payload.attachments,
|
|
31
|
+
invoiceAttached: false
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (!dataSource) {
|
|
35
|
+
console.warn("[email] attachInvoice skipped: no dataSource");
|
|
36
|
+
return {
|
|
37
|
+
attachments: payload.attachments,
|
|
38
|
+
invoiceAttached: false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const order = await dataSource.getRepository(entityMap.orders).findOne({
|
|
43
|
+
where: {
|
|
44
|
+
id: payload.orderId,
|
|
45
|
+
deleted: false
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
if (!order) return {
|
|
49
|
+
attachments: payload.attachments,
|
|
50
|
+
invoiceAttached: false
|
|
51
|
+
};
|
|
52
|
+
const o = order;
|
|
53
|
+
if (!chunkBXYZDMTZ_cjs.isOrderEligibleForInvoiceEmail(o.status, o.orderKind)) {
|
|
54
|
+
return {
|
|
55
|
+
attachments: payload.attachments,
|
|
56
|
+
invoiceAttached: false
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const resolved = await chunkBXYZDMTZ_cjs.resolveOrderInvoicePdfBytes(cms, dataSource, entityMap, payload.orderId);
|
|
60
|
+
if ("error" in resolved) {
|
|
61
|
+
console.warn("[email] order invoice attach failed", {
|
|
62
|
+
orderId: payload.orderId,
|
|
63
|
+
error: resolved.error,
|
|
64
|
+
status: resolved.status
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
attachments: payload.attachments,
|
|
68
|
+
invoiceAttached: false
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const invoiceAtt = {
|
|
72
|
+
filename: resolved.filename,
|
|
73
|
+
content: resolved.bytes,
|
|
74
|
+
contentType: resolved.contentType
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
attachments: [
|
|
78
|
+
...payload.attachments ?? [],
|
|
79
|
+
invoiceAtt
|
|
80
|
+
],
|
|
81
|
+
invoiceAttached: true
|
|
82
|
+
};
|
|
83
|
+
} catch (err) {
|
|
84
|
+
console.error("[email] order invoice attach error", {
|
|
85
|
+
orderId: payload.orderId,
|
|
86
|
+
err
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
attachments: payload.attachments,
|
|
90
|
+
invoiceAttached: false
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
chunkUSNT2KNT_cjs.__name(resolveInvoiceAttachmentForJob, "resolveInvoiceAttachmentForJob");
|
|
95
|
+
async function sendRendered(email, to, subject, html, text, attachments) {
|
|
96
|
+
await email.send({
|
|
97
|
+
to,
|
|
98
|
+
subject,
|
|
99
|
+
html,
|
|
100
|
+
text,
|
|
101
|
+
attachments
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
chunkUSNT2KNT_cjs.__name(sendRendered, "sendRendered");
|
|
105
|
+
function registerEmailQueueProcessor(cms, options = {}) {
|
|
106
|
+
registeredInvoiceOptions = options;
|
|
107
|
+
const queue = cms.getPlugin("queue");
|
|
108
|
+
const email = cms.getPlugin("email");
|
|
109
|
+
if (!queue || !email) return;
|
|
110
|
+
queue.registerProcessor(EMAIL_QUEUE_NAME, async (data) => {
|
|
111
|
+
const payload = data;
|
|
112
|
+
const { to, templateName, ctx, subject, html, text } = payload;
|
|
113
|
+
if (!to) return;
|
|
114
|
+
const attachmentsResult = await resolveInvoiceAttachmentForJob(cms, payload, registeredInvoiceOptions);
|
|
115
|
+
if (templateName && ctx) {
|
|
116
|
+
const rendered = email.renderTemplate(templateName, {
|
|
117
|
+
...ctx,
|
|
118
|
+
invoiceAttached: attachmentsResult.invoiceAttached
|
|
119
|
+
});
|
|
120
|
+
await sendRendered(email, to, rendered.subject, rendered.html, rendered.text, attachmentsResult.attachments);
|
|
121
|
+
} else if (subject != null && html != null) {
|
|
122
|
+
await sendRendered(email, to, subject, html, text, attachmentsResult.attachments);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
chunkUSNT2KNT_cjs.__name(registerEmailQueueProcessor, "registerEmailQueueProcessor");
|
|
127
|
+
async function queueEmail(cms, payload) {
|
|
128
|
+
const queue = cms.getPlugin("queue");
|
|
129
|
+
if (queue) {
|
|
130
|
+
await queue.add(EMAIL_QUEUE_NAME, payload);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const email = cms.getPlugin("email");
|
|
134
|
+
if (!email) return;
|
|
135
|
+
const attachmentsResult = await resolveInvoiceAttachmentForJob(cms, payload, registeredInvoiceOptions);
|
|
136
|
+
if (payload.templateName && payload.ctx) {
|
|
137
|
+
const rendered = email.renderTemplate(payload.templateName, {
|
|
138
|
+
...payload.ctx,
|
|
139
|
+
invoiceAttached: attachmentsResult.invoiceAttached
|
|
140
|
+
});
|
|
141
|
+
await sendRendered(email, payload.to, rendered.subject, rendered.html, rendered.text, attachmentsResult.attachments);
|
|
142
|
+
} else if (payload.subject != null && payload.html != null) {
|
|
143
|
+
await sendRendered(email, payload.to, payload.subject, payload.html, payload.text, attachmentsResult.attachments ?? payload.attachments);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
chunkUSNT2KNT_cjs.__name(queueEmail, "queueEmail");
|
|
147
|
+
async function queueOrderPlacedEmails(cms, payload) {
|
|
148
|
+
const { orderNumber, total, subtotal, tax, currency, customerName, customerEmail, salesTeamEmails, companyDetails, lineItems, billingAddress, shippingAddress, orderId, attachInvoiceToCustomer = true } = payload;
|
|
149
|
+
const base = {
|
|
150
|
+
orderNumber,
|
|
151
|
+
total: total != null ? String(total) : void 0,
|
|
152
|
+
subtotal: subtotal != null ? String(subtotal) : void 0,
|
|
153
|
+
tax: tax != null ? String(tax) : void 0,
|
|
154
|
+
currency,
|
|
155
|
+
customerName,
|
|
156
|
+
companyDetails: companyDetails ?? {},
|
|
157
|
+
lineItems: lineItems ?? [],
|
|
158
|
+
billingAddress,
|
|
159
|
+
shippingAddress
|
|
160
|
+
};
|
|
161
|
+
const customerLower = customerEmail?.trim().toLowerCase() ?? "";
|
|
162
|
+
const jobs = [];
|
|
163
|
+
const shouldAttach = attachInvoiceToCustomer && orderId != null && Number.isFinite(orderId) && orderId > 0;
|
|
164
|
+
if (customerEmail?.trim()) {
|
|
165
|
+
jobs.push(queueEmail(cms, {
|
|
166
|
+
to: customerEmail.trim(),
|
|
167
|
+
templateName: "orderPlaced",
|
|
168
|
+
ctx: {
|
|
169
|
+
...base,
|
|
170
|
+
audience: "customer"
|
|
171
|
+
},
|
|
172
|
+
...shouldAttach ? {
|
|
173
|
+
orderId,
|
|
174
|
+
attachInvoice: true
|
|
175
|
+
} : {}
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
const seen = /* @__PURE__ */ new Set();
|
|
179
|
+
for (const raw of salesTeamEmails) {
|
|
180
|
+
const to = raw.trim();
|
|
181
|
+
if (!to) continue;
|
|
182
|
+
const key = to.toLowerCase();
|
|
183
|
+
if (seen.has(key)) continue;
|
|
184
|
+
seen.add(key);
|
|
185
|
+
if (customerLower && key === customerLower) continue;
|
|
186
|
+
jobs.push(queueEmail(cms, {
|
|
187
|
+
to,
|
|
188
|
+
templateName: "orderPlaced",
|
|
189
|
+
ctx: {
|
|
190
|
+
...base,
|
|
191
|
+
audience: "sales",
|
|
192
|
+
internalCustomerEmail: customerEmail?.trim() || void 0
|
|
193
|
+
}
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
await Promise.all(jobs);
|
|
197
|
+
}
|
|
198
|
+
chunkUSNT2KNT_cjs.__name(queueOrderPlacedEmails, "queueOrderPlacedEmails");
|
|
199
|
+
async function queueVendorOnboardEmails(cms, payload) {
|
|
200
|
+
const { vendorName, vendorSlug, ownerName, ownerEmail, activation, inviteLink, signInLink, kind = "vendor_onboard", notifyEmails, companyDetails, sendToOwner = true } = payload;
|
|
201
|
+
const base = {
|
|
202
|
+
vendorName,
|
|
203
|
+
vendorSlug,
|
|
204
|
+
ownerName,
|
|
205
|
+
ownerEmail,
|
|
206
|
+
activation,
|
|
207
|
+
inviteLink,
|
|
208
|
+
signInLink,
|
|
209
|
+
kind,
|
|
210
|
+
companyDetails: companyDetails ?? {}
|
|
211
|
+
};
|
|
212
|
+
const ownerLower = ownerEmail?.trim().toLowerCase() ?? "";
|
|
213
|
+
const jobs = [];
|
|
214
|
+
if (sendToOwner && ownerEmail?.trim()) {
|
|
215
|
+
jobs.push(queueEmail(cms, {
|
|
216
|
+
to: ownerEmail.trim(),
|
|
217
|
+
templateName: "vendorOnboarded",
|
|
218
|
+
ctx: {
|
|
219
|
+
...base,
|
|
220
|
+
audience: "owner"
|
|
221
|
+
}
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
const seen = /* @__PURE__ */ new Set();
|
|
225
|
+
for (const raw of notifyEmails) {
|
|
226
|
+
const to = raw.trim();
|
|
227
|
+
if (!to) continue;
|
|
228
|
+
const key = to.toLowerCase();
|
|
229
|
+
if (seen.has(key)) continue;
|
|
230
|
+
seen.add(key);
|
|
231
|
+
if (ownerLower && key === ownerLower) continue;
|
|
232
|
+
jobs.push(queueEmail(cms, {
|
|
233
|
+
to,
|
|
234
|
+
templateName: "vendorOnboarded",
|
|
235
|
+
ctx: {
|
|
236
|
+
...base,
|
|
237
|
+
audience: "internal"
|
|
238
|
+
}
|
|
239
|
+
}));
|
|
240
|
+
}
|
|
241
|
+
await Promise.all(jobs);
|
|
242
|
+
}
|
|
243
|
+
chunkUSNT2KNT_cjs.__name(queueVendorOnboardEmails, "queueVendorOnboardEmails");
|
|
244
|
+
|
|
245
|
+
exports.queueEmail = queueEmail;
|
|
246
|
+
exports.queueOrderPlacedEmails = queueOrderPlacedEmails;
|
|
247
|
+
exports.queueVendorOnboardEmails = queueVendorOnboardEmails;
|
|
248
|
+
exports.registerEmailQueueProcessor = registerEmailQueueProcessor;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkTCSGFAWB_cjs = require('./chunk-TCSGFAWB.cjs');
|
|
4
|
+
var chunkV25RDUOU_cjs = require('./chunk-V25RDUOU.cjs');
|
|
5
|
+
var chunkBXYZDMTZ_cjs = require('./chunk-BXYZDMTZ.cjs');
|
|
6
|
+
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
7
|
+
|
|
8
|
+
// src/lib/send-order-placed-emails.ts
|
|
9
|
+
async function getSettingsGroup(deps, group) {
|
|
10
|
+
const ds = await deps.getDataSource();
|
|
11
|
+
const rows = await ds.getRepository(deps.entityMap.configs).find({
|
|
12
|
+
where: {
|
|
13
|
+
settings: group,
|
|
14
|
+
deleted: false
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return Object.fromEntries(rows.map((r) => [
|
|
18
|
+
r.key,
|
|
19
|
+
r.value
|
|
20
|
+
]));
|
|
21
|
+
}
|
|
22
|
+
chunkUSNT2KNT_cjs.__name(getSettingsGroup, "getSettingsGroup");
|
|
23
|
+
async function sendOrderPlacedEmailsAfterConfirmation(orderId, deps) {
|
|
24
|
+
try {
|
|
25
|
+
let addrToRecord2 = function(a) {
|
|
26
|
+
if (!a) return void 0;
|
|
27
|
+
const out = {};
|
|
28
|
+
const set = /* @__PURE__ */ chunkUSNT2KNT_cjs.__name((k, v) => {
|
|
29
|
+
const t = v != null ? String(v).trim() : "";
|
|
30
|
+
if (t) out[k] = t;
|
|
31
|
+
}, "set");
|
|
32
|
+
set("line1", a.line1);
|
|
33
|
+
set("line2", a.line2);
|
|
34
|
+
set("city", a.city);
|
|
35
|
+
set("state", a.state);
|
|
36
|
+
set("postalCode", a.postalCode);
|
|
37
|
+
set("country", a.country);
|
|
38
|
+
return Object.keys(out).length ? out : void 0;
|
|
39
|
+
};
|
|
40
|
+
var addrToRecord = addrToRecord2;
|
|
41
|
+
chunkUSNT2KNT_cjs.__name(addrToRecord2, "addrToRecord");
|
|
42
|
+
const ds = await deps.getDataSource();
|
|
43
|
+
const order = await ds.getRepository(deps.entityMap.orders).findOne({
|
|
44
|
+
where: {
|
|
45
|
+
id: orderId
|
|
46
|
+
},
|
|
47
|
+
relations: [
|
|
48
|
+
"contact",
|
|
49
|
+
"billingAddress",
|
|
50
|
+
"shippingAddress"
|
|
51
|
+
]
|
|
52
|
+
});
|
|
53
|
+
if (!order) return;
|
|
54
|
+
const o = order;
|
|
55
|
+
const contact = o.contact;
|
|
56
|
+
const customerEmail = contact?.email?.trim() || null;
|
|
57
|
+
const customerName = contact?.name?.trim() || void 0;
|
|
58
|
+
const itemRows = await ds.getRepository(deps.entityMap.order_items).find({
|
|
59
|
+
where: {
|
|
60
|
+
orderId
|
|
61
|
+
},
|
|
62
|
+
relations: [
|
|
63
|
+
"product"
|
|
64
|
+
],
|
|
65
|
+
order: {
|
|
66
|
+
id: "ASC"
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const lineItems = itemRows.map((row) => {
|
|
70
|
+
const r = row;
|
|
71
|
+
const name = r.product?.name && String(r.product.name).trim() || `Product #${r.productId}`;
|
|
72
|
+
return {
|
|
73
|
+
productName: name,
|
|
74
|
+
quantity: Math.max(0, Math.floor(Number(r.quantity) || 0)),
|
|
75
|
+
unitPrice: r.unitPrice,
|
|
76
|
+
lineTotal: r.total,
|
|
77
|
+
sku: r.product?.sku && String(r.product.sku).trim() ? r.product.sku : void 0,
|
|
78
|
+
tax: r.tax != null && Number(r.tax) !== 0 ? r.tax : void 0,
|
|
79
|
+
hsn: r.hsn && String(r.hsn).trim() ? r.hsn : void 0
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
const [branding, emailSettings] = await Promise.all([
|
|
83
|
+
getSettingsGroup(deps, "branding"),
|
|
84
|
+
getSettingsGroup(deps, "email")
|
|
85
|
+
]);
|
|
86
|
+
const companyDetails = chunkBXYZDMTZ_cjs.mergeEmailLayoutCompanyDetails(branding, emailSettings);
|
|
87
|
+
const salesTeamEmails = chunkTCSGFAWB_cjs.parseEmailRecipientsFromConfig(emailSettings.salesTeamEmails ?? emailSettings.salesTeamEmail);
|
|
88
|
+
const cms = await deps.getCms();
|
|
89
|
+
await chunkV25RDUOU_cjs.queueOrderPlacedEmails(cms, {
|
|
90
|
+
orderId,
|
|
91
|
+
orderNumber: o.orderNumber,
|
|
92
|
+
total: o.total,
|
|
93
|
+
subtotal: o.subtotal,
|
|
94
|
+
tax: o.tax,
|
|
95
|
+
currency: o.currency,
|
|
96
|
+
customerName,
|
|
97
|
+
customerEmail,
|
|
98
|
+
salesTeamEmails,
|
|
99
|
+
companyDetails,
|
|
100
|
+
lineItems,
|
|
101
|
+
billingAddress: addrToRecord2(o.billingAddress),
|
|
102
|
+
shippingAddress: addrToRecord2(o.shippingAddress)
|
|
103
|
+
});
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
chunkUSNT2KNT_cjs.__name(sendOrderPlacedEmailsAfterConfirmation, "sendOrderPlacedEmailsAfterConfirmation");
|
|
108
|
+
|
|
109
|
+
exports.sendOrderPlacedEmailsAfterConfirmation = sendOrderPlacedEmailsAfterConfirmation;
|
package/dist/cli.cjs
CHANGED
|
@@ -220,7 +220,7 @@ async function getOptions() {
|
|
|
220
220
|
const user = await userRepo.findOne({
|
|
221
221
|
where: { email },
|
|
222
222
|
relations: ['group', 'group.permissions'],
|
|
223
|
-
select: ['id', 'email', 'name', 'password', 'blocked', 'deleted', 'groupId', 'adminAccess'],
|
|
223
|
+
select: ['id', 'email', 'name', 'password', 'blocked', 'inviteStatus', 'deleted', 'groupId', 'adminAccess'],
|
|
224
224
|
});
|
|
225
225
|
return enrichUserWithVendorContext(dataSource, user as any);
|
|
226
226
|
},
|
|
@@ -259,7 +259,7 @@ async function getOptions() {
|
|
|
259
259
|
const user = await userRepo.findOne({
|
|
260
260
|
where: { email },
|
|
261
261
|
relations: ['group', 'group.permissions'],
|
|
262
|
-
select: ['id', 'email', 'name', 'password', 'blocked', 'deleted', 'groupId', 'adminAccess'],
|
|
262
|
+
select: ['id', 'email', 'name', 'password', 'blocked', 'inviteStatus', 'deleted', 'groupId', 'adminAccess'],
|
|
263
263
|
});
|
|
264
264
|
return enrichUserWithVendorContext(dataSource, user as any);
|
|
265
265
|
},
|
|
@@ -340,8 +340,13 @@ export async function middleware(request: NextRequest) {
|
|
|
340
340
|
return NextResponse.next();
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
+
/**
|
|
344
|
+
* Next.js matchers do not support lookaheads, so /api/:path* cannot reliably
|
|
345
|
+
* exclude /api/upload. Matching only /admin avoids buffering large multipart
|
|
346
|
+
* bodies (videos) which breaks req.formData(). API auth still runs in handlers.
|
|
347
|
+
*/
|
|
343
348
|
export const config = {
|
|
344
|
-
matcher: ['/admin/:path*'
|
|
349
|
+
matcher: ['/admin/:path*'],
|
|
345
350
|
};
|
|
346
351
|
`,
|
|
347
352
|
"src/app/providers.tsx": `"use client";
|
|
@@ -353,7 +358,7 @@ import { Toaster } from "sonner";
|
|
|
353
358
|
export function Providers({ children }: { children: React.ReactNode }) {
|
|
354
359
|
return (
|
|
355
360
|
<SessionProvider>
|
|
356
|
-
<ThemeProvider attribute="class" defaultTheme="
|
|
361
|
+
<ThemeProvider attribute="class" defaultTheme="light" forcedTheme="light" enableSystem={false} enableColorScheme>
|
|
357
362
|
{children}
|
|
358
363
|
<Toaster position="top-right" />
|
|
359
364
|
</ThemeProvider>
|
package/dist/cli.js
CHANGED
|
@@ -213,7 +213,7 @@ async function getOptions() {
|
|
|
213
213
|
const user = await userRepo.findOne({
|
|
214
214
|
where: { email },
|
|
215
215
|
relations: ['group', 'group.permissions'],
|
|
216
|
-
select: ['id', 'email', 'name', 'password', 'blocked', 'deleted', 'groupId', 'adminAccess'],
|
|
216
|
+
select: ['id', 'email', 'name', 'password', 'blocked', 'inviteStatus', 'deleted', 'groupId', 'adminAccess'],
|
|
217
217
|
});
|
|
218
218
|
return enrichUserWithVendorContext(dataSource, user as any);
|
|
219
219
|
},
|
|
@@ -252,7 +252,7 @@ async function getOptions() {
|
|
|
252
252
|
const user = await userRepo.findOne({
|
|
253
253
|
where: { email },
|
|
254
254
|
relations: ['group', 'group.permissions'],
|
|
255
|
-
select: ['id', 'email', 'name', 'password', 'blocked', 'deleted', 'groupId', 'adminAccess'],
|
|
255
|
+
select: ['id', 'email', 'name', 'password', 'blocked', 'inviteStatus', 'deleted', 'groupId', 'adminAccess'],
|
|
256
256
|
});
|
|
257
257
|
return enrichUserWithVendorContext(dataSource, user as any);
|
|
258
258
|
},
|
|
@@ -333,8 +333,13 @@ export async function middleware(request: NextRequest) {
|
|
|
333
333
|
return NextResponse.next();
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
+
/**
|
|
337
|
+
* Next.js matchers do not support lookaheads, so /api/:path* cannot reliably
|
|
338
|
+
* exclude /api/upload. Matching only /admin avoids buffering large multipart
|
|
339
|
+
* bodies (videos) which breaks req.formData(). API auth still runs in handlers.
|
|
340
|
+
*/
|
|
336
341
|
export const config = {
|
|
337
|
-
matcher: ['/admin/:path*'
|
|
342
|
+
matcher: ['/admin/:path*'],
|
|
338
343
|
};
|
|
339
344
|
`,
|
|
340
345
|
"src/app/providers.tsx": `"use client";
|
|
@@ -346,7 +351,7 @@ import { Toaster } from "sonner";
|
|
|
346
351
|
export function Providers({ children }: { children: React.ReactNode }) {
|
|
347
352
|
return (
|
|
348
353
|
<SessionProvider>
|
|
349
|
-
<ThemeProvider attribute="class" defaultTheme="
|
|
354
|
+
<ThemeProvider attribute="class" defaultTheme="light" forcedTheme="light" enableSystem={false} enableColorScheme>
|
|
350
355
|
{children}
|
|
351
356
|
<Toaster position="top-right" />
|
|
352
357
|
</ThemeProvider>
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkV25RDUOU_cjs = require('./chunk-V25RDUOU.cjs');
|
|
4
|
+
require('./chunk-BXYZDMTZ.cjs');
|
|
5
|
+
require('./chunk-UPLVMVRX.cjs');
|
|
4
6
|
require('./chunk-USNT2KNT.cjs');
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
Object.defineProperty(exports, "queueEmail", {
|
|
9
11
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
12
|
+
get: function () { return chunkV25RDUOU_cjs.queueEmail; }
|
|
11
13
|
});
|
|
12
14
|
Object.defineProperty(exports, "queueOrderPlacedEmails", {
|
|
13
15
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunkV25RDUOU_cjs.queueOrderPlacedEmails; }
|
|
15
17
|
});
|
|
16
18
|
Object.defineProperty(exports, "queueVendorOnboardEmails", {
|
|
17
19
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
20
|
+
get: function () { return chunkV25RDUOU_cjs.queueVendorOnboardEmails; }
|
|
19
21
|
});
|
|
20
22
|
Object.defineProperty(exports, "registerEmailQueueProcessor", {
|
|
21
23
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkV25RDUOU_cjs.registerEmailQueueProcessor; }
|
|
23
25
|
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkBXYZDMTZ_cjs = require('./chunk-BXYZDMTZ.cjs');
|
|
4
|
+
require('./chunk-UPLVMVRX.cjs');
|
|
5
|
+
require('./chunk-USNT2KNT.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkBXYZDMTZ_cjs.ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES; }
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "isOrderEligibleForInvoiceEmail", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkBXYZDMTZ_cjs.isOrderEligibleForInvoiceEmail; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "resolveOrderInvoicePdfBytes", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkBXYZDMTZ_cjs.resolveOrderInvoicePdfBytes; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, "streamOrderInvoicePdf", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return chunkBXYZDMTZ_cjs.streamOrderInvoicePdf; }
|
|
24
|
+
});
|