From a077cf0820868e4b01207444a665a45177185c4d Mon Sep 17 00:00:00 2001 From: Dave Richer Date: Thu, 20 Feb 2025 17:41:52 -0500 Subject: [PATCH] feature/IO-3096-GlobalNotifications - Package updates, prepare scenario builder for app notifications, redo header to have right aligned items. --- .../components/header/header.component.jsx | 160 ++++--- package-lock.json | 446 +++++++++--------- package.json | 16 +- server/notifications/scenarioBuilders.js | 129 +++-- 4 files changed, 382 insertions(+), 369 deletions(-) diff --git a/client/src/components/header/header.component.jsx b/client/src/components/header/header.component.jsx index edd444fd5..96b0187ad 100644 --- a/client/src/components/header/header.component.jsx +++ b/client/src/components/header/header.component.jsx @@ -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: , label: {t("menus.header.productionlist")} }, - { key: "productionboard", id: "header-production-board", @@ -432,7 +448,6 @@ function Header({ ) }, - { type: "divider", id: "header-jobs-divider3" @@ -519,7 +534,6 @@ function Header({ } ] }, - ...(accountingChildren.length > 0 ? [ { @@ -537,7 +551,6 @@ function Header({ icon: , label: {t("menus.header.phonebook")} }, - { key: "temporarydocs", id: "header-temporarydocs", @@ -550,7 +563,6 @@ function Header({ ) }, - { key: "tasks", id: "tasks", @@ -623,7 +635,6 @@ function Header({ icon: , label: {t("menus.header.shop_vendors")} }, - { key: "shop-csi", id: "header-shop-csi", @@ -638,9 +649,26 @@ function Header({ } ] }, + // Right-aligned items on desktop, merged on mobile + { + key: "notifications", + icon: , + id: "header-notifications" + }, + { + key: "recent", + icon: , + id: "header-recent", + children: recentItems.map((i, idx) => ({ + key: idx, + id: `header-recent-${idx}`, + label: {i.label} + })) + }, { key: "user", - label: currentUser.displayName || currentUser.email || t("general.labels.unknown"), + icon: , + // 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({ ) }, - { key: "profile", id: "header-profile", icon: , label: {t("menus.currentuser.profile")} } - // { - // 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: , - id: "header-recent", - children: recentItems.map((i, idx) => ({ - key: idx, - id: `header-recent-${idx}`, - label: {i.label} - })) } ]; return ( - - + + {isMobile ? ( + + ) : ( +
+ +
+ +
+ )} ); } diff --git a/package-lock.json b/package-lock.json index c355f60cd..170d16d6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { diff --git a/package.json b/package.json index 11873366e..308100521 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/server/notifications/scenarioBuilders.js b/server/notifications/scenarioBuilders.js index 6ad5e00af..432b66bd4 100644 --- a/server/notifications/scenarioBuilders.js +++ b/server/notifications/scenarioBuilders.js @@ -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: [] }