feature/IO-3096-GlobalNotifications - Package updates, prepare scenario builder for app notifications, redo header to have right aligned items.

This commit is contained in:
Dave Richer
2025-02-20 17:41:52 -05:00
parent eca7ff4a42
commit a077cf0820
4 changed files with 382 additions and 369 deletions

View File

@@ -1,6 +1,7 @@
import Icon, {
BankFilled,
BarChartOutlined,
BellFilled,
CarFilled,
CheckCircleOutlined,
ClockCircleFilled,
@@ -44,6 +45,11 @@ import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selecto
import InstanceRenderManager from "../../utils/instanceRenderMgr";
import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
import LockWrapper from "../lock-wrapper/lock-wrapper.component";
import { useState, useEffect } from "react";
import { debounce } from "lodash";
// Used to Determine if the Header is in Mobile Mode, and to toggle the multiple menus
const HEADER_MOBILE_BREAKPOINT = 576;
const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser,
@@ -116,18 +122,28 @@ function Header({
const { t } = useTranslation();
// const deleteBetaCookie = () => {
// const cookieExists = document.cookie.split("; ").some((row) => row.startsWith(`betaSwitchImex=`));
// if (cookieExists) {
// const domain = window.location.hostname.split(".").slice(-2).join(".");
// document.cookie = `betaSwitchImex=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${domain}`;
// }
// };
//
// deleteBetaCookie();
const [isMobile, setIsMobile] = useState(() => {
const effectiveWidth = window.innerWidth / (window.devicePixelRatio || 1);
return effectiveWidth <= HEADER_MOBILE_BREAKPOINT;
});
const handleResize = debounce(() => {
const effectiveWidth = window.innerWidth / (window.devicePixelRatio || 1);
setIsMobile(effectiveWidth <= HEADER_MOBILE_BREAKPOINT);
}, 200);
useEffect(() => {
window.addEventListener("resize", handleResize);
window.addEventListener("orientationchange", handleResize);
return () => {
window.removeEventListener("resize", handleResize);
window.removeEventListener("orientationchange", handleResize);
handleResize.cancel(); // Cancel any pending debounced calls on cleanup
};
}, [handleResize]);
// Accounting children setup (unchanged)
const accountingChildren = [];
accountingChildren.push(
{
key: "bills",
@@ -350,6 +366,7 @@ function Header({
children: accountingExportChildren
});
// Define all menu items
const menuItems = [
{
key: "home",
@@ -419,7 +436,6 @@ function Header({
icon: <ScheduleOutlined />,
label: <Link to="/manage/production/list">{t("menus.header.productionlist")}</Link>
},
{
key: "productionboard",
id: "header-production-board",
@@ -432,7 +448,6 @@ function Header({
</Link>
)
},
{
type: "divider",
id: "header-jobs-divider3"
@@ -519,7 +534,6 @@ function Header({
}
]
},
...(accountingChildren.length > 0
? [
{
@@ -537,7 +551,6 @@ function Header({
icon: <PhoneOutlined />,
label: <Link to="/manage/phonebook">{t("menus.header.phonebook")}</Link>
},
{
key: "temporarydocs",
id: "header-temporarydocs",
@@ -550,7 +563,6 @@ function Header({
</Link>
)
},
{
key: "tasks",
id: "tasks",
@@ -623,7 +635,6 @@ function Header({
icon: <Icon component={IoBusinessOutline} />,
label: <Link to="/manage/shop/vendors">{t("menus.header.shop_vendors")}</Link>
},
{
key: "shop-csi",
id: "header-shop-csi",
@@ -638,9 +649,26 @@ function Header({
}
]
},
// Right-aligned items on desktop, merged on mobile
{
key: "notifications",
icon: <BellFilled />,
id: "header-notifications"
},
{
key: "recent",
icon: <ClockCircleFilled />,
id: "header-recent",
children: recentItems.map((i, idx) => ({
key: idx,
id: `header-recent-${idx}`,
label: <Link to={i.url}>{i.label}</Link>
}))
},
{
key: "user",
label: currentUser.displayName || currentUser.email || t("general.labels.unknown"),
icon: <UserOutlined />,
// label: currentUser.displayName || currentUser.email || t("general.labels.unknown"),
children: [
{
key: "signout",
@@ -675,7 +703,6 @@ function Header({
}
]
: []),
{
key: "shiftclock",
id: "header-shiftclock",
@@ -688,64 +715,67 @@ function Header({
</Link>
)
},
{
key: "profile",
id: "header-profile",
icon: <UserOutlined />,
label: <Link to="/manage/profile">{t("menus.currentuser.profile")}</Link>
}
// {
// key: 'langselecter',
// label: t("menus.currentuser.languageselector"),
// children: [
// {
// key: 'en-US',
// label: t("general.languages.english"),
// onClick: () => {
// window.location.href = "/?lang=en-US";
// }
// },
// {
// key: 'fr-CA',
// label: t("general.languages.french"),
// onClick: () => {
// window.location.href = "/?lang=fr-CA";
// }
// },
// {
// key: 'es-MX',
// label: t("general.languages.spanish"),
// onClick: () => {
// window.location.href = "/?lang=es-MX";
// }
// },
// ]
// },
]
},
{
key: "recent",
icon: <ClockCircleFilled />,
id: "header-recent",
children: recentItems.map((i, idx) => ({
key: idx,
id: `header-recent-${idx}`,
label: <Link to={i.url}>{i.label}</Link>
}))
}
];
return (
<Layout.Header>
<Menu
mode="horizontal"
theme={"dark"}
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
subMenuCloseDelay={0.3}
items={menuItems}
/>
<Layout.Header style={{ padding: 0 }}>
{isMobile ? (
<Menu
mode="horizontal"
theme="dark"
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
subMenuCloseDelay={0.3}
items={menuItems}
style={{ width: "100%" }}
/>
) : (
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
width: "100%"
}}
>
<Menu
mode="horizontal"
theme="dark"
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
subMenuCloseDelay={0.3}
items={menuItems.slice(0, -3)}
style={{
flex: "0 1 auto",
justifyContent: "flex-start",
minWidth: 0,
overflow: "visible"
}}
/>
<div style={{ flex: "1 0 0" }} />
<Menu
mode="horizontal"
theme="dark"
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
subMenuCloseDelay={0.3}
items={menuItems.slice(-3)}
style={{
flex: "0 0 auto",
justifyContent: "flex-end",
overflow: "visible"
}}
/>
</div>
)}
</Layout.Header>
);
}

446
package-lock.json generated
View File

@@ -9,12 +9,12 @@
"version": "0.2.0",
"license": "UNLICENSED",
"dependencies": {
"@aws-sdk/client-cloudwatch-logs": "^3.744.0",
"@aws-sdk/client-elasticache": "^3.744.0",
"@aws-sdk/client-s3": "^3.744.0",
"@aws-sdk/client-secrets-manager": "^3.744.0",
"@aws-sdk/client-ses": "^3.744.0",
"@aws-sdk/credential-provider-node": "^3.744.0",
"@aws-sdk/client-cloudwatch-logs": "^3.750.0",
"@aws-sdk/client-elasticache": "^3.750.0",
"@aws-sdk/client-s3": "^3.750.0",
"@aws-sdk/client-secrets-manager": "^3.750.0",
"@aws-sdk/client-ses": "^3.750.0",
"@aws-sdk/credential-provider-node": "^3.750.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
@@ -32,7 +32,7 @@
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
"dd-trace": "^5.36.0",
"dd-trace": "^5.37.1",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
@@ -56,7 +56,7 @@
"redis": "^4.7.0",
"rimraf": "^6.0.1",
"skia-canvas": "^2.0.2",
"soap": "^1.1.7",
"soap": "^1.1.8",
"socket.io": "^4.8.1",
"socket.io-adapter": "^2.5.5",
"ssh2-sftp-client": "^11.0.0",
@@ -286,26 +286,26 @@
}
},
"node_modules/@aws-sdk/client-cloudwatch-logs": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.744.0.tgz",
"integrity": "sha512-f2Xw9/pPA2kpCB0P36wl4nQEIe7VdBuxMtu0rV1q3JuJpMdE/FuUrT77Yj3wvZSU2IchzOSaL7g0Bqdewe2DJw==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.750.0.tgz",
"integrity": "sha512-nXzQ+x6tPKSzXE9eo4IMuxQr/Cc+R53CFBqnmq3WKJEUao7cXxLKmxC/6NiJg89Vif9QEeuP4T0hTjyIHsYezg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-node": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-node": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/eventstream-serde-browser": "^4.0.1",
"@smithy/eventstream-serde-config-resolver": "^4.0.1",
"@smithy/eventstream-serde-node": "^4.0.1",
@@ -313,21 +313,21 @@
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -354,45 +354,45 @@
}
},
"node_modules/@aws-sdk/client-elasticache": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.744.0.tgz",
"integrity": "sha512-WvpK8GhBNDJnux0Oxy3x55KB2XPdKOtV4Rl5T6POlyWBMNnZgCMq1yXg9dzP+PPj73V/sBoLrChlANgAjiSAhA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.750.0.tgz",
"integrity": "sha512-3fd8yNV0I8zllHN1Q270y0+/16TDcLdwTd8nw0p4ndSiXgen+/MjbPCY5ZTkyxgvuCHF5wD67fuz0SQ/wiBrXQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-node": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-node": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -405,35 +405,35 @@
}
},
"node_modules/@aws-sdk/client-s3": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.744.0.tgz",
"integrity": "sha512-UuiqxVI5FKlnNcWoDP8bsyJcMJa7XjGcCbVCfKSpSboNeBM4tQS3ZIViSYuz+BeO8/MuwCy7hKn7+Zjivit1nA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.750.0.tgz",
"integrity": "sha512-S9G9noCeBxchoMVkHYrRi1A1xW/VOTP2W7X34lP+Y7Wpl32yMA7IJo0fAGAuTc0q1Nu6/pXDm+oDG7rhTCA1tg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha1-browser": "5.2.0",
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-node": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-node": "3.750.0",
"@aws-sdk/middleware-bucket-endpoint": "3.734.0",
"@aws-sdk/middleware-expect-continue": "3.734.0",
"@aws-sdk/middleware-flexible-checksums": "3.744.0",
"@aws-sdk/middleware-flexible-checksums": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-location-constraint": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-sdk-s3": "3.744.0",
"@aws-sdk/middleware-sdk-s3": "3.750.0",
"@aws-sdk/middleware-ssec": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/signature-v4-multi-region": "3.744.0",
"@aws-sdk/signature-v4-multi-region": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@aws-sdk/xml-builder": "3.734.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/eventstream-serde-browser": "^4.0.1",
"@smithy/eventstream-serde-config-resolver": "^4.0.1",
"@smithy/eventstream-serde-node": "^4.0.1",
@@ -444,25 +444,25 @@
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/md5-js": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"@smithy/util-utf8": "^4.0.0",
"@smithy/util-waiter": "^4.0.2",
"tslib": "^2.6.2"
@@ -472,45 +472,45 @@
}
},
"node_modules/@aws-sdk/client-secrets-manager": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.744.0.tgz",
"integrity": "sha512-AF5Db4vmy+aWk++d6afxv+DI8YLtWq76AIlFcHv+E9Omb7/Fgzrf9AfevjLTgg8BLK51l+uSdAEfC60K3aD3RA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.750.0.tgz",
"integrity": "sha512-5JrrOQECJtcUFodKqBNKTk82WycIu/4cVFYf6QXsZQ/0bJ8zlp3vDyTeAjLriZXRXrb8HZlWqOsPCPT3wEBYdg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-node": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-node": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -537,45 +537,45 @@
}
},
"node_modules/@aws-sdk/client-ses": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.744.0.tgz",
"integrity": "sha512-nMshH8HrZddO+PBPIxocmRoM7rNc71iQtuwISwtTXAX7Fe4v3REv9DBWK46bgtNyBLSUbe3lvaPM8CCAPYOtgQ==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.750.0.tgz",
"integrity": "sha512-0apX2PEzT/09XiO42jNHjkszz/k2RLcIiaLbl1ngcKY1lWzMzIiGIqXw7Emei8iye2o6EsWuBG1p3k30iSyjhg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-node": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-node": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -588,44 +588,44 @@
}
},
"node_modules/@aws-sdk/client-sso": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.744.0.tgz",
"integrity": "sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.750.0.tgz",
"integrity": "sha512-y0Rx6pTQXw0E61CaptpZF65qNggjqOgymq/RYZU5vWba5DGQ+iqGt8Yq8s+jfBoBBNXshxq8l8Dl5Uq/JTY1wg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -637,18 +637,18 @@
}
},
"node_modules/@aws-sdk/core": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.744.0.tgz",
"integrity": "sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.750.0.tgz",
"integrity": "sha512-bZ5K7N5L4+Pa2epbVpUQqd1XLG2uU8BGs/Sd+2nbgTf+lNQJyIxAg/Qsrjz9MzmY8zzQIeRQEkNmR6yVAfCmmQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/util-middleware": "^4.0.1",
"fast-xml-parser": "4.4.1",
@@ -659,12 +659,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.744.0.tgz",
"integrity": "sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.750.0.tgz",
"integrity": "sha512-In6bsG0p/P31HcH4DBRKBbcDS/3SHvEPjfXV8ODPWZO/l3/p7IRoYBdQ07C9R+VMZU2D0+/Sc/DWK/TUNDk1+Q==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -675,20 +675,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.744.0.tgz",
"integrity": "sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.750.0.tgz",
"integrity": "sha512-wFB9qqfa20AB0dElsQz5ZlZT5o+a+XzpEpmg0erylmGYqEOvh8NQWfDUVpRmQuGq9VbvW/8cIbxPoNqEbPtuWQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/property-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -696,18 +696,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.744.0.tgz",
"integrity": "sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.750.0.tgz",
"integrity": "sha512-2YIZmyEr5RUd3uxXpxOLD9G67Bibm4I/65M6vKFP17jVMUT+R1nL7mKqmhEVO2p+BoeV+bwMyJ/jpTYG368PCg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/credential-provider-env": "3.744.0",
"@aws-sdk/credential-provider-http": "3.744.0",
"@aws-sdk/credential-provider-process": "3.744.0",
"@aws-sdk/credential-provider-sso": "3.744.0",
"@aws-sdk/credential-provider-web-identity": "3.744.0",
"@aws-sdk/nested-clients": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/credential-provider-env": "3.750.0",
"@aws-sdk/credential-provider-http": "3.750.0",
"@aws-sdk/credential-provider-process": "3.750.0",
"@aws-sdk/credential-provider-sso": "3.750.0",
"@aws-sdk/credential-provider-web-identity": "3.750.0",
"@aws-sdk/nested-clients": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -720,17 +720,17 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.744.0.tgz",
"integrity": "sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.750.0.tgz",
"integrity": "sha512-THWHHAceLwsOiowPEmKyhWVDlEUxH07GHSw5AQFDvNQtGKOQl0HSIFO1mKObT2Q2Vqzji9Bq8H58SO5BFtNPRw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.744.0",
"@aws-sdk/credential-provider-http": "3.744.0",
"@aws-sdk/credential-provider-ini": "3.744.0",
"@aws-sdk/credential-provider-process": "3.744.0",
"@aws-sdk/credential-provider-sso": "3.744.0",
"@aws-sdk/credential-provider-web-identity": "3.744.0",
"@aws-sdk/credential-provider-env": "3.750.0",
"@aws-sdk/credential-provider-http": "3.750.0",
"@aws-sdk/credential-provider-ini": "3.750.0",
"@aws-sdk/credential-provider-process": "3.750.0",
"@aws-sdk/credential-provider-sso": "3.750.0",
"@aws-sdk/credential-provider-web-identity": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -743,12 +743,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.744.0.tgz",
"integrity": "sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.750.0.tgz",
"integrity": "sha512-Q78SCH1n0m7tpu36sJwfrUSxI8l611OyysjQeMiIOliVfZICEoHcLHLcLkiR+tnIpZ3rk7d2EQ6R1jwlXnalMQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -760,14 +760,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.744.0.tgz",
"integrity": "sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.750.0.tgz",
"integrity": "sha512-FGYrDjXN/FOQVi/t8fHSv8zCk+NEvtFnuc4cZUj5OIbM4vrfFc5VaPyn41Uza3iv6Qq9rZg0QOwWnqK8lNrqUw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/client-sso": "3.744.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/token-providers": "3.744.0",
"@aws-sdk/client-sso": "3.750.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/token-providers": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -779,13 +779,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.744.0.tgz",
"integrity": "sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.750.0.tgz",
"integrity": "sha512-Nz8zs3YJ+GOTSrq+LyzbbC1Ffpt7pK38gcOyNZv76pP5MswKTUKNYBJehqwa+i7FcFQHsCk3TdhR8MT1ZR23uA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/nested-clients": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/nested-clients": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -829,22 +829,22 @@
}
},
"node_modules/@aws-sdk/middleware-flexible-checksums": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.744.0.tgz",
"integrity": "sha512-4AuBdvkwfwagZQt3kt1b0x2dtC54cOrN5gt96V2b4wIjHBRxB/IfAyynahOgx3fd7Zjf74xwmxasjs7iJ8yglg==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.750.0.tgz",
"integrity": "sha512-ach0d2buDnX2TUausUbiXXFWFo3IegLnCrA+Rw8I9AYVpLN9lTaRwAYJwYC6zEuW9Golff8MwkYsp/OaC5tKMw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/crc32": "5.2.0",
"@aws-crypto/crc32c": "5.2.0",
"@aws-crypto/util": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/is-array-buffer": "^4.0.0",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/types": "^4.1.0",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -911,23 +911,23 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-s3": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.744.0.tgz",
"integrity": "sha512-zE0kNjMV7B8pC2ClhrV2gCj/gWLiinRkfPeiUevfjl+Hdke9zcAWVNHLeGV54FJjXQEdwIAjeE7WJdHo7hio7g==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.750.0.tgz",
"integrity": "sha512-3H6Z46cmAQCHQ0z8mm7/cftY5ifiLfCjbObrbyyp2fhQs9zk6gCKzIX8Zjhw0RMd93FZi3ebRuKJWmMglf4Itw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-arn-parser": "3.723.0",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/util-config-provider": "^4.0.0",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -950,15 +950,15 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.744.0.tgz",
"integrity": "sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.750.0.tgz",
"integrity": "sha512-YYcslDsP5+2NZoN3UwuhZGkhAHPSli7HlJHBafBrvjGV/I9f8FuOO1d1ebxGdEP4HyRXUGyh+7Ur4q+Psk0ryw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/protocol-http": "^5.0.1",
"@smithy/types": "^4.1.0",
"tslib": "^2.6.2"
@@ -968,44 +968,44 @@
}
},
"node_modules/@aws-sdk/nested-clients": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.744.0.tgz",
"integrity": "sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.750.0.tgz",
"integrity": "sha512-OH68BRF0rt9nDloq4zsfeHI0G21lj11a66qosaljtEP66PWm7tQ06feKbFkXHT5E1K3QhJW3nVyK8v2fEBY5fg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.744.0",
"@aws-sdk/core": "3.750.0",
"@aws-sdk/middleware-host-header": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
"@aws-sdk/middleware-recursion-detection": "3.734.0",
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
"@aws-sdk/util-user-agent-node": "3.744.0",
"@aws-sdk/util-user-agent-node": "3.750.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/hash-node": "^4.0.1",
"@smithy/invalid-dependency": "^4.0.1",
"@smithy/middleware-content-length": "^4.0.1",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/middleware-retry": "^4.0.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-retry": "^4.0.6",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/node-http-handler": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/url-parser": "^4.0.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-body-length-node": "^4.0.0",
"@smithy/util-defaults-mode-browser": "^4.0.4",
"@smithy/util-defaults-mode-node": "^4.0.4",
"@smithy/util-defaults-mode-browser": "^4.0.6",
"@smithy/util-defaults-mode-node": "^4.0.6",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -1034,12 +1034,12 @@
}
},
"node_modules/@aws-sdk/signature-v4-multi-region": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.744.0.tgz",
"integrity": "sha512-QyrAevGGwceM+knGfV5r2NvSAjI94PETu6u+Fxalf8F/ybpK7qn1va0w3cGDU68oRqC0JHfo53JXjm9yQokj9Q==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.750.0.tgz",
"integrity": "sha512-RA9hv1Irro/CrdPcOEXKwJ0DJYJwYCsauGEdRXihrRfy8MNSR9E+mD5/Fr5Rxjaq5AHM05DYnN3mg/DU6VwzSw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/middleware-sdk-s3": "3.744.0",
"@aws-sdk/middleware-sdk-s3": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
@@ -1051,12 +1051,12 @@
}
},
"node_modules/@aws-sdk/token-providers": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.744.0.tgz",
"integrity": "sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.750.0.tgz",
"integrity": "sha512-X/KzqZw41iWolwNdc8e3RMcNSMR364viHv78u6AefXOO5eRM40c4/LuST1jDzq35/LpnqRhL7/MuixOetw+sFw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/nested-clients": "3.744.0",
"@aws-sdk/nested-clients": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -1132,12 +1132,12 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
"version": "3.744.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.744.0.tgz",
"integrity": "sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ==",
"version": "3.750.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.750.0.tgz",
"integrity": "sha512-84HJj9G9zbrHX2opLk9eHfDceB+UIHVrmflMzWHpsmo9fDuro/flIBqaVDlE021Osj6qIM0SJJcnL6s23j7JEw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/middleware-user-agent": "3.744.0",
"@aws-sdk/middleware-user-agent": "3.750.0",
"@aws-sdk/types": "3.734.0",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -1370,9 +1370,9 @@
}
},
"node_modules/@datadog/native-iast-taint-tracking": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-3.2.0.tgz",
"integrity": "sha512-Mc6FzCoyvU5yXLMsMS9yKnEqJMWoImAukJXolNWCTm+JQYCMf2yMsJ8pBAm7KyZKliamM9rCn7h7Tr2H3lXwjA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-3.3.0.tgz",
"integrity": "sha512-OzmjOncer199ATSYeCAwSACCRyQimo77LKadSHDUcxa/n9FYU+2U/bYQTYsK3vquSA2E47EbSVq9rytrlTdvnA==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2438,9 +2438,9 @@
}
},
"node_modules/@smithy/core": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.2.tgz",
"integrity": "sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q==",
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.4.tgz",
"integrity": "sha512-wFExFGK+7r2wYriOqe7RRIBNpvxwiS95ih09+GSLRBdoyK/O1uZA7K7pKesj5CBvwJuSBeXwLyR88WwIAY+DGA==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/middleware-serde": "^4.0.2",
@@ -2448,7 +2448,7 @@
"@smithy/types": "^4.1.0",
"@smithy/util-body-length-browser": "^4.0.0",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -2656,12 +2656,12 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz",
"integrity": "sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q==",
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.5.tgz",
"integrity": "sha512-cPzGZV7qStHwboFrm6GfrzQE+YDiCzWcTh4+7wKrP/ZQ4gkw+r7qDjV8GjM4N0UYsuUyLfpzLGg5hxsYTU11WA==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/core": "^3.1.2",
"@smithy/core": "^3.1.4",
"@smithy/middleware-serde": "^4.0.2",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -2675,15 +2675,15 @@
}
},
"node_modules/@smithy/middleware-retry": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz",
"integrity": "sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.6.tgz",
"integrity": "sha512-s8QzuOQnbdvRymD9Gt9c9zMq10wUQAHQ3z72uirrBHCwZcLTrL5iCOuVTMdka2IXOYhQE890WD5t6G24+F+Qcg==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/node-config-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/service-error-classification": "^4.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -2862,17 +2862,17 @@
}
},
"node_modules/@smithy/smithy-client": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.3.tgz",
"integrity": "sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A==",
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.5.tgz",
"integrity": "sha512-DMXYoYeL4QkElr216n1yodTFeATbfb4jwYM9gKn71Rw/FNA1/Sm36tkTSCsZEs7mgpG3OINmkxL9vgVFzyGPaw==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/core": "^3.1.2",
"@smithy/middleware-endpoint": "^4.0.3",
"@smithy/core": "^3.1.4",
"@smithy/middleware-endpoint": "^4.0.5",
"@smithy/middleware-stack": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/types": "^4.1.0",
"@smithy/util-stream": "^4.0.2",
"@smithy/util-stream": "^4.1.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -2969,13 +2969,13 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz",
"integrity": "sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.6.tgz",
"integrity": "sha512-N8+VCt+piupH1A7DgSVDNrVHqRLz8r6DvBkpS7EWHiIxsUk4jqGuQLjqC/gnCzmwGkVBdNruHoYAzzaSQ8e80w==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/property-provider": "^4.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
@@ -2985,16 +2985,16 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz",
"integrity": "sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.6.tgz",
"integrity": "sha512-9zhx1shd1VwSSVvLZB8CM3qQ3RPD3le7A3h/UPuyh/PC7g4OaWDi2xUNzamsVoSmCGtmUBONl56lM2EU6LcH7A==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/config-resolver": "^4.0.1",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
"@smithy/smithy-client": "^4.1.3",
"@smithy/smithy-client": "^4.1.5",
"@smithy/types": "^4.1.0",
"tslib": "^2.6.2"
},
@@ -3056,9 +3056,9 @@
}
},
"node_modules/@smithy/util-stream": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.2.tgz",
"integrity": "sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.1.tgz",
"integrity": "sha512-+Xvh8nhy0Wjv1y71rBVyV3eJU3356XsFQNI8dEZVNrQju7Eib8G31GWtO+zMa9kTCGd41Mflu+ZKfmQL/o2XzQ==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/fetch-http-handler": "^5.0.1",
@@ -4861,16 +4861,16 @@
}
},
"node_modules/dd-trace": {
"version": "5.36.0",
"resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.36.0.tgz",
"integrity": "sha512-okaqSKaDKLynUt9Jgpoj/0g7FXk5sFNHP5ZelB84g/vmQdDmpzZYXPo6HFY6ZbQT7NOHMZ/vNV46LZIjZc0Tvg==",
"version": "5.37.1",
"resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.37.1.tgz",
"integrity": "sha512-RiaP1N2jgt+XEw1+Wx7I3FVpP+lOIkLxq08Li27nZYtWE1oa2fN3TLFOsxW47BzaCTg5gWJfGdLsEqUR9Od/Ew==",
"hasInstallScript": true,
"license": "(Apache-2.0 OR BSD-3-Clause)",
"dependencies": {
"@datadog/libdatadog": "^0.4.0",
"@datadog/native-appsec": "8.4.0",
"@datadog/native-iast-rewriter": "2.8.0",
"@datadog/native-iast-taint-tracking": "3.2.0",
"@datadog/native-iast-taint-tracking": "3.3.0",
"@datadog/native-metrics": "^3.1.0",
"@datadog/pprof": "5.5.1",
"@datadog/sketches-js": "^2.1.0",
@@ -4894,7 +4894,7 @@
"protobufjs": "^7.2.5",
"retry": "^0.13.1",
"rfdc": "^1.3.1",
"semver": "^7.5.4",
"semifies": "^1.0.0",
"shell-quote": "^1.8.1",
"source-map": "^0.7.4",
"tlhunter-sorted-set": "^0.1.0",
@@ -9564,6 +9564,12 @@
"integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
"license": "BSD-3-Clause"
},
"node_modules/semifies": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/semifies/-/semifies-1.0.0.tgz",
"integrity": "sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==",
"license": "Apache-2.0"
},
"node_modules/semver": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -9926,9 +9932,9 @@
}
},
"node_modules/soap": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/soap/-/soap-1.1.7.tgz",
"integrity": "sha512-zKNMtlZhnqhW0jv5z8qVE5A/1Vw/HKXnIFe2bss8s/+tqub4uLU9r20A4mTfiluePHABvm7p2YQjyvFBJjIf9A==",
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/soap/-/soap-1.1.8.tgz",
"integrity": "sha512-fDNGyGsPkQP3bZX/366Ud5Kpjo9mCMh7ZKYIc3uipBEPPM2ZqCNkv1Z2/w0qpzpYFLL7do8WWwVUAjAwuUe1AQ==",
"license": "MIT",
"dependencies": {
"axios": "^1.7.9",
@@ -9943,7 +9949,7 @@
"xml-crypto": "^6.0.0"
},
"engines": {
"node": ">=14.0.0"
"node": ">=14.17.0"
}
},
"node_modules/socket.io": {

View File

@@ -19,12 +19,12 @@
"makeitpretty": "prettier --write \"**/*.{css,js,json,jsx,scss}\""
},
"dependencies": {
"@aws-sdk/client-cloudwatch-logs": "^3.744.0",
"@aws-sdk/client-elasticache": "^3.744.0",
"@aws-sdk/client-s3": "^3.744.0",
"@aws-sdk/client-secrets-manager": "^3.744.0",
"@aws-sdk/client-ses": "^3.744.0",
"@aws-sdk/credential-provider-node": "^3.744.0",
"@aws-sdk/client-cloudwatch-logs": "^3.750.0",
"@aws-sdk/client-elasticache": "^3.750.0",
"@aws-sdk/client-s3": "^3.750.0",
"@aws-sdk/client-secrets-manager": "^3.750.0",
"@aws-sdk/client-ses": "^3.750.0",
"@aws-sdk/credential-provider-node": "^3.750.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
@@ -42,7 +42,7 @@
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
"dd-trace": "^5.36.0",
"dd-trace": "^5.37.1",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
@@ -66,7 +66,7 @@
"redis": "^4.7.0",
"rimraf": "^6.0.1",
"skia-canvas": "^2.0.2",
"soap": "^1.1.7",
"soap": "^1.1.8",
"socket.io": "^4.8.1",
"socket.io-adapter": "^2.5.5",
"ssh2-sftp-client": "^11.0.0",

View File

@@ -9,29 +9,25 @@ const { getJobAssignmentType } = require("./stringHelpers");
const populateWatchers = (data, result) => {
data.scenarioWatchers.forEach((recipients) => {
const { user, app, fcm, email, firstName, lastName } = recipients;
// Add user to app recipients with bodyShopId if app notification is enabled
if (app === true) result.app.recipients.push({ user, bodyShopId: data.bodyShopId });
// Add user to FCM recipients if FCM notification is enabled
if (fcm === true) result.fcm.recipients.push(user);
// Add user to email recipients if email notification is enabled
if (email === true) result.email.recipients.push({ user, firstName, lastName });
});
};
/**
* Builds notification data for changes to alternate transport.
*
* @param {Object} data - The data object containing job details and alternate transport changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const alternateTransportChangedBuilder = (data) => {
const body = `The alternate transport status has been updated from ${data?.changedFields?.altTransport?.old}.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.alternateTransportChanged",
body, // Same as email body
variables: {
alternateTransport: data.data.alt_transport,
alternateTransport: data.changedFields.alt_transport?.new,
oldAlternateTransport: data.changedFields.alt_transport?.old
},
recipients: []
@@ -40,8 +36,7 @@ const alternateTransportChangedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
// subject: `Alternate transport for ${data?.jobRoNumber} (${data.bodyShopName}) changed to ${data.data.alt_transport || "None"}`,
body: `The alternate transport status has been updated.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -53,16 +48,15 @@ const alternateTransportChangedBuilder = (data) => {
/**
* Builds notification data for bill posted events.
*
* @param {Object} data - The data object containing job and billing details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const billPostedHandler = (data) => {
const body = `A bill of $${data.data.clm_total} has been posted.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.billPosted",
body,
variables: {
clmTotal: data.data.clm_total
},
@@ -72,8 +66,7 @@ const billPostedHandler = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
// subject: `Bill posted for ${data?.jobRoNumber} (${data.bodyShopName})`,
body: `A bill of $${data.data.clm_total} has been posted.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -85,16 +78,15 @@ const billPostedHandler = (data) => {
/**
* Builds notification data for changes to critical parts status.
*
* @param {Object} data - The data object containing job details and critical parts status changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const criticalPartsStatusChangedBuilder = (data) => {
const body = `The critical parts status has changed to ${data.data.queued_for_parts ? "queued" : "not queued"}.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.criticalPartsStatusChanged",
body,
variables: {
queuedForParts: data.data.queued_for_parts,
oldQueuedForParts: data.changedFields.queued_for_parts?.old
@@ -105,7 +97,7 @@ const criticalPartsStatusChangedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `The critical parts status has changed to ${data.data.queued_for_parts ? "queued" : "not queued"}.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -117,18 +109,16 @@ const criticalPartsStatusChangedBuilder = (data) => {
/**
* Builds notification data for completed intake or delivery checklists.
*
* @param {Object} data - The data object containing job details and checklist changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const intakeDeliveryChecklistCompletedBuilder = (data) => {
// Determine checklist type based on which field was changed
const checklistType = data.changedFields.intakechecklist ? "intake" : "delivery";
const body = `The ${checklistType.charAt(0).toUpperCase() + checklistType.slice(1)} checklist has been completed.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.checklistCompleted",
body,
variables: {
checklistType,
completed: true
@@ -136,10 +126,10 @@ const intakeDeliveryChecklistCompletedBuilder = (data) => {
recipients: []
},
email: {
jobRoNumber: data.jobRoNumber,
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `The ${checklistType.charAt(0).toUpperCase() + checklistType.slice(1)} checklist has been completed.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -151,16 +141,15 @@ const intakeDeliveryChecklistCompletedBuilder = (data) => {
/**
* Builds notification data for job assignment events.
*
* @param {Object} data - The data object containing job details and scenario fields.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const jobAssignedToMeBuilder = (data) => {
const body = `You have been assigned to [${getJobAssignmentType(data.scenarioFields?.[0])}]`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.assigned",
body,
variables: {
type: data.scenarioFields?.[0]
},
@@ -170,7 +159,7 @@ const jobAssignedToMeBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `You have been assigned to [${getJobAssignmentType(data.scenarioFields?.[0])}]`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -182,16 +171,15 @@ const jobAssignedToMeBuilder = (data) => {
/**
* Builds notification data for jobs added to production.
*
* @param {Object} data - The data object containing job details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const jobsAddedToProductionBuilder = (data) => {
const body = `Job has been added to production.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.addedToProduction",
body,
variables: {},
recipients: []
},
@@ -199,7 +187,7 @@ const jobsAddedToProductionBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `Job has been added to production.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -211,18 +199,17 @@ const jobsAddedToProductionBuilder = (data) => {
/**
* Builds notification data for job status changes.
*
* @param {Object} data - The data object containing job details and status changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const jobStatusChangeBuilder = (data) => {
const body = `The status has changed from ${data.changedFields.status.old} to ${data.changedFields.status.new}`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.statusChanged",
body,
variables: {
status: data.data.status,
status: data.changedFields.status.new,
oldStatus: data.changedFields.status.old
},
recipients: []
@@ -231,7 +218,7 @@ const jobStatusChangeBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `The status has changed from ${data.changedFields.status.old} to ${data.data.status}`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -243,16 +230,15 @@ const jobStatusChangeBuilder = (data) => {
/**
* Builds notification data for new media added or reassigned events.
*
* @param {Object} data - The data object containing job details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const newMediaAddedReassignedBuilder = (data) => {
const body = `New media has been added.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.newMediaAdded",
body,
variables: {},
recipients: []
},
@@ -260,7 +246,7 @@ const newMediaAddedReassignedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `New media has been added.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -272,16 +258,15 @@ const newMediaAddedReassignedBuilder = (data) => {
/**
* Builds notification data for new notes added to a job.
*
* @param {Object} data - The data object containing job details and note text.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const newNoteAddedBuilder = (data) => {
const body = `A new note has been added: "${data.data.text}"`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.newNoteAdded",
body,
variables: {
text: data.data.text
},
@@ -291,7 +276,7 @@ const newNoteAddedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `A new note has been added: "${data.data.text}"`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -303,16 +288,15 @@ const newNoteAddedBuilder = (data) => {
/**
* Builds notification data for new time tickets posted.
*
* @param {Object} data - The data object containing job details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const newTimeTicketPostedBuilder = (data) => {
const body = `A new time ticket has been posted.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.newTimeTicketPosted",
body,
variables: {},
recipients: []
},
@@ -320,7 +304,7 @@ const newTimeTicketPostedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `A new time ticket has been posted.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -332,18 +316,17 @@ const newTimeTicketPostedBuilder = (data) => {
/**
* Builds notification data for parts marked as back-ordered.
*
* @param {Object} data - The data object containing job details and parts status changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const partMarkedBackOrderedBuilder = (data) => {
const body = `A part has been marked as back-ordered.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.partBackOrdered",
body,
variables: {
queuedForParts: data.data.queued_for_parts,
queuedForParts: data.changedFields.queued_for_parts?.new,
oldQueuedForParts: data.changedFields.queued_for_parts?.old
},
recipients: []
@@ -352,8 +335,7 @@ const partMarkedBackOrderedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
// subject: `Part marked back-ordered for ${data?.jobRoNumber} (${data.bodyShopName})`,
body: `A part has been marked as back-ordered.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -365,16 +347,15 @@ const partMarkedBackOrderedBuilder = (data) => {
/**
* Builds notification data for payment collection events.
*
* @param {Object} data - The data object containing job and payment details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const paymentCollectedCompletedBuilder = (data) => {
const body = `Payment of $${data.data.clm_total} has been collected.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.paymentCollected",
body,
variables: {
clmTotal: data.data.clm_total
},
@@ -384,7 +365,7 @@ const paymentCollectedCompletedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `Payment of $${data.data.clm_total} has been collected.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -396,22 +377,21 @@ const paymentCollectedCompletedBuilder = (data) => {
/**
* Builds notification data for changes to scheduled dates.
*
* @param {Object} data - The data object containing job details and scheduling changes.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const scheduledDatesChangedBuilder = (data) => {
const body = `Scheduled dates have been updated.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.scheduledDatesChanged",
body,
variables: {
scheduledIn: data.data.scheduled_in,
scheduledIn: data.changedFields.scheduled_in?.new,
oldScheduledIn: data.changedFields.scheduled_in?.old,
scheduledCompletion: data.data.scheduled_completion,
scheduledCompletion: data.changedFields.scheduled_completion?.new,
oldScheduledCompletion: data.changedFields.scheduled_completion?.old,
scheduledDelivery: data.data.scheduled_delivery,
scheduledDelivery: data.changedFields.scheduled_delivery?.new,
oldScheduledDelivery: data.changedFields.scheduled_delivery?.old
},
recipients: []
@@ -420,8 +400,7 @@ const scheduledDatesChangedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
// subject: `Scheduled dates updated for ${data?.jobRoNumber} (${data.bodyShopName})`,
body: `Scheduled dates have been updated.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -433,16 +412,15 @@ const scheduledDatesChangedBuilder = (data) => {
/**
* Builds notification data for supplement imported events.
*
* @param {Object} data - The data object containing job and supplement details.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const supplementImportedBuilder = (data) => {
const body = `A supplement of $${data.data.cieca_ttl?.data?.supp_amt || 0} has been imported.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: "notifications.job.supplementImported",
body,
variables: {
suppAmt: data.data.cieca_ttl?.data?.supp_amt
},
@@ -452,7 +430,7 @@ const supplementImportedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `A supplement of $${data.data.cieca_ttl?.data?.supp_amt || 0} has been imported.`,
body,
recipients: []
},
fcm: { recipients: [] }
@@ -464,18 +442,17 @@ const supplementImportedBuilder = (data) => {
/**
* Builds notification data for tasks updated or created.
*
* @param {Object} data - The data object containing job details and task event type.
* @returns {Object} Notification data structured for app, email, and FCM channels.
*/
const tasksUpdatedCreatedBuilder = (data) => {
const body = `Tasks have been ${data.isNew ? "created" : "updated"}.`;
const result = {
app: {
jobId: data.jobId,
bodyShopId: data.bodyShopId,
key: data.isNew ? "notifications.job.taskCreated" : "notifications.job.taskUpdated",
body,
variables: {
type: data.isNew ? "created" : "updated",
isNew: data.isNew,
roNumber: data.jobRoNumber
},
recipients: []
@@ -484,7 +461,7 @@ const tasksUpdatedCreatedBuilder = (data) => {
jobId: data.jobId,
jobRoNumber: data.jobRoNumber,
bodyShopName: data.bodyShopName,
body: `Tasks have been ${data.isNew ? "created" : "updated"}.`,
body,
recipients: []
},
fcm: { recipients: [] }