@infuro/cms-core 1.0.45 → 1.0.47
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 +4249 -2872
- package/dist/admin.d.cts +24 -4
- package/dist/admin.d.ts +24 -4
- package/dist/admin.js +3179 -1804
- package/dist/api.cjs +41 -39
- package/dist/api.d.cts +10 -4
- package/dist/api.d.ts +10 -4
- package/dist/api.js +9 -7
- package/dist/auth.cjs +55 -51
- package/dist/auth.d.cts +6 -3
- package/dist/auth.d.ts +6 -3
- package/dist/auth.js +3 -3
- package/dist/{chunk-KFFB6EMZ.js → chunk-2HU5R2JE.js} +2 -0
- package/dist/chunk-2IAXTKQN.cjs +19 -0
- package/dist/chunk-2KUCQVAQ.js +936 -0
- package/dist/chunk-3K5AIEIZ.js +256 -0
- package/dist/{chunk-SPQFNIYJ.cjs → chunk-4PMK3RNA.cjs} +2 -0
- package/dist/{chunk-X6UQFV4X.cjs → chunk-77NUXO6A.cjs} +14 -12
- package/dist/chunk-BXYZDMTZ.cjs +953 -0
- package/dist/chunk-DBPSJYLZ.js +47 -0
- package/dist/chunk-EIZKW2PF.js +13 -0
- package/dist/chunk-HY3AXLOI.cjs +265 -0
- package/dist/{chunk-X47PBV4I.js → chunk-JE22VP6S.js} +1 -0
- package/dist/{chunk-DN65KDIA.js → chunk-JIWUVQ6B.js} +14 -13
- package/dist/{chunk-HT5DI3XW.cjs → chunk-KOTXDSQB.cjs} +1 -0
- package/dist/chunk-L3525VXI.js +243 -0
- package/dist/{chunk-22FFHLTO.cjs → chunk-LMJ7RKPF.cjs} +421 -150
- package/dist/chunk-OY2YTBMP.cjs +50 -0
- package/dist/{chunk-TAHX46EI.cjs → chunk-Q3HQEM4R.cjs} +15 -7
- package/dist/chunk-V25RDUOU.cjs +248 -0
- package/dist/{chunk-ZMRQ72F6.cjs → chunk-VUQFARRT.cjs} +10 -10
- package/dist/{chunk-MVXLRANV.js → chunk-W42UZLQO.js} +1977 -891
- package/dist/{chunk-F5XFHYTG.cjs → chunk-XUCKZPML.cjs} +2088 -991
- package/dist/{chunk-I6NH72MO.js → chunk-YC4NUZCS.js} +10 -2
- package/dist/{chunk-NNQBWDCI.js → chunk-YXH2UUEZ.js} +418 -146
- package/dist/{chunk-BLR6H5GL.js → chunk-ZF2RQWXB.js} +4 -4
- 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/{emit-order-notification-trigger-IVLWKKJL.js → emit-order-notification-trigger-6XX7LSC4.js} +1 -1
- package/dist/{emit-order-notification-trigger-D2N3KFHL.cjs → emit-order-notification-trigger-NASG7ZEO.cjs} +3 -3
- package/dist/erp-order-invoice-3GXDE443.js +3 -0
- package/dist/erp-order-invoice-EYYNR526.cjs +24 -0
- package/dist/{event-order-defaults-EMWBIGL3.cjs → event-order-defaults-7Z3UZOEH.cjs} +9 -9
- package/dist/{event-order-defaults-SDRNAZHC.js → event-order-defaults-XQ3IDPD7.js} +1 -1
- package/dist/hooks.cjs +43 -0
- package/dist/hooks.d.cts +10 -1
- package/dist/hooks.d.ts +10 -1
- package/dist/hooks.js +39 -1
- package/dist/index.cjs +429 -298
- package/dist/index.d.cts +317 -30
- package/dist/index.d.ts +317 -30
- package/dist/index.js +17 -13
- 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/migrations/1782200000000-VendorTeamProfiles.ts +233 -0
- package/dist/migrations/1782300000000-AddTypeToOrderNotificationBindings.ts +75 -0
- package/dist/order-inventory-2MYRKEPC.cjs +39 -0
- package/dist/order-inventory-76V4XIGW.js +2 -0
- package/dist/{order-notification-dispatcher-XWIJYDGA.js → order-notification-dispatcher-6WNG24NY.js} +4 -2
- package/dist/{order-notification-dispatcher-RU7BTGGX.cjs → order-notification-dispatcher-6XSU3AR7.cjs} +6 -4
- package/dist/{rbac-debug-db-2SGNLANF.js → rbac-debug-db-6EMIVMGF.js} +1 -1
- package/dist/{rbac-debug-db-4Z6A425H.cjs → rbac-debug-db-6PWTLBEL.cjs} +2 -2
- package/dist/retire-soft-deleted-unique-5VXBA5XX.cjs +15 -0
- package/dist/retire-soft-deleted-unique-NXQIH4BC.js +2 -0
- package/dist/theme.cjs +6 -1
- package/dist/theme.d.cts +4 -1
- package/dist/theme.d.ts +4 -1
- package/dist/theme.js +3 -1
- package/package.json +5 -4
- package/src/admin/admin.css +34 -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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkOY2YTBMP_cjs = require('./chunk-OY2YTBMP.cjs');
|
|
4
|
+
require('./chunk-USNT2KNT.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "activeUniqueValueExists", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return chunkOY2YTBMP_cjs.activeUniqueValueExists; }
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "retireSoftDeletedUniqueValue", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return chunkOY2YTBMP_cjs.retireSoftDeletedUniqueValue; }
|
|
15
|
+
});
|
package/dist/theme.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunk2IAXTKQN_cjs = require('./chunk-2IAXTKQN.cjs');
|
|
3
4
|
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
4
5
|
var React = require('react');
|
|
5
6
|
|
|
@@ -42,7 +43,7 @@ function PageRenderer({ content, theme, navbarConfig, footerConfig }) {
|
|
|
42
43
|
const resolver = buildResolver(theme);
|
|
43
44
|
const NavbarComponent = theme.layout?.navbar?.component;
|
|
44
45
|
const FooterComponent = theme.layout?.footer?.component;
|
|
45
|
-
return React__default.default.createElement(React__default.default.Fragment, null, NavbarComponent && navbarConfig ? React__default.default.createElement(NavbarComponent, navbarConfig) : null, React__default.default.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React__default.default.createElement(FooterComponent, footerConfig) : null);
|
|
46
|
+
return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(chunk2IAXTKQN_cjs.ForceLightMode), NavbarComponent && navbarConfig ? React__default.default.createElement(NavbarComponent, navbarConfig) : null, React__default.default.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React__default.default.createElement(FooterComponent, footerConfig) : null);
|
|
46
47
|
}
|
|
47
48
|
chunkUSNT2KNT_cjs.__name(PageRenderer, "PageRenderer");
|
|
48
49
|
function getChildIds(node) {
|
|
@@ -79,6 +80,10 @@ function renderNode(json, nodeId, resolver) {
|
|
|
79
80
|
}
|
|
80
81
|
chunkUSNT2KNT_cjs.__name(renderNode, "renderNode");
|
|
81
82
|
|
|
83
|
+
Object.defineProperty(exports, "ForceLightMode", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () { return chunk2IAXTKQN_cjs.ForceLightMode; }
|
|
86
|
+
});
|
|
82
87
|
exports.PageRenderer = PageRenderer;
|
|
83
88
|
exports.buildResolver = buildResolver;
|
|
84
89
|
exports.createTheme = createTheme;
|
package/dist/theme.d.cts
CHANGED
|
@@ -104,4 +104,7 @@ declare function PageRenderer({ content, theme, navbarConfig, footerConfig }: Pa
|
|
|
104
104
|
children?: React$1.ReactNode | undefined;
|
|
105
105
|
}>;
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
/** Component wrapper that forces light mode */
|
|
108
|
+
declare function ForceLightMode(): React$1.ReactElement;
|
|
109
|
+
|
|
110
|
+
export { type CatalogGroup, type ComponentMeta, type FooterConfig, ForceLightMode, type LayoutConfig, type NavItem, type NavbarConfig, PageRenderer, type PropDefinition, type PropType, type ThemeComponent, type ThemeConfig, buildResolver, createTheme, getCatalog };
|
package/dist/theme.d.ts
CHANGED
|
@@ -104,4 +104,7 @@ declare function PageRenderer({ content, theme, navbarConfig, footerConfig }: Pa
|
|
|
104
104
|
children?: React$1.ReactNode | undefined;
|
|
105
105
|
}>;
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
/** Component wrapper that forces light mode */
|
|
108
|
+
declare function ForceLightMode(): React$1.ReactElement;
|
|
109
|
+
|
|
110
|
+
export { type CatalogGroup, type ComponentMeta, type FooterConfig, ForceLightMode, type LayoutConfig, type NavItem, type NavbarConfig, PageRenderer, type PropDefinition, type PropType, type ThemeComponent, type ThemeConfig, buildResolver, createTheme, getCatalog };
|
package/dist/theme.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ForceLightMode } from './chunk-EIZKW2PF.js';
|
|
2
|
+
export { ForceLightMode } from './chunk-EIZKW2PF.js';
|
|
1
3
|
import { __name } from './chunk-SHUYVCID.js';
|
|
2
4
|
import React from 'react';
|
|
3
5
|
|
|
@@ -36,7 +38,7 @@ function PageRenderer({ content, theme, navbarConfig, footerConfig }) {
|
|
|
36
38
|
const resolver = buildResolver(theme);
|
|
37
39
|
const NavbarComponent = theme.layout?.navbar?.component;
|
|
38
40
|
const FooterComponent = theme.layout?.footer?.component;
|
|
39
|
-
return React.createElement(React.Fragment, null, NavbarComponent && navbarConfig ? React.createElement(NavbarComponent, navbarConfig) : null, React.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React.createElement(FooterComponent, footerConfig) : null);
|
|
41
|
+
return React.createElement(React.Fragment, null, React.createElement(ForceLightMode), NavbarComponent && navbarConfig ? React.createElement(NavbarComponent, navbarConfig) : null, React.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React.createElement(FooterComponent, footerConfig) : null);
|
|
40
42
|
}
|
|
41
43
|
__name(PageRenderer, "PageRenderer");
|
|
42
44
|
function getChildIds(node) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@infuro/cms-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.47",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
"./admin.css": "./src/admin/admin.css"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
|
-
"build": "npm run build:js &&
|
|
53
|
-
"build:js": "cross-env NODE_OPTIONS=--max-old-space-size=8192 FAST_BUILD=1 DTS=false tsup && node scripts/prepend-admin-use-client.mjs",
|
|
52
|
+
"build": "npm run build:js && npm run build:types",
|
|
53
|
+
"build:js": "cross-env NODE_OPTIONS=--max-old-space-size=8192 FAST_BUILD=1 DTS=false tsup && node scripts/prepend-admin-use-client.mjs && shx mkdir -p dist/migrations && shx cp -r src/migrations/. dist/migrations/",
|
|
54
54
|
"build:types": "node scripts/build-types-parallel.mjs",
|
|
55
55
|
"build:release": "cross-env NODE_OPTIONS=--max-old-space-size=8192 DTS=false tsup && node scripts/prepend-admin-use-client.mjs && shx mkdir -p dist/migrations && shx cp -r src/migrations/. dist/migrations/ && npm run build:types",
|
|
56
|
-
"build:fast": "npm run build",
|
|
56
|
+
"build:fast": "npm run build:js",
|
|
57
57
|
"dev": "cross-env NODE_OPTIONS=--max-old-space-size=8192 FAST_BUILD=1 DTS=false tsup --watch",
|
|
58
58
|
"link": "npm run build:release && npm link",
|
|
59
59
|
"prepublishOnly": "npm run build:release",
|
|
@@ -131,6 +131,7 @@
|
|
|
131
131
|
"next-themes": "^0.2.1",
|
|
132
132
|
"nodemailer": "^7.0.7",
|
|
133
133
|
"papaparse": "^5.4.1",
|
|
134
|
+
"pdf-lib": "^1.17.1",
|
|
134
135
|
"pdf-parse": "^1.1.1",
|
|
135
136
|
"pg": "^8.20.0",
|
|
136
137
|
"pg-boss": ">=10.0.0",
|
package/src/admin/admin.css
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
/* Admin only: design tokens (sidebar, UI). No public-site tokens. */
|
|
1
|
+
/* Admin only: design tokens (sidebar, UI). No public-site tokens. Light mode only. */
|
|
2
2
|
|
|
3
3
|
@layer base {
|
|
4
4
|
:root {
|
|
5
|
+
color-scheme: light;
|
|
5
6
|
--background: 0 0% 100%;
|
|
6
7
|
--foreground: 0 0% 3.9%;
|
|
7
8
|
--card: 0 0% 100%;
|
|
@@ -31,33 +32,35 @@
|
|
|
31
32
|
--sidebar-border: 220 13% 91%;
|
|
32
33
|
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
33
34
|
}
|
|
35
|
+
/* Dark mode disabled: mirror light tokens so host .dark does not flip admin CSS vars */
|
|
34
36
|
.dark {
|
|
35
|
-
|
|
36
|
-
--
|
|
37
|
-
--
|
|
38
|
-
--card
|
|
39
|
-
--
|
|
40
|
-
--popover
|
|
37
|
+
color-scheme: light;
|
|
38
|
+
--background: 0 0% 100%;
|
|
39
|
+
--foreground: 0 0% 3.9%;
|
|
40
|
+
--card: 0 0% 100%;
|
|
41
|
+
--card-foreground: 0 0% 3.9%;
|
|
42
|
+
--popover: 0 0% 100%;
|
|
43
|
+
--popover-foreground: 0 0% 3.9%;
|
|
41
44
|
--primary: 220 70% 50%;
|
|
42
45
|
--primary-foreground: 0 0% 100%;
|
|
43
|
-
--secondary: 0 0%
|
|
44
|
-
--secondary-foreground: 0 0%
|
|
45
|
-
--muted: 0 0%
|
|
46
|
-
--muted-foreground: 0 0%
|
|
47
|
-
--accent: 0 0%
|
|
48
|
-
--accent-foreground: 0 0%
|
|
49
|
-
--destructive: 0
|
|
46
|
+
--secondary: 0 0% 96.1%;
|
|
47
|
+
--secondary-foreground: 0 0% 9%;
|
|
48
|
+
--muted: 0 0% 96.1%;
|
|
49
|
+
--muted-foreground: 0 0% 45.1%;
|
|
50
|
+
--accent: 0 0% 96.1%;
|
|
51
|
+
--accent-foreground: 0 0% 9%;
|
|
52
|
+
--destructive: 0 84.2% 60.2%;
|
|
50
53
|
--destructive-foreground: 0 0% 98%;
|
|
51
|
-
--border: 0 0%
|
|
52
|
-
--input: 0 0%
|
|
53
|
-
--ring: 0 0%
|
|
54
|
-
--sidebar-background:
|
|
55
|
-
--sidebar-foreground: 240
|
|
56
|
-
--sidebar-primary:
|
|
57
|
-
--sidebar-primary-foreground: 0 0%
|
|
58
|
-
--sidebar-accent: 240
|
|
59
|
-
--sidebar-accent-foreground: 240
|
|
60
|
-
--sidebar-border:
|
|
54
|
+
--border: 0 0% 89.8%;
|
|
55
|
+
--input: 0 0% 89.8%;
|
|
56
|
+
--ring: 0 0% 3.9%;
|
|
57
|
+
--sidebar-background: 0 0% 98%;
|
|
58
|
+
--sidebar-foreground: 240 5.3% 26.1%;
|
|
59
|
+
--sidebar-primary: 240 5.9% 10%;
|
|
60
|
+
--sidebar-primary-foreground: 0 0% 98%;
|
|
61
|
+
--sidebar-accent: 240 4.8% 95.9%;
|
|
62
|
+
--sidebar-accent-foreground: 240 5.9% 10%;
|
|
63
|
+
--sidebar-border: 220 13% 91%;
|
|
61
64
|
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
62
65
|
}
|
|
63
66
|
|
|
@@ -69,4 +72,11 @@ body {
|
|
|
69
72
|
background-color: hsl(var(--background));
|
|
70
73
|
color: hsl(var(--foreground));
|
|
71
74
|
}
|
|
75
|
+
|
|
76
|
+
.jodit-wysiwyg ul, .jodit-workplace ul, .md-content ul, .product-detail__description ul { list-style-type: disc !important; padding-left: 1.5rem !important; margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; }
|
|
77
|
+
.jodit-wysiwyg ol, .jodit-workplace ol, .md-content ol, .product-detail__description ol { list-style-type: decimal !important; padding-left: 1.5rem !important; margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; }
|
|
78
|
+
.jodit-wysiwyg li, .jodit-workplace li, .md-content li, .product-detail__description li { display: list-item !important; margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; }
|
|
79
|
+
.jodit-wysiwyg ul ul, .md-content ul ul { list-style-type: circle !important; }
|
|
80
|
+
.jodit-wysiwyg ul ul ul, .md-content ul ul ul { list-style-type: square !important; }
|
|
72
81
|
}
|
|
82
|
+
|
package/dist/chunk-5ELSW2UP.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { __name } from './chunk-SHUYVCID.js';
|
|
2
|
-
|
|
3
|
-
// src/plugins/email/email-queue.ts
|
|
4
|
-
var EMAIL_QUEUE_NAME = "email";
|
|
5
|
-
function registerEmailQueueProcessor(cms) {
|
|
6
|
-
const queue = cms.getPlugin("queue");
|
|
7
|
-
const email = cms.getPlugin("email");
|
|
8
|
-
if (!queue || !email) return;
|
|
9
|
-
queue.registerProcessor(EMAIL_QUEUE_NAME, async (data) => {
|
|
10
|
-
const payload = data;
|
|
11
|
-
const { to, templateName, ctx, subject, html, text } = payload;
|
|
12
|
-
if (!to) return;
|
|
13
|
-
if (templateName && ctx) {
|
|
14
|
-
const rendered = email.renderTemplate(templateName, ctx);
|
|
15
|
-
await email.send({
|
|
16
|
-
to,
|
|
17
|
-
subject: rendered.subject,
|
|
18
|
-
html: rendered.html,
|
|
19
|
-
text: rendered.text
|
|
20
|
-
});
|
|
21
|
-
} else if (subject != null && html != null) {
|
|
22
|
-
await email.send({
|
|
23
|
-
to,
|
|
24
|
-
subject,
|
|
25
|
-
html,
|
|
26
|
-
text
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
__name(registerEmailQueueProcessor, "registerEmailQueueProcessor");
|
|
32
|
-
async function queueEmail(cms, payload) {
|
|
33
|
-
const queue = cms.getPlugin("queue");
|
|
34
|
-
if (queue) {
|
|
35
|
-
await queue.add(EMAIL_QUEUE_NAME, payload);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const email = cms.getPlugin("email");
|
|
39
|
-
if (email && payload.templateName && payload.ctx) {
|
|
40
|
-
const rendered = email.renderTemplate(payload.templateName, payload.ctx);
|
|
41
|
-
await email.send({
|
|
42
|
-
to: payload.to,
|
|
43
|
-
subject: rendered.subject,
|
|
44
|
-
html: rendered.html,
|
|
45
|
-
text: rendered.text
|
|
46
|
-
});
|
|
47
|
-
} else if (email && payload.subject != null && payload.html != null) {
|
|
48
|
-
await email.send({
|
|
49
|
-
to: payload.to,
|
|
50
|
-
subject: payload.subject,
|
|
51
|
-
html: payload.html,
|
|
52
|
-
text: payload.text
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
__name(queueEmail, "queueEmail");
|
|
57
|
-
async function queueOrderPlacedEmails(cms, payload) {
|
|
58
|
-
const { orderNumber, total, subtotal, tax, currency, customerName, customerEmail, salesTeamEmails, companyDetails, lineItems, billingAddress, shippingAddress } = payload;
|
|
59
|
-
const base = {
|
|
60
|
-
orderNumber,
|
|
61
|
-
total: total != null ? String(total) : void 0,
|
|
62
|
-
subtotal: subtotal != null ? String(subtotal) : void 0,
|
|
63
|
-
tax: tax != null ? String(tax) : void 0,
|
|
64
|
-
currency,
|
|
65
|
-
customerName,
|
|
66
|
-
companyDetails: companyDetails ?? {},
|
|
67
|
-
lineItems: lineItems ?? [],
|
|
68
|
-
billingAddress,
|
|
69
|
-
shippingAddress
|
|
70
|
-
};
|
|
71
|
-
const customerLower = customerEmail?.trim().toLowerCase() ?? "";
|
|
72
|
-
const jobs = [];
|
|
73
|
-
if (customerEmail?.trim()) {
|
|
74
|
-
jobs.push(queueEmail(cms, {
|
|
75
|
-
to: customerEmail.trim(),
|
|
76
|
-
templateName: "orderPlaced",
|
|
77
|
-
ctx: {
|
|
78
|
-
...base,
|
|
79
|
-
audience: "customer"
|
|
80
|
-
}
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
const seen = /* @__PURE__ */ new Set();
|
|
84
|
-
for (const raw of salesTeamEmails) {
|
|
85
|
-
const to = raw.trim();
|
|
86
|
-
if (!to) continue;
|
|
87
|
-
const key = to.toLowerCase();
|
|
88
|
-
if (seen.has(key)) continue;
|
|
89
|
-
seen.add(key);
|
|
90
|
-
if (customerLower && key === customerLower) continue;
|
|
91
|
-
jobs.push(queueEmail(cms, {
|
|
92
|
-
to,
|
|
93
|
-
templateName: "orderPlaced",
|
|
94
|
-
ctx: {
|
|
95
|
-
...base,
|
|
96
|
-
audience: "sales",
|
|
97
|
-
internalCustomerEmail: customerEmail?.trim() || void 0
|
|
98
|
-
}
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
await Promise.all(jobs);
|
|
102
|
-
}
|
|
103
|
-
__name(queueOrderPlacedEmails, "queueOrderPlacedEmails");
|
|
104
|
-
async function queueVendorOnboardEmails(cms, payload) {
|
|
105
|
-
const { vendorName, vendorSlug, ownerName, ownerEmail, activation, inviteLink, signInLink, kind = "vendor_onboard", notifyEmails, companyDetails, sendToOwner = true } = payload;
|
|
106
|
-
const base = {
|
|
107
|
-
vendorName,
|
|
108
|
-
vendorSlug,
|
|
109
|
-
ownerName,
|
|
110
|
-
ownerEmail,
|
|
111
|
-
activation,
|
|
112
|
-
inviteLink,
|
|
113
|
-
signInLink,
|
|
114
|
-
kind,
|
|
115
|
-
companyDetails: companyDetails ?? {}
|
|
116
|
-
};
|
|
117
|
-
const ownerLower = ownerEmail?.trim().toLowerCase() ?? "";
|
|
118
|
-
const jobs = [];
|
|
119
|
-
if (sendToOwner && ownerEmail?.trim()) {
|
|
120
|
-
jobs.push(queueEmail(cms, {
|
|
121
|
-
to: ownerEmail.trim(),
|
|
122
|
-
templateName: "vendorOnboarded",
|
|
123
|
-
ctx: {
|
|
124
|
-
...base,
|
|
125
|
-
audience: "owner"
|
|
126
|
-
}
|
|
127
|
-
}));
|
|
128
|
-
}
|
|
129
|
-
const seen = /* @__PURE__ */ new Set();
|
|
130
|
-
for (const raw of notifyEmails) {
|
|
131
|
-
const to = raw.trim();
|
|
132
|
-
if (!to) continue;
|
|
133
|
-
const key = to.toLowerCase();
|
|
134
|
-
if (seen.has(key)) continue;
|
|
135
|
-
seen.add(key);
|
|
136
|
-
if (ownerLower && key === ownerLower) continue;
|
|
137
|
-
jobs.push(queueEmail(cms, {
|
|
138
|
-
to,
|
|
139
|
-
templateName: "vendorOnboarded",
|
|
140
|
-
ctx: {
|
|
141
|
-
...base,
|
|
142
|
-
audience: "internal"
|
|
143
|
-
}
|
|
144
|
-
}));
|
|
145
|
-
}
|
|
146
|
-
await Promise.all(jobs);
|
|
147
|
-
}
|
|
148
|
-
__name(queueVendorOnboardEmails, "queueVendorOnboardEmails");
|
|
149
|
-
|
|
150
|
-
export { queueEmail, queueOrderPlacedEmails, queueVendorOnboardEmails, registerEmailQueueProcessor };
|
package/dist/chunk-PNOKNSG2.cjs
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkUPLVMVRX_cjs = require('./chunk-UPLVMVRX.cjs');
|
|
4
|
-
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
5
|
-
|
|
6
|
-
// src/plugins/erp/erp-response-map.ts
|
|
7
|
-
function pickString(o, keys) {
|
|
8
|
-
for (const k of keys) {
|
|
9
|
-
const v = o[k];
|
|
10
|
-
if (typeof v === "string" && v.trim()) return v.trim();
|
|
11
|
-
}
|
|
12
|
-
return void 0;
|
|
13
|
-
}
|
|
14
|
-
chunkUSNT2KNT_cjs.__name(pickString, "pickString");
|
|
15
|
-
function unwrapErpReadData(json) {
|
|
16
|
-
if (!json || typeof json !== "object") return null;
|
|
17
|
-
const o = json;
|
|
18
|
-
const d = o.data;
|
|
19
|
-
if (d && typeof d === "object" && !Array.isArray(d)) return d;
|
|
20
|
-
return o;
|
|
21
|
-
}
|
|
22
|
-
chunkUSNT2KNT_cjs.__name(unwrapErpReadData, "unwrapErpReadData");
|
|
23
|
-
function firstObject(data, keys) {
|
|
24
|
-
for (const k of keys) {
|
|
25
|
-
const v = data[k];
|
|
26
|
-
if (v && typeof v === "object" && !Array.isArray(v)) return v;
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
chunkUSNT2KNT_cjs.__name(firstObject, "firstObject");
|
|
31
|
-
function extractEvents(src) {
|
|
32
|
-
const timeline = src.timeline ?? src.events ?? src.history ?? src.trackingEvents;
|
|
33
|
-
if (!Array.isArray(timeline) || !timeline.length) return void 0;
|
|
34
|
-
const events = [];
|
|
35
|
-
for (const row of timeline) {
|
|
36
|
-
if (!row || typeof row !== "object") continue;
|
|
37
|
-
const r = row;
|
|
38
|
-
const at = pickString(r, [
|
|
39
|
-
"at",
|
|
40
|
-
"timestamp",
|
|
41
|
-
"date",
|
|
42
|
-
"occurredAt"
|
|
43
|
-
]) ?? (r.at instanceof Date ? r.at.toISOString() : void 0);
|
|
44
|
-
const label = pickString(r, [
|
|
45
|
-
"label",
|
|
46
|
-
"status",
|
|
47
|
-
"title",
|
|
48
|
-
"message",
|
|
49
|
-
"description"
|
|
50
|
-
]);
|
|
51
|
-
const detail = pickString(r, [
|
|
52
|
-
"detail",
|
|
53
|
-
"notes",
|
|
54
|
-
"description"
|
|
55
|
-
]);
|
|
56
|
-
if (at || label || detail) events.push({
|
|
57
|
-
at,
|
|
58
|
-
label,
|
|
59
|
-
detail
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return events.length ? events : void 0;
|
|
63
|
-
}
|
|
64
|
-
chunkUSNT2KNT_cjs.__name(extractEvents, "extractEvents");
|
|
65
|
-
function mapErpPayloadToFulfillment(data) {
|
|
66
|
-
const nested = firstObject(data, [
|
|
67
|
-
"fulfillment",
|
|
68
|
-
"packaging",
|
|
69
|
-
"shipment",
|
|
70
|
-
"shipping",
|
|
71
|
-
"delivery"
|
|
72
|
-
]);
|
|
73
|
-
const src = nested || data;
|
|
74
|
-
const status = pickString(src, [
|
|
75
|
-
"status",
|
|
76
|
-
"fulfillmentStatus",
|
|
77
|
-
"state",
|
|
78
|
-
"label",
|
|
79
|
-
"packagingStatus"
|
|
80
|
-
]);
|
|
81
|
-
const trackingId = pickString(src, [
|
|
82
|
-
"trackingId",
|
|
83
|
-
"tracking_id",
|
|
84
|
-
"trackingNumber",
|
|
85
|
-
"awb",
|
|
86
|
-
"trackingUrl"
|
|
87
|
-
]);
|
|
88
|
-
const events = extractEvents(src);
|
|
89
|
-
if (!status && !trackingId && !(events && events.length)) return void 0;
|
|
90
|
-
return {
|
|
91
|
-
status,
|
|
92
|
-
trackingId,
|
|
93
|
-
events
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
chunkUSNT2KNT_cjs.__name(mapErpPayloadToFulfillment, "mapErpPayloadToFulfillment");
|
|
97
|
-
function mapErpPayloadToInvoiceNumber(data) {
|
|
98
|
-
const nested = firstObject(data, [
|
|
99
|
-
"invoice",
|
|
100
|
-
"latestInvoice",
|
|
101
|
-
"postedInvoice"
|
|
102
|
-
]);
|
|
103
|
-
const src = nested || data;
|
|
104
|
-
return pickString(src, [
|
|
105
|
-
"invoiceNumber",
|
|
106
|
-
"invoice_number",
|
|
107
|
-
"number",
|
|
108
|
-
"name",
|
|
109
|
-
"id"
|
|
110
|
-
]);
|
|
111
|
-
}
|
|
112
|
-
chunkUSNT2KNT_cjs.__name(mapErpPayloadToInvoiceNumber, "mapErpPayloadToInvoiceNumber");
|
|
113
|
-
function extractChildOrderRefsFromSalePayload(data) {
|
|
114
|
-
const lists = [
|
|
115
|
-
data.returns,
|
|
116
|
-
data.returnOrders,
|
|
117
|
-
data.relatedReturns,
|
|
118
|
-
data.childOrders,
|
|
119
|
-
data.children
|
|
120
|
-
];
|
|
121
|
-
const seen = /* @__PURE__ */ new Set();
|
|
122
|
-
const out = [];
|
|
123
|
-
for (const list of lists) {
|
|
124
|
-
if (!Array.isArray(list)) continue;
|
|
125
|
-
for (const item of list) {
|
|
126
|
-
if (!item || typeof item !== "object") continue;
|
|
127
|
-
const o = item;
|
|
128
|
-
const ref = pickString(o, [
|
|
129
|
-
"platformReturnId",
|
|
130
|
-
"platform_return_id",
|
|
131
|
-
"refId",
|
|
132
|
-
"ref_id"
|
|
133
|
-
]) ?? (typeof o.id === "string" ? o.id : void 0);
|
|
134
|
-
if (!ref || seen.has(ref)) continue;
|
|
135
|
-
seen.add(ref);
|
|
136
|
-
const t = (pickString(o, [
|
|
137
|
-
"kind",
|
|
138
|
-
"type",
|
|
139
|
-
"orderKind"
|
|
140
|
-
]) || "").toLowerCase();
|
|
141
|
-
const orderKind = /replac/.test(t) ? "replacement" : "return";
|
|
142
|
-
out.push({
|
|
143
|
-
ref,
|
|
144
|
-
orderKind
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return out;
|
|
149
|
-
}
|
|
150
|
-
chunkUSNT2KNT_cjs.__name(extractChildOrderRefsFromSalePayload, "extractChildOrderRefsFromSalePayload");
|
|
151
|
-
|
|
152
|
-
// src/plugins/erp/erp-order-invoice.ts
|
|
153
|
-
function pickInvoiceId(data) {
|
|
154
|
-
const nested = data.invoice && typeof data.invoice === "object" && !Array.isArray(data.invoice) ? data.invoice : null;
|
|
155
|
-
const src = nested || data;
|
|
156
|
-
for (const k of [
|
|
157
|
-
"invoiceId",
|
|
158
|
-
"invoice_id",
|
|
159
|
-
"id"
|
|
160
|
-
]) {
|
|
161
|
-
const v = src[k];
|
|
162
|
-
if (typeof v === "string" && v.trim()) return v.trim();
|
|
163
|
-
}
|
|
164
|
-
return void 0;
|
|
165
|
-
}
|
|
166
|
-
chunkUSNT2KNT_cjs.__name(pickInvoiceId, "pickInvoiceId");
|
|
167
|
-
async function streamOrderInvoicePdf(cms, dataSource, entityMap, orderId, options) {
|
|
168
|
-
const jsonErr = /* @__PURE__ */ chunkUSNT2KNT_cjs.__name((msg, status) => new Response(JSON.stringify({
|
|
169
|
-
error: msg
|
|
170
|
-
}), {
|
|
171
|
-
status,
|
|
172
|
-
headers: {
|
|
173
|
-
"Content-Type": "application/json"
|
|
174
|
-
}
|
|
175
|
-
}), "jsonErr");
|
|
176
|
-
const on = await chunkUPLVMVRX_cjs.isErpIntegrationEnabled(cms, dataSource, entityMap);
|
|
177
|
-
if (!on) return jsonErr("Invoice not available", 503);
|
|
178
|
-
const erp = cms.getPlugin("erp");
|
|
179
|
-
if (!erp?.submission) return jsonErr("Invoice not available", 503);
|
|
180
|
-
const orderRepo = dataSource.getRepository(entityMap.orders);
|
|
181
|
-
const order = await orderRepo.findOne({
|
|
182
|
-
where: {
|
|
183
|
-
id: orderId,
|
|
184
|
-
deleted: false
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
if (!order) return jsonErr("Not found", 404);
|
|
188
|
-
const kind = order.orderKind || "sale";
|
|
189
|
-
if (kind !== "sale") return jsonErr("Invoice only for sale orders", 400);
|
|
190
|
-
if (options.ownerContactId != null && order.contactId !== options.ownerContactId) {
|
|
191
|
-
return jsonErr("Not found", 404);
|
|
192
|
-
}
|
|
193
|
-
const meta = order.metadata && typeof order.metadata === "object" && !Array.isArray(order.metadata) ? order.metadata : {};
|
|
194
|
-
const inv = meta.invoice && typeof meta.invoice === "object" && !Array.isArray(meta.invoice) ? meta.invoice : {};
|
|
195
|
-
let invoiceId = typeof inv.invoiceId === "string" ? inv.invoiceId.trim() : "";
|
|
196
|
-
if (!invoiceId) {
|
|
197
|
-
const refId = String(order.orderNumber || "");
|
|
198
|
-
const r = await erp.submission.postErpReadAction("get-invoice", {
|
|
199
|
-
platformOrderId: refId
|
|
200
|
-
});
|
|
201
|
-
const d = r.ok ? unwrapErpReadData(r.json) : null;
|
|
202
|
-
invoiceId = d ? pickInvoiceId(d) || "" : "";
|
|
203
|
-
}
|
|
204
|
-
if (!invoiceId) return jsonErr("Invoice not ready", 404);
|
|
205
|
-
const pdf = await erp.submission.fetchInvoicePdf(invoiceId);
|
|
206
|
-
if (!pdf.ok || !pdf.buffer) return jsonErr(pdf.error || "PDF fetch failed", 502);
|
|
207
|
-
const filename = `invoice-${orderId}.pdf`;
|
|
208
|
-
return new Response(pdf.buffer, {
|
|
209
|
-
status: 200,
|
|
210
|
-
headers: {
|
|
211
|
-
"Content-Type": pdf.contentType || "application/pdf",
|
|
212
|
-
"Content-Disposition": `attachment; filename="${filename}"`
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
chunkUSNT2KNT_cjs.__name(streamOrderInvoicePdf, "streamOrderInvoicePdf");
|
|
217
|
-
|
|
218
|
-
exports.extractChildOrderRefsFromSalePayload = extractChildOrderRefsFromSalePayload;
|
|
219
|
-
exports.mapErpPayloadToFulfillment = mapErpPayloadToFulfillment;
|
|
220
|
-
exports.mapErpPayloadToInvoiceNumber = mapErpPayloadToInvoiceNumber;
|
|
221
|
-
exports.streamOrderInvoicePdf = streamOrderInvoicePdf;
|
|
222
|
-
exports.unwrapErpReadData = unwrapErpReadData;
|