{JSON.stringify(
diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
index ee644654a..325a16ffc 100644
--- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
+++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
@@ -4,12 +4,12 @@ import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Button, Card, Dropdown, Form, Input, Modal, Popconfirm, Popover, Select, Space } from "antd";
import axios from "axios";
import parsePhoneNumber from "libphonenumber-js";
-import { useContext, useMemo, useState } from "react";
+import { useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link, useNavigate } from "react-router-dom";
import { createStructuredSelector } from "reselect";
-import SocketContext from "../../contexts/SocketIO/socketContext.jsx";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
import { auth, logImEXEvent } from "../../firebase/firebase.utils";
import { CANCEL_APPOINTMENTS_BY_JOB_ID, INSERT_MANUAL_APPT } from "../../graphql/appointments.queries";
import { GET_CURRENT_QUESTIONSET_ID, INSERT_CSI } from "../../graphql/csi.queries";
@@ -130,7 +130,7 @@ export function JobsDetailHeaderActions({
const [updateJob] = useMutation(UPDATE_JOB);
const [voidJob] = useMutation(VOID_JOB);
const [cancelAllAppointments] = useMutation(CANCEL_APPOINTMENTS_BY_JOB_ID);
- const { socket } = useContext(SocketContext);
+ const { socket } = useSocket();
const notification = useNotification();
const {
diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
index ffe729b51..dd49ffee0 100644
--- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
+++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
@@ -119,7 +119,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled }) {
{job.cccontracts.map((c, index) => (
-
+
{`${c.agreementnumber} - ${c.courtesycar.fleetnumber} ${c.courtesycar.year} ${c.courtesycar.make} ${c.courtesycar.model}`}
{index !== job.cccontracts.length - 1 ? "," : null}
diff --git a/client/src/components/notification-center/notification-center.component.jsx b/client/src/components/notification-center/notification-center.component.jsx
new file mode 100644
index 000000000..5d9371f49
--- /dev/null
+++ b/client/src/components/notification-center/notification-center.component.jsx
@@ -0,0 +1,103 @@
+import { Virtuoso } from "react-virtuoso";
+import { Alert, Badge, Button, Space, Spin, Tooltip, Typography } from "antd";
+import { CheckCircleFilled, CheckCircleOutlined, EyeFilled, EyeOutlined } from "@ant-design/icons";
+import { useTranslation } from "react-i18next";
+import { Link } from "react-router-dom";
+import "./notification-center.styles.scss";
+import day from "../../utils/day.js";
+
+const { Text, Title } = Typography;
+
+const NotificationCenterComponent = ({
+ visible,
+ onClose,
+ notifications,
+ loading,
+ error,
+ showUnreadOnly,
+ toggleUnreadOnly,
+ markAllRead,
+ loadMore,
+ onNotificationClick,
+ unreadCount
+}) => {
+ const { t } = useTranslation();
+
+ const renderNotification = (index, notification) => {
+ return (
+ !notification.read && onNotificationClick(notification.id)}
+ >
+
+
+
+ {
+ e.stopPropagation();
+ if (!notification.read) {
+ onNotificationClick(notification.id);
+ }
+ }}
+ className="ro-number"
+ >
+ {t("notifications.labels.ro-number", { ro_number: notification.roNumber })}
+
+
+ {day(notification.created_at).fromNow()}
+
+
+
+
+ {notification.scenarioText.map((text, idx) => (
+ - {text}
+ ))}
+
+
+
+
+
+ );
+ };
+
+ return (
+
+
+
+ {t("notifications.labels.notification-center")}
+ {loading && !error && }
+
+
+
+ : }
+ onClick={() => toggleUnreadOnly(!showUnreadOnly)}
+ className={showUnreadOnly ? "active" : ""}
+ />
+
+
+ : }
+ onClick={markAllRead}
+ disabled={!unreadCount}
+ />
+
+
+
+ {error &&
onClose()} />}
+
+
+ );
+};
+
+export default NotificationCenterComponent;
diff --git a/client/src/components/notification-center/notification-center.container.jsx b/client/src/components/notification-center/notification-center.container.jsx
new file mode 100644
index 000000000..dfadf3a84
--- /dev/null
+++ b/client/src/components/notification-center/notification-center.container.jsx
@@ -0,0 +1,181 @@
+import { useCallback, useEffect, useMemo, useState } from "react";
+import { useQuery } from "@apollo/client";
+import { connect } from "react-redux";
+import NotificationCenterComponent from "./notification-center.component";
+import { GET_NOTIFICATIONS } from "../../graphql/notifications.queries";
+import { INITIAL_NOTIFICATIONS, useSocket } from "../../contexts/SocketIO/useSocket.jsx";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors.js";
+import day from "../../utils/day.js";
+
+// This will be used to poll for notifications when the socket is disconnected
+const NOTIFICATION_POLL_INTERVAL_SECONDS = 60;
+
+export function NotificationCenterContainer({ visible, onClose, bodyshop, unreadCount }) {
+ const [showUnreadOnly, setShowUnreadOnly] = useState(false);
+ const [notifications, setNotifications] = useState([]);
+ const [error, setError] = useState(null);
+ const { isConnected, markNotificationRead, markAllNotificationsRead } = useSocket();
+
+ const userAssociationId = bodyshop?.associations?.[0]?.id;
+
+ const baseWhereClause = useMemo(() => {
+ return { associationid: { _eq: userAssociationId } };
+ }, [userAssociationId]);
+
+ const whereClause = useMemo(() => {
+ return showUnreadOnly ? { ...baseWhereClause, read: { _is_null: true } } : baseWhereClause;
+ }, [baseWhereClause, showUnreadOnly]);
+
+ const {
+ data,
+ fetchMore,
+ loading,
+ error: queryError,
+ refetch
+ } = useQuery(GET_NOTIFICATIONS, {
+ variables: {
+ limit: INITIAL_NOTIFICATIONS,
+ offset: 0,
+ where: whereClause
+ },
+ fetchPolicy: "cache-and-network",
+ notifyOnNetworkStatusChange: true,
+ pollInterval: isConnected ? 0 : day.duration(NOTIFICATION_POLL_INTERVAL_SECONDS, "seconds").asMilliseconds(),
+ skip: !userAssociationId,
+ onError: (err) => {
+ setError(err.message);
+ console.error(`Error polling Notifications in notification-center: ${err?.message || ""}`);
+ setTimeout(() => refetch(), day.duration(2, "seconds").asMilliseconds());
+ }
+ });
+
+ useEffect(() => {
+ if (data?.notifications) {
+ const processedNotifications = data.notifications
+ .map((notif) => {
+ let scenarioText;
+ let scenarioMeta;
+ try {
+ scenarioText = notif.scenario_text ? JSON.parse(notif.scenario_text) : [];
+ scenarioMeta = notif.scenario_meta ? JSON.parse(notif.scenario_meta) : {};
+ } catch (e) {
+ console.error("Error parsing JSON for notification:", notif.id, e);
+ scenarioText = [notif.fcm_text || "Invalid notification data"];
+ scenarioMeta = {};
+ }
+ if (!Array.isArray(scenarioText)) scenarioText = [scenarioText];
+ const roNumber = notif.job.ro_number;
+ if (!Array.isArray(scenarioMeta)) scenarioMeta = [scenarioMeta];
+ return {
+ id: notif.id,
+ jobid: notif.jobid,
+ associationid: notif.associationid,
+ scenarioText,
+ scenarioMeta,
+ roNumber,
+ created_at: notif.created_at,
+ read: notif.read,
+ __typename: notif.__typename
+ };
+ })
+ .sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
+ setNotifications(processedNotifications);
+ setError(null);
+ }
+ }, [data]);
+
+ useEffect(() => {
+ if (queryError) {
+ setError(queryError.message);
+ }
+ }, [queryError]);
+
+ const loadMore = useCallback(() => {
+ if (!loading && data?.notifications.length) {
+ fetchMore({
+ variables: { offset: data.notifications.length, where: whereClause },
+ updateQuery: (prev, { fetchMoreResult }) => {
+ if (!fetchMoreResult) return prev;
+ return {
+ notifications: [...prev.notifications, ...fetchMoreResult.notifications]
+ };
+ }
+ }).catch((err) => {
+ setError(err.message);
+ console.error("Fetch more error:", err);
+ });
+ }
+ }, [data?.notifications?.length, fetchMore, loading, whereClause]);
+
+ const handleToggleUnreadOnly = (value) => {
+ setShowUnreadOnly(value);
+ };
+
+ const handleMarkAllRead = useCallback(() => {
+ markAllNotificationsRead()
+ .then(() => {
+ const timestamp = new Date().toISOString();
+ setNotifications((prev) => {
+ const updatedNotifications = prev.map((notif) =>
+ notif.read === null && notif.associationid === userAssociationId
+ ? {
+ ...notif,
+ read: timestamp
+ }
+ : notif
+ );
+ return [...updatedNotifications];
+ });
+ })
+ .catch((e) => console.error(`Error marking all notifications read: ${e?.message || ""}`));
+ }, [markAllNotificationsRead, userAssociationId]);
+
+ const handleNotificationClick = useCallback(
+ (notificationId) => {
+ markNotificationRead({
+ variables: { id: notificationId }
+ })
+ .then(() => {
+ const timestamp = new Date().toISOString();
+ setNotifications((prev) => {
+ return prev.map((notif) =>
+ notif.id === notificationId && !notif.read ? { ...notif, read: timestamp } : notif
+ );
+ });
+ })
+ .catch((e) => console.error(`Error marking notification read: ${e?.message || ""}`));
+ },
+ [markNotificationRead]
+ );
+
+ useEffect(() => {
+ if (visible && !isConnected) {
+ refetch().catch(
+ (err) => `Something went wrong re-fetching notifications in the notification-center: ${err?.message || ""}`
+ );
+ }
+ }, [visible, isConnected, refetch]);
+
+ return (
+
+ );
+}
+
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+
+export default connect(mapStateToProps, null)(NotificationCenterContainer);
diff --git a/client/src/components/notification-center/notification-center.styles.scss b/client/src/components/notification-center/notification-center.styles.scss
new file mode 100644
index 000000000..008642931
--- /dev/null
+++ b/client/src/components/notification-center/notification-center.styles.scss
@@ -0,0 +1,138 @@
+.notification-center {
+ position: absolute;
+ top: 64px;
+ right: 0;
+ width: 400px;
+ max-width: 400px;
+ background: #fff;
+ color: rgba(0, 0, 0, 0.85);
+ border: 1px solid #d9d9d9;
+ border-radius: 6px;
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08), 0 3px 6px rgba(0, 0, 0, 0.06);
+ z-index: 1000;
+ display: none;
+ overflow-x: hidden; /* Prevent horizontal overflow */
+
+ &.visible {
+ display: block;
+ }
+
+ .notification-header {
+ padding: 4px 16px;
+ border-bottom: 1px solid #f0f0f0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: #fafafa;
+
+ h3 {
+ margin: 0;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+ }
+
+ .notification-controls {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ .ant-btn-link {
+ padding: 0;
+ color: #1677ff;
+
+ &:hover {
+ color: #69b1ff;
+ }
+
+ &:disabled {
+ color: rgba(0, 0, 0, 0.25);
+ cursor: not-allowed;
+ }
+
+ &.active {
+ color: #0958d9;
+ }
+ }
+ }
+ }
+
+ .notification-read {
+ background: #fff;
+ color: rgba(0, 0, 0, 0.65);
+ }
+
+ .notification-unread {
+ background: #f5f5f5;
+ color: rgba(0, 0, 0, 0.85);
+ }
+
+ .notification-item {
+ padding: 8px 16px;
+ border-bottom: 1px solid #f0f0f0;
+ display: block;
+ overflow: visible;
+ width: 100%;
+ box-sizing: border-box;
+
+ .notification-content {
+ width: 100%;
+ }
+
+ .notification-title {
+ margin: 0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ box-sizing: border-box;
+
+ .ro-number {
+ margin: 0;
+ color: #1677ff;
+ flex-shrink: 0;
+ white-space: nowrap;
+ }
+
+ .relative-time {
+ margin: 0;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+ white-space: nowrap;
+ flex-shrink: 0;
+ margin-left: auto;
+ }
+ }
+
+ .notification-body {
+ margin-top: 4px;
+
+ .ant-typography {
+ color: inherit;
+ }
+
+ ul {
+ margin: 0;
+ padding: 0;
+ }
+
+ li {
+ margin-bottom: 2px;
+ }
+ }
+ }
+
+ .ant-badge {
+ width: 100%; /* Ensure Badge takes full width to allow .notification-title to stretch properly */
+ }
+
+ .ant-alert {
+ margin: 8px;
+ background: #fff1f0;
+ color: rgba(0, 0, 0, 0.85);
+ border: 1px solid #ffa39e;
+
+ .ant-alert-message {
+ color: #ff4d4f;
+ }
+ }
+}
diff --git a/client/src/components/payments-generate-link/payments-generate-link.component.jsx b/client/src/components/payments-generate-link/payments-generate-link.component.jsx
index f9d84d10f..7e121621f 100644
--- a/client/src/components/payments-generate-link/payments-generate-link.component.jsx
+++ b/client/src/components/payments-generate-link/payments-generate-link.component.jsx
@@ -2,15 +2,15 @@ import { CopyFilled } from "@ant-design/icons";
import { Button, Form, message, Popover, Space } from "antd";
import axios from "axios";
import Dinero from "dinero.js";
-import { parsePhoneNumber } from "libphonenumber-js";
-import React, { useContext, useState } from "react";
+import { parsePhoneNumberWithError, ParseError } from "libphonenumber-js";
+import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { openChatByPhone, setMessage } from "../../redux/messaging/messaging.actions";
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
import CurrencyFormItemComponent from "../form-items-formatted/currency-form-item.component";
-import SocketContext from "../../contexts/SocketIO/socketContext.jsx";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -29,22 +29,34 @@ export function PaymentsGenerateLink({ bodyshop, currentUser, callback, job, ope
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const [paymentLink, setPaymentLink] = useState(null);
- const { socket } = useContext(SocketContext);
+ const { socket } = useSocket();
const handleFinish = async ({ amount }) => {
setLoading(true);
let p;
try {
- p = parsePhoneNumber(job.ownr_ph1 || "", "CA");
+ // Updated to use parsePhoneNumberWithError
+ p = parsePhoneNumberWithError(job.ownr_ph1 || "", "CA");
} catch (error) {
- console.log("Unable to parse phone number");
+ if (error instanceof ParseError) {
+ // Handle specific parsing errors
+ console.log(`Phone number parsing failed: ${error.message}`);
+ } else {
+ // Handle other unexpected errors
+ console.log("Unexpected error while parsing phone number:", error);
+ }
}
setLoading(true);
const response = await axios.post("/intellipay/generate_payment_url", {
bodyshop,
amount: amount,
account: job.ro_number,
- comment: btoa(JSON.stringify({ payments: [{ jobid: job.id, amount }], userEmail: currentUser.email }))
+ comment: btoa(
+ JSON.stringify({
+ payments: [{ jobid: job.id, amount }],
+ userEmail: currentUser.email
+ })
+ )
});
setLoading(false);
setPaymentLink(response.data.shorUrl);
@@ -106,7 +118,20 @@ export function PaymentsGenerateLink({ bodyshop, currentUser, callback, job, ope
+ ]}
+ >
+ } />}
+ title={{displayName}}
+ description={watcher.user_email}
+ />
+
+ );
+ };
+
+ const popoverContent = (
+
+
:
}
+ onClick={handleToggleSelf}
+ loading={adding || removing}
+ >
+ {isWatching ? t("notifications.tooltips.unwatch") : t("notifications.tooltips.watch")}
+
+
+ {t("notifications.labels.watching-issue")}
+
+ {watcherLoading ?
:
}
+
+
+
{t("notifications.labels.add-watchers")}
+
jobWatchers.every((w) => w.user_email !== e.user_email))}
+ placeholder={t("notifications.labels.employee-search")}
+ value={selectedWatcher}
+ onChange={(value) => {
+ setSelectedWatcher(value);
+ handleWatcherSelect(value);
+ }}
+ />
+ {Enhanced_Payroll && bodyshop?.employee_teams?.length > 0 && (
+ <>
+
+ {t("notifications.labels.add-watchers-team")}
+
+ );
+
+ return (
+
+
+ : }
+ loading={watcherLoading}
+ />
+
+
+ );
+};
+
+export default connect(mapStateToProps)(JobWatcherToggle);
diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
index 726156ac4..64725e890 100644
--- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
+++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx
@@ -56,6 +56,8 @@ import { DateTimeFormat } from "../../utils/DateFormatter";
import dayjs from "../../utils/day";
import UndefinedToNull from "../../utils/undefinedtonull";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+import JobWatcherToggle from "./job-watcher-toggle.component.jsx";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -102,6 +104,7 @@ export function JobsDetailPage({
nextFetchPolicy: "network-only"
});
const notification = useNotification();
+ const { scenarioNotificationsOn } = useSocket();
useEffect(() => {
//form.setFieldsValue(transormJobToForm(job));
@@ -319,7 +322,13 @@ export function JobsDetailPage({
>
window.history.back()}
- title={job.ro_number || t("general.labels.na")}
+
+ title={
+
+ {scenarioNotificationsOn && }
+ {job.ro_number || t("general.labels.na")}
+
+ }
extra={menuExtra}
/>
diff --git a/client/src/pages/manage/manage.page.component.jsx b/client/src/pages/manage/manage.page.component.jsx
index bcf0ca09b..e813eaae0 100644
--- a/client/src/pages/manage/manage.page.component.jsx
+++ b/client/src/pages/manage/manage.page.component.jsx
@@ -1,7 +1,7 @@
import { FloatButton, Layout, Spin } from "antd";
// import preval from "preval.macro";
-import React, { lazy, Suspense, useContext, useEffect, useState } from "react";
+import React, { lazy, Suspense, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link, Route, Routes } from "react-router-dom";
@@ -20,7 +20,7 @@ import PartnerPingComponent from "../../components/partner-ping/partner-ping.com
import PrintCenterModalContainer from "../../components/print-center-modal/print-center-modal.container";
import ShopSubStatusComponent from "../../components/shop-sub-status/shop-sub-status.component";
import { requestForToken } from "../../firebase/firebase.utils";
-import SocketContext from "../../contexts/SocketIO/socketContext.jsx";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
import { selectBodyshop, selectInstanceConflict } from "../../redux/user/user.selectors";
import UpdateAlert from "../../components/update-alert/update-alert.component";
import InstanceRenderManager from "../../utils/instanceRenderMgr.js";
@@ -29,6 +29,7 @@ import WssStatusDisplayComponent from "../../components/wss-status-display/wss-s
import { selectAlerts } from "../../redux/application/application.selectors.js";
import { addAlerts } from "../../redux/application/application.actions.js";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+
const JobsPage = lazy(() => import("../jobs/jobs.page"));
const CardPaymentModalContainer = lazy(
@@ -122,7 +123,7 @@ const mapDispatchToProps = (dispatch) => ({
export function Manage({ conflict, bodyshop, alerts, setAlerts }) {
const { t } = useTranslation();
const [chatVisible] = useState(false);
- const { socket, clientId } = useContext(SocketContext);
+ const { socket, clientId } = useSocket();
const notification = useNotification();
// State to track displayed alerts
@@ -146,7 +147,7 @@ export function Manage({ conflict, bodyshop, alerts, setAlerts }) {
}
};
- fetchAlerts();
+ fetchAlerts().catch((err) => `Error fetching Bodyshop Alerts: ${err?.message || ""}`);
}, [setAlerts]);
// Use useEffect to watch for new alerts
@@ -166,7 +167,6 @@ export function Manage({ conflict, bodyshop, alerts, setAlerts }) {
description: alert.description,
type: alert.type || "info",
duration: 0,
- placement: "bottomRight",
closable: true,
onClose: () => {
// When the notification is closed, update displayed alerts state and localStorage
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 622b5ab42..ba256c680 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -3766,6 +3766,56 @@
"validation": {
"unique_vendor_name": "You must enter a unique vendor name."
}
- }
- }
+ },
+ "notifications": {
+ "labels": {
+ "notification-center": "Notification Center",
+ "scenario": "Scenario",
+ "notificationscenarios": "Job Notification Scenarios",
+ "save": "Save Scenarios",
+ "watching-issue": "Watching",
+ "add-watchers": "Add Watchers",
+ "employee-search": "Search for an Employee",
+ "teams-search": "Search for a Team",
+ "add-watchers-team": "Add Team Members",
+ "new-notification-title": "New Notification:",
+ "show-unread-only": "Show Unread",
+ "mark-all-read": "Mark Read",
+ "notification-popup-title": "Changes for Job #{{ro_number}}",
+ "ro-number": "RO #{{ro_number}}"
+ },
+ "actions": {
+ "remove": "remove"
+ },
+ "aria": {
+ "toggle": "Toggle Watching Job"
+ },
+ "tooltips": {
+ "watch": "Watch Job",
+ "unwatch": "Unwatch Job"
+ },
+ "scenarios": {
+ "job-assigned-to-me": "Job Assigned to Me",
+ "bill-posted": "Bill Posted",
+ "critical-parts-status-changed": "Critical Parts Status Changed",
+ "part-marked-back-ordered": "Part Marked Back Ordered",
+ "new-note-added": "New Note Added",
+ "supplement-imported": "Supplement Imported",
+ "schedule-dates-changed": "Schedule Dates Changed",
+ "tasks-updated-created": "Tasks Updated / Created",
+ "new-media-added-reassigned": "New Media Added or Reassigned",
+ "new-time-ticket-posted": "New Time Ticket Posted",
+ "intake-delivery-checklist-completed": "Intake or Delivery Checklist Completed",
+ "job-added-to-production": "Job Added to Production",
+ "job-status-change": "Job Status Changed",
+ "payment-collected-completed": "Payment Collected / Completed",
+ "alternate-transport-changed": "Alternate Transport Changed"
+ },
+ "channels": {
+ "app": "App",
+ "email": "Email",
+ "fcm": "Push"
+ }
+ }
+ }
}
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 04da465c4..521a8681f 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -3766,6 +3766,56 @@
"validation": {
"unique_vendor_name": ""
}
- }
- }
+ },
+ "notifications": {
+ "labels": {
+ "notification-center": "",
+ "scenario": "",
+ "notificationscenarios": "",
+ "save": "",
+ "watching-issue": "",
+ "add-watchers": "",
+ "employee-search": "",
+ "teams-search": "",
+ "add-watchers-team": "",
+ "new-notification-title": "",
+ "show-unread-only": "",
+ "mark-all-read": "",
+ "notification-popup-title": "",
+ "ro-number": ""
+ },
+ "actions": {
+ "remove": ""
+ },
+ "aria": {
+ "toggle": ""
+ },
+ "tooltips": {
+ "watch": "",
+ "unwatch": ""
+ },
+ "scenarios": {
+ "job-assigned-to-me": "",
+ "bill-posted": "",
+ "critical-parts-status-changed": "",
+ "part-marked-back-ordered": "",
+ "new-note-added": "",
+ "supplement-imported": "",
+ "schedule-dates-changed": "",
+ "tasks-updated-created": "",
+ "new-media-added-reassigned": "",
+ "new-time-ticket-posted": "",
+ "intake-delivery-checklist-completed": "",
+ "job-added-to-production": "",
+ "job-status-change": "",
+ "payment-collected-completed": "",
+ "alternate-transport-changed": ""
+ },
+ "channels": {
+ "app": "",
+ "email": "",
+ "fcm": ""
+ }
+ }
+ }
}
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 417c2061d..af75584d3 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -3766,6 +3766,56 @@
"validation": {
"unique_vendor_name": ""
}
- }
- }
+ },
+ "notifications": {
+ "labels": {
+ "notification-center": "",
+ "scenario": "",
+ "notificationscenarios": "",
+ "save": "",
+ "watching-issue": "",
+ "add-watchers": "",
+ "employee-search": "",
+ "teams-search": "",
+ "add-watchers-team": "",
+ "new-notification-title": "",
+ "show-unread-only": "",
+ "mark-all-read": "",
+ "notification-popup-title": "",
+ "ro-number": ""
+ },
+ "actions": {
+ "remove": ""
+ },
+ "aria": {
+ "toggle": ""
+ },
+ "tooltips": {
+ "watch": "",
+ "unwatch": ""
+ },
+ "scenarios": {
+ "job-assigned-to-me": "",
+ "bill-posted": "",
+ "critical-parts-status-changed": "",
+ "part-marked-back-ordered": "",
+ "new-note-added": "",
+ "supplement-imported": "",
+ "schedule-dates-changed": "",
+ "tasks-updated-created": "",
+ "new-media-added-reassigned": "",
+ "new-time-ticket-posted": "",
+ "intake-delivery-checklist-completed": "",
+ "job-added-to-production": "",
+ "job-status-change": "",
+ "payment-collected-completed": "",
+ "alternate-transport-changed": ""
+ },
+ "channels": {
+ "app": "",
+ "email": "",
+ "fcm": ""
+ }
+ }
+ }
}
diff --git a/client/src/utils/jobNotificationScenarios.js b/client/src/utils/jobNotificationScenarios.js
new file mode 100644
index 000000000..52519977b
--- /dev/null
+++ b/client/src/utils/jobNotificationScenarios.js
@@ -0,0 +1,19 @@
+const notificationScenarios = [
+ "job-assigned-to-me",
+ "bill-posted",
+ "critical-parts-status-changed",
+ "part-marked-back-ordered",
+ "new-note-added",
+ "supplement-imported",
+ "schedule-dates-changed",
+ "tasks-updated-created",
+ "new-media-added-reassigned",
+ "new-time-ticket-posted",
+ "intake-delivery-checklist-completed",
+ "job-added-to-production",
+ "job-status-change",
+ "payment-collected-completed",
+ "alternate-transport-changed"
+];
+
+export { notificationScenarios };
diff --git a/hasura/metadata/cron_triggers.yaml b/hasura/metadata/cron_triggers.yaml
index f22b1da58..2b504e492 100644
--- a/hasura/metadata/cron_triggers.yaml
+++ b/hasura/metadata/cron_triggers.yaml
@@ -31,14 +31,6 @@
headers:
- name: x-imex-auth
value_from_env: DATAPUMP_AUTH
-- name: Task Reminders
- webhook: '{{HASURA_API_URL}}/tasks-remind-handler'
- schedule: '*/15 * * * *'
- include_in_metadata: true
- payload: {}
- headers:
- - name: event-secret
- value_from_env: EVENT_SECRET
- name: Rome Usage Report
webhook: '{{HASURA_API_URL}}/data/usagereport'
schedule: 0 12 * * 5
@@ -47,3 +39,11 @@
headers:
- name: x-imex-auth
value_from_env: DATAPUMP_AUTH
+- name: Task Reminders
+ webhook: '{{HASURA_API_URL}}/tasks-remind-handler'
+ schedule: '*/15 * * * *'
+ include_in_metadata: true
+ payload: {}
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index 4a9416781..22ad129a2 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -697,12 +697,6 @@
- name: event-secret
value_from_env: EVENT_SECRET
request_transform:
- body:
- action: transform
- template: |-
- {
- "success": true
- }
method: POST
query_params: {}
template_engine: Kriti
@@ -1958,6 +1952,29 @@
_eq: X-Hasura-User-Id
- active:
_eq: true
+ event_triggers:
+ - name: notifications_documents
+ definition:
+ enable_manual: false
+ insert:
+ columns: '*'
+ update:
+ columns:
+ - jobid
+ retry_conf:
+ interval_sec: 10
+ num_retries: 0
+ timeout_sec: 60
+ webhook_from_env: HASURA_API_URL
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
+ request_transform:
+ method: POST
+ query_params: {}
+ template_engine: Kriti
+ url: '{{$base_url}}/notifications/events/handleDocumentsChange'
+ version: 2
- table:
name: email_audit_trail
schema: public
@@ -2846,13 +2863,12 @@
- role: user
permission:
check:
- user:
- _and:
- - associations:
- active:
- _eq: true
- - authid:
- _eq: X-Hasura-User-Id
+ job:
+ bodyshop:
+ associations:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
columns:
- user_email
- created_at
@@ -2868,13 +2884,12 @@
- id
- jobid
filter:
- user:
- _and:
- - associations:
- active:
- _eq: true
- - authid:
- _eq: X-Hasura-User-Id
+ job:
+ bodyshop:
+ associations:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
comment: ""
update_permissions:
- role: user
@@ -2885,26 +2900,24 @@
- id
- jobid
filter:
- user:
- _and:
- - associations:
- active:
- _eq: true
- - authid:
- _eq: X-Hasura-User-Id
+ job:
+ bodyshop:
+ associations:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
check: null
comment: ""
delete_permissions:
- role: user
permission:
filter:
- user:
- _and:
- - associations:
- active:
- _eq: true
- - authid:
- _eq: X-Hasura-User-Id
+ job:
+ bodyshop:
+ associations:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
comment: ""
- table:
name: joblines
@@ -3223,6 +3236,29 @@
_eq: X-Hasura-User-Id
- active:
_eq: true
+ event_triggers:
+ - name: notifications_joblines
+ definition:
+ enable_manual: false
+ insert:
+ columns: '*'
+ update:
+ columns:
+ - critical
+ retry_conf:
+ interval_sec: 10
+ num_retries: 0
+ timeout_sec: 60
+ webhook_from_env: HASURA_API_URL
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
+ request_transform:
+ method: POST
+ query_params: {}
+ template_engine: Kriti
+ url: '{{$base_url}}/notifications/events/handleJobLinesChange'
+ version: 1
- table:
name: joblines_status
schema: public
@@ -3369,6 +3405,13 @@
table:
name: job_conversations
schema: public
+ - name: job_watchers
+ using:
+ foreign_key_constraint_on:
+ column: jobid
+ table:
+ name: job_watchers
+ schema: public
- name: joblines
using:
foreign_key_constraint_on:
@@ -4473,10 +4516,7 @@
request_transform:
body:
action: transform
- template: |-
- {
- "success": true
- }
+ template: "{\r\n \"event\": {\r\n \"session_variables\": {\r\n \"x-hasura-user-id\": {{$body.event.session_variables.x-hasura-user-id}}\r\n }, \r\n \"op\": \"UPDATE\",\r\n \"data\": {\r\n \"old\": {\r\n \"id\": {{$body.event.data.old.id}},\r\n \"ro_number\": {{$body.event.data.old.ro_number}},\r\n \"queued_for_parts\": {{$body.event.data.old.queued_for_parts}},\r\n \"employee_prep\": {{$body.event.data.old.employee_prep}},\r\n \"clm_total\": {{$body.event.data.old.clm_total}},\r\n \"towin\": {{$body.event.data.old.towin}},\r\n \"employee_body\": {{$body.event.data.old.employee_body}},\r\n \"converted\": {{$body.event.data.old.converted}},\r\n \"scheduled_in\": {{$body.event.data.old.scheduled_in}},\r\n \"scheduled_completion\": {{$body.event.data.old.scheduled_completion}},\r\n \"scheduled_delivery\": {{$body.event.data.old.scheduled_delivery}},\r\n \"actual_delivery\": {{$body.event.data.old.actual_delivery}},\r\n \"actual_completion\": {{$body.event.data.old.actual_completion}},\r\n \"alt_transport\": {{$body.event.data.old.alt_transport}},\r\n \"date_exported\": {{$body.event.data.old.date_exported}},\r\n \"status\": {{$body.event.data.old.status}},\r\n \"employee_csr\": {{$body.event.data.old.employee_csr}},\r\n \"actual_in\": {{$body.event.data.old.actual_in}},\r\n \"deliverchecklist\": {{$body.event.data.old.deliverchecklist}},\r\n \"comment\": {{$body.event.data.old.comment}},\r\n \"employee_refinish\": {{$body.event.data.old.employee_refinish}},\r\n \"inproduction\": {{$body.event.data.old.inproduction}},\r\n \"production_vars\": {{$body.event.data.old.production_vars}},\r\n \"intakechecklist\": {{$body.event.data.old.intakechecklist}},\r\n \"cieca_ttl\": {{$body.event.data.old.cieca_ttl}},\r\n \"date_invoiced\": {{$body.event.data.old.date_invoiced}}\r\n },\r\n \"new\": {\r\n \"id\": {{$body.event.data.new.id}},\r\n \"ro_number\": {{$body.event.data.old.ro_number}},\r\n \"queued_for_parts\": {{$body.event.data.new.queued_for_parts}},\r\n \"employee_prep\": {{$body.event.data.new.employee_prep}},\r\n \"clm_total\": {{$body.event.data.new.clm_total}},\r\n \"towin\": {{$body.event.data.new.towin}},\r\n \"employee_body\": {{$body.event.data.new.employee_body}},\r\n \"converted\": {{$body.event.data.new.converted}},\r\n \"scheduled_in\": {{$body.event.data.new.scheduled_in}},\r\n \"scheduled_completion\": {{$body.event.data.new.scheduled_completion}},\r\n \"scheduled_delivery\": {{$body.event.data.new.scheduled_delivery}},\r\n \"actual_delivery\": {{$body.event.data.new.actual_delivery}},\r\n \"actual_completion\": {{$body.event.data.new.actual_completion}},\r\n \"alt_transport\": {{$body.event.data.new.alt_transport}},\r\n \"date_exported\": {{$body.event.data.new.date_exported}},\r\n \"status\": {{$body.event.data.new.status}},\r\n \"employee_csr\": {{$body.event.data.new.employee_csr}},\r\n \"actual_in\": {{$body.event.data.new.actual_in}},\r\n \"deliverchecklist\": {{$body.event.data.new.deliverchecklist}},\r\n \"comment\": {{$body.event.data.new.comment}},\r\n \"employee_refinish\": {{$body.event.data.new.employee_refinish}},\r\n \"inproduction\": {{$body.event.data.new.inproduction}},\r\n \"production_vars\": {{$body.event.data.new.production_vars}},\r\n \"intakechecklist\": {{$body.event.data.new.intakechecklist}},\r\n \"cieca_ttl\": {{$body.event.data.new.cieca_ttl}},\r\n \"date_invoiced\": {{$body.event.data.new.date_invoiced}}\r\n }\r\n }\r\n },\r\n \"trigger\": {\r\n \"name\": \"notifications_jobs\"\r\n },\r\n \"table\": {\r\n \"schema\": \"public\",\r\n \"name\": \"jobs\"\r\n }\r\n}\r\n"
method: POST
query_params: {}
template_engine: Kriti
@@ -4825,6 +4865,26 @@
_eq: X-Hasura-User-Id
- active:
_eq: true
+ event_triggers:
+ - name: notifications_notes
+ definition:
+ enable_manual: false
+ insert:
+ columns: '*'
+ retry_conf:
+ interval_sec: 10
+ num_retries: 0
+ timeout_sec: 60
+ webhook_from_env: HASURA_API_URL
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
+ request_transform:
+ method: POST
+ query_params: {}
+ template_engine: Kriti
+ url: '{{$base_url}}/notifications/events/handleNotesChange'
+ version: 2
- table:
name: notifications
schema: public
@@ -4835,46 +4895,79 @@
- name: job
using:
foreign_key_constraint_on: jobid
+ insert_permissions:
+ - role: user
+ permission:
+ check:
+ job:
+ bodyshop:
+ associations:
+ _and:
+ - user:
+ authid:
+ _eq: X-Hasura-User-Id
+ - active:
+ _eq: true
+ columns:
+ - scenario_meta
+ - scenario_text
+ - fcm_text
+ - created_at
+ - read
+ - updated_at
+ - associationid
+ - id
+ - jobid
+ comment: ""
select_permissions:
- role: user
permission:
columns:
- - associationid
+ - scenario_meta
+ - scenario_text
+ - fcm_text
- created_at
- - fcm_data
- - fcm_message
- - fcm_title
+ - read
+ - updated_at
+ - associationid
- id
- jobid
- - meta
- - read
- - ui_translation_meta
- - ui_translation_string
- - updated_at
filter:
- association:
- _and:
- - active:
- _eq: true
- - user:
- authid:
- _eq: X-Hasura-User-Id
+ job:
+ bodyshop:
+ associations:
+ _and:
+ - user:
+ authid:
+ _eq: X-Hasura-User-Id
+ - active:
+ _eq: true
+ allow_aggregations: true
comment: ""
update_permissions:
- role: user
permission:
columns:
- - meta
+ - scenario_meta
+ - scenario_text
+ - fcm_text
+ - created_at
- read
- filter:
- association:
- _and:
- - active:
- _eq: true
- - user:
- authid:
- _eq: X-Hasura-User-Id
- check: null
+ - updated_at
+ - associationid
+ - id
+ - jobid
+ filter: {}
+ check:
+ job:
+ bodyshop:
+ associations:
+ _and:
+ - user:
+ authid:
+ _eq: X-Hasura-User-Id
+ - active:
+ _eq: true
comment: ""
- table:
name: owners
@@ -5648,6 +5741,25 @@
- active:
_eq: true
event_triggers:
+ - name: notifications_payments
+ definition:
+ enable_manual: false
+ insert:
+ columns: '*'
+ retry_conf:
+ interval_sec: 10
+ num_retries: 0
+ timeout_sec: 60
+ webhook_from_env: HASURA_API_URL
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
+ request_transform:
+ method: POST
+ query_params: {}
+ template_engine: Kriti
+ url: '{{$base_url}}/notifications/events/handlePaymentsChange'
+ version: 2
- name: os_payments
definition:
delete:
@@ -6119,9 +6231,13 @@
columns: '*'
update:
columns:
+ - joblineid
- assigned_to
+ - partsorderid
- completed
- description
+ - billid
+ - priority
retry_conf:
interval_sec: 10
num_retries: 0
@@ -6131,12 +6247,6 @@
- name: event-secret
value_from_env: EVENT_SECRET
request_transform:
- body:
- action: transform
- template: |-
- {
- "success": true
- }
method: POST
query_params: {}
template_engine: Kriti
@@ -6313,12 +6423,6 @@
- name: event-secret
value_from_env: EVENT_SECRET
request_transform:
- body:
- action: transform
- template: |-
- {
- "success": true
- }
method: POST
query_params: {}
template_engine: Kriti
diff --git a/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/down.sql b/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/down.sql
new file mode 100644
index 000000000..bb56e2f77
--- /dev/null
+++ b/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/down.sql
@@ -0,0 +1,4 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- alter table "public"."notifications" add column "html_body" text
+-- not null;
diff --git a/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/up.sql b/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/up.sql
new file mode 100644
index 000000000..be7753c99
--- /dev/null
+++ b/hasura/migrations/1740162115648_alter_table_public_notifications_add_column_html_body/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."notifications" add column "html_body" text
+ not null;
diff --git a/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/down.sql b/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/down.sql
new file mode 100644
index 000000000..a2d9ebaa9
--- /dev/null
+++ b/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/down.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" alter column "fcm_title" set not null;
diff --git a/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/up.sql b/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/up.sql
new file mode 100644
index 000000000..3755dc382
--- /dev/null
+++ b/hasura/migrations/1740162296457_alter_table_public_notifications_alter_column_fcm_title/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" alter column "fcm_title" drop not null;
diff --git a/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/down.sql b/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/down.sql
new file mode 100644
index 000000000..dadd5d448
--- /dev/null
+++ b/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/down.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" alter column "fcm_message" set not null;
diff --git a/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/up.sql b/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/up.sql
new file mode 100644
index 000000000..387272491
--- /dev/null
+++ b/hasura/migrations/1740162315085_alter_table_public_notifications_alter_column_fcm_message/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" alter column "fcm_message" drop not null;
diff --git a/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/down.sql b/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/down.sql
new file mode 100644
index 000000000..3986cbda4
--- /dev/null
+++ b/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/down.sql
@@ -0,0 +1,3 @@
+comment on column "public"."notifications"."html_body" is E'Real Time Notifications System';
+alter table "public"."notifications" alter column "html_body" drop not null;
+alter table "public"."notifications" add column "html_body" text;
diff --git a/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/up.sql b/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/up.sql
new file mode 100644
index 000000000..58ee2d95f
--- /dev/null
+++ b/hasura/migrations/1740417011431_alter_table_public_notifications_drop_column_html_body/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" drop column "html_body" cascade;
diff --git a/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/down.sql b/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/down.sql
new file mode 100644
index 000000000..70e4fc311
--- /dev/null
+++ b/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/down.sql
@@ -0,0 +1,4 @@
+comment on column "public"."notifications"."fcm_data" is E'Real Time Notifications System';
+alter table "public"."notifications" alter column "fcm_data" set default jsonb_build_object();
+alter table "public"."notifications" alter column "fcm_data" drop not null;
+alter table "public"."notifications" add column "fcm_data" jsonb;
diff --git a/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/up.sql b/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/up.sql
new file mode 100644
index 000000000..3f6441573
--- /dev/null
+++ b/hasura/migrations/1740417046609_alter_table_public_notifications_drop_column_fcm_data/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" drop column "fcm_data" cascade;
diff --git a/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/down.sql b/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/down.sql
new file mode 100644
index 000000000..4651b79a3
--- /dev/null
+++ b/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/down.sql
@@ -0,0 +1,3 @@
+comment on column "public"."notifications"."fcm_message" is E'Real Time Notifications System';
+alter table "public"."notifications" alter column "fcm_message" drop not null;
+alter table "public"."notifications" add column "fcm_message" text;
diff --git a/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/up.sql b/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/up.sql
new file mode 100644
index 000000000..6a51ad6f5
--- /dev/null
+++ b/hasura/migrations/1740417076166_alter_table_public_notifications_drop_column_fcm_message/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" drop column "fcm_message" cascade;
diff --git a/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/down.sql b/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/down.sql
new file mode 100644
index 000000000..234537d07
--- /dev/null
+++ b/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/down.sql
@@ -0,0 +1,3 @@
+comment on column "public"."notifications"."ui_translation_string" is E'Real Time Notifications System';
+alter table "public"."notifications" alter column "ui_translation_string" drop not null;
+alter table "public"."notifications" add column "ui_translation_string" text;
diff --git a/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/up.sql b/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/up.sql
new file mode 100644
index 000000000..702af0747
--- /dev/null
+++ b/hasura/migrations/1740417110704_alter_table_public_notifications_drop_column_ui_translation_string/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" drop column "ui_translation_string" cascade;
diff --git a/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/down.sql b/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/down.sql
new file mode 100644
index 000000000..f76615392
--- /dev/null
+++ b/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/down.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "fcm_text" to "fcm_title";
diff --git a/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/up.sql b/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/up.sql
new file mode 100644
index 000000000..4e39cf157
--- /dev/null
+++ b/hasura/migrations/1740417137294_alter_table_public_notifications_alter_column_fcm_title/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "fcm_title" to "fcm_text";
diff --git a/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/down.sql b/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/down.sql
new file mode 100644
index 000000000..4b7add7b9
--- /dev/null
+++ b/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/down.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "scenario_text" to "ui_translation_meta";
diff --git a/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/up.sql b/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/up.sql
new file mode 100644
index 000000000..b2c933ed9
--- /dev/null
+++ b/hasura/migrations/1740417505757_alter_table_public_notifications_alter_column_ui_translation_meta/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "ui_translation_meta" to "scenario_text";
diff --git a/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/down.sql b/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/down.sql
new file mode 100644
index 000000000..f0ef6d736
--- /dev/null
+++ b/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/down.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "scenario_meta" to "meta";
diff --git a/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/up.sql b/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/up.sql
new file mode 100644
index 000000000..4561da723
--- /dev/null
+++ b/hasura/migrations/1740417594189_alter_table_public_notifications_alter_column_meta/up.sql
@@ -0,0 +1 @@
+alter table "public"."notifications" rename column "meta" to "scenario_meta";
diff --git a/package-lock.json b/package-lock.json
index 81417ecea..89fb3ea39 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,37 +9,39 @@
"version": "0.2.0",
"license": "UNLICENSED",
"dependencies": {
- "@aws-sdk/client-cloudwatch-logs": "^3.738.0",
- "@aws-sdk/client-elasticache": "^3.738.0",
- "@aws-sdk/client-s3": "^3.738.0",
- "@aws-sdk/client-secrets-manager": "^3.738.0",
- "@aws-sdk/client-ses": "^3.738.0",
- "@aws-sdk/credential-provider-node": "^3.738.0",
+ "@aws-sdk/client-cloudwatch-logs": "^3.758.0",
+ "@aws-sdk/client-elasticache": "^3.758.0",
+ "@aws-sdk/client-s3": "^3.758.0",
+ "@aws-sdk/client-secrets-manager": "^3.758.0",
+ "@aws-sdk/client-ses": "^3.758.0",
+ "@aws-sdk/credential-provider-node": "^3.758.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
"aws4": "^1.13.2",
- "axios": "^1.7.7",
+ "axios": "^1.8.1",
+ "bee-queue": "^1.7.1",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.3",
- "chart.js": "^4.4.6",
+ "bullmq": "^5.41.7",
+ "chart.js": "^4.4.8",
"cloudinary": "^2.5.1",
- "compression": "^1.7.5",
+ "compression": "^1.8.0",
"cookie-parser": "^1.4.7",
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
- "dd-trace": "^5.33.1",
+ "dd-trace": "^5.40.0",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
- "firebase-admin": "^13.0.2",
+ "firebase-admin": "^13.1.0",
"graphql": "^16.10.0",
"graphql-request": "^6.1.0",
"inline-css": "^4.0.3",
- "intuit-oauth": "^4.1.3",
- "ioredis": "^5.4.2",
+ "intuit-oauth": "^4.2.0",
+ "ioredis": "^5.5.0",
"json-2-csv": "^5.5.8",
"juice": "^11.0.0",
"lodash": "^4.17.21",
@@ -54,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",
@@ -66,14 +68,14 @@
"xmlbuilder2": "^3.1.1"
},
"devDependencies": {
- "@eslint/js": "^9.19.0",
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
+ "@eslint/js": "^9.21.0",
+ "@trivago/prettier-plugin-sort-imports": "^5.2.2",
"concurrently": "^8.2.2",
- "eslint": "^9.19.0",
+ "eslint": "^9.21.0",
"eslint-plugin-react": "^7.37.4",
- "globals": "^15.14.0",
+ "globals": "^15.15.0",
"p-limit": "^3.1.0",
- "prettier": "^3.3.3",
+ "prettier": "^3.5.2",
"source-map-explorer": "^2.5.2"
},
"engines": {
@@ -284,26 +286,26 @@
}
},
"node_modules/@aws-sdk/client-cloudwatch-logs": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.738.0.tgz",
- "integrity": "sha512-C2TuIKZjBl4xIQEJC5IXFEClNkxaSEJ35Y95p+7KbzBAunRFYEwidCAN2j14l2kLFbr+Z7JO/txtSQebO22hJA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.758.0.tgz",
+ "integrity": "sha512-IlEIm5h4vfeoZyY8Op4W6lX1lqcEYE3DRKl+fMKRTFttvJ+AJfuZlAgFlMh9OPFQ0ZMLe8etoxHwKN50YCLivw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/credential-provider-node": "3.738.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-node": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@smithy/eventstream-serde-browser": "^4.0.1",
"@smithy/eventstream-serde-config-resolver": "^4.0.1",
"@smithy/eventstream-serde-node": "^4.0.1",
@@ -311,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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -352,45 +354,45 @@
}
},
"node_modules/@aws-sdk/client-elasticache": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.738.0.tgz",
- "integrity": "sha512-0/aWFPoOZR2GB1vxKUFcrWxJf1fVDGeXdie/DrlZta1TBnoOTBFfl9kBF0SWuSlq4eXAP3k9gM3LfJcVSEyvrg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.758.0.tgz",
+ "integrity": "sha512-qmDOTHhB0hUm/Ifypi6+zjUR4dl7H576oM4/p2RUgkjyz2RgJaLJhyX32TDDzcX2maevNHJ3TijXOkGxoGDeog==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/credential-provider-node": "3.738.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-node": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -403,35 +405,35 @@
}
},
"node_modules/@aws-sdk/client-s3": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.738.0.tgz",
- "integrity": "sha512-1Im/p5yfoV15ydVY+QlffsWQkQm7iGVI+3V9tCHEUT6SdmukYEpN3G8Y+lWofRBidxzUE2Xd+MbChCXfzLAoAg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz",
+ "integrity": "sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==",
"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.734.0",
- "@aws-sdk/credential-provider-node": "3.738.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-node": "3.758.0",
"@aws-sdk/middleware-bucket-endpoint": "3.734.0",
"@aws-sdk/middleware-expect-continue": "3.734.0",
- "@aws-sdk/middleware-flexible-checksums": "3.735.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.758.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.734.0",
+ "@aws-sdk/middleware-sdk-s3": "3.758.0",
"@aws-sdk/middleware-ssec": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
- "@aws-sdk/signature-v4-multi-region": "3.734.0",
+ "@aws-sdk/signature-v4-multi-region": "3.758.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@aws-sdk/xml-builder": "3.734.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@smithy/eventstream-serde-browser": "^4.0.1",
"@smithy/eventstream-serde-config-resolver": "^4.0.1",
"@smithy/eventstream-serde-node": "^4.0.1",
@@ -442,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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@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.2",
"@smithy/util-utf8": "^4.0.0",
"@smithy/util-waiter": "^4.0.2",
"tslib": "^2.6.2"
@@ -470,45 +472,45 @@
}
},
"node_modules/@aws-sdk/client-secrets-manager": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.738.0.tgz",
- "integrity": "sha512-CHa55tOGnzNdkrTFA0vWI/d+5iR9s5/ARviowjp9A/qb3ykb+/vdney0iO6rNp11XIYnorlwpuqv5RRUpTPrtA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.758.0.tgz",
+ "integrity": "sha512-Vi4cdCim0jQx3rrU5R1W4v3czoWL0ajBtoI15oSSt7cwLjzNA0xq4nXSa6rahjTgtZWlLeBprbquvxNzY3qg5Q==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/credential-provider-node": "3.738.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-node": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -535,45 +537,45 @@
}
},
"node_modules/@aws-sdk/client-ses": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.738.0.tgz",
- "integrity": "sha512-/5HyM58w/l+v9iHtuoMcRl/B1GOpDM53ipPziMpnW+ZQchysyH8z8JQ3wJCBUSdNONqSGE3U5QK21VcHm5B2xw==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.758.0.tgz",
+ "integrity": "sha512-cWBjZqY7SsFdTTSw3726DEPy3d7FfQ8qrw21RCukM/p3Ty42NWauHkqgxOmRygeiSY3ygHmWexc32B+4RXXqTw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/credential-provider-node": "3.738.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-node": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -586,44 +588,44 @@
}
},
"node_modules/@aws-sdk/client-sso": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.734.0.tgz",
- "integrity": "sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz",
+ "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -635,18 +637,18 @@
}
},
"node_modules/@aws-sdk/core": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.734.0.tgz",
- "integrity": "sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz",
+ "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
+ "@smithy/smithy-client": "^4.1.6",
"@smithy/types": "^4.1.0",
"@smithy/util-middleware": "^4.0.1",
"fast-xml-parser": "4.4.1",
@@ -657,12 +659,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz",
- "integrity": "sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz",
+ "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -673,20 +675,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.734.0.tgz",
- "integrity": "sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz",
+ "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/fetch-http-handler": "^5.0.1",
- "@smithy/node-http-handler": "^4.0.2",
+ "@smithy/node-http-handler": "^4.0.3",
"@smithy/property-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@smithy/types": "^4.1.0",
- "@smithy/util-stream": "^4.0.2",
+ "@smithy/util-stream": "^4.1.2",
"tslib": "^2.6.2"
},
"engines": {
@@ -694,18 +696,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.734.0.tgz",
- "integrity": "sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz",
+ "integrity": "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/credential-provider-env": "3.734.0",
- "@aws-sdk/credential-provider-http": "3.734.0",
- "@aws-sdk/credential-provider-process": "3.734.0",
- "@aws-sdk/credential-provider-sso": "3.734.0",
- "@aws-sdk/credential-provider-web-identity": "3.734.0",
- "@aws-sdk/nested-clients": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/credential-provider-env": "3.758.0",
+ "@aws-sdk/credential-provider-http": "3.758.0",
+ "@aws-sdk/credential-provider-process": "3.758.0",
+ "@aws-sdk/credential-provider-sso": "3.758.0",
+ "@aws-sdk/credential-provider-web-identity": "3.758.0",
+ "@aws-sdk/nested-clients": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -718,17 +720,17 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.738.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.738.0.tgz",
- "integrity": "sha512-3MuREsazwBxghKb2sQQHvie+uuK4dX4/ckFYiSoffzJQd0YHxaGxf8cr4NOSCQCUesWu8D3Y0SzlnHGboVSkpA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz",
+ "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.734.0",
- "@aws-sdk/credential-provider-http": "3.734.0",
- "@aws-sdk/credential-provider-ini": "3.734.0",
- "@aws-sdk/credential-provider-process": "3.734.0",
- "@aws-sdk/credential-provider-sso": "3.734.0",
- "@aws-sdk/credential-provider-web-identity": "3.734.0",
+ "@aws-sdk/credential-provider-env": "3.758.0",
+ "@aws-sdk/credential-provider-http": "3.758.0",
+ "@aws-sdk/credential-provider-ini": "3.758.0",
+ "@aws-sdk/credential-provider-process": "3.758.0",
+ "@aws-sdk/credential-provider-sso": "3.758.0",
+ "@aws-sdk/credential-provider-web-identity": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -741,12 +743,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.734.0.tgz",
- "integrity": "sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz",
+ "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -758,14 +760,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.734.0.tgz",
- "integrity": "sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz",
+ "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.734.0",
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/token-providers": "3.734.0",
+ "@aws-sdk/client-sso": "3.758.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/token-providers": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -777,13 +779,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.734.0.tgz",
- "integrity": "sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz",
+ "integrity": "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
- "@aws-sdk/nested-clients": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/nested-clients": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -827,22 +829,22 @@
}
},
"node_modules/@aws-sdk/middleware-flexible-checksums": {
- "version": "3.735.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.735.0.tgz",
- "integrity": "sha512-Tx7lYTPwQFRe/wQEHMR6Drh/S+X0ToAEq1Ava9QyxV1riwtepzRLojpNDELFb3YQVVYbX7FEiBMCJLMkmIIY+A==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz",
+ "integrity": "sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==",
"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.734.0",
+ "@aws-sdk/core": "3.758.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.2",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -909,23 +911,23 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-s3": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.734.0.tgz",
- "integrity": "sha512-zeZPenDhkP/RXYMFG3exhNOe2Qukg2l2KpIjxq9o66meELiTULoIXjCmgPoWcM8zzrue06SBdTsaJDHfDl2vdA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz",
+ "integrity": "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-arn-parser": "3.723.0",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.2",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -948,15 +950,15 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.734.0.tgz",
- "integrity": "sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz",
+ "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "3.734.0",
- "@smithy/core": "^3.1.1",
+ "@aws-sdk/util-endpoints": "3.743.0",
+ "@smithy/core": "^3.1.5",
"@smithy/protocol-http": "^5.0.1",
"@smithy/types": "^4.1.0",
"tslib": "^2.6.2"
@@ -966,44 +968,44 @@
}
},
"node_modules/@aws-sdk/nested-clients": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.734.0.tgz",
- "integrity": "sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz",
+ "integrity": "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.734.0",
+ "@aws-sdk/core": "3.758.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.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
- "@aws-sdk/util-endpoints": "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.734.0",
+ "@aws-sdk/util-user-agent-node": "3.758.0",
"@smithy/config-resolver": "^4.0.1",
- "@smithy/core": "^3.1.1",
+ "@smithy/core": "^3.1.5",
"@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.2",
- "@smithy/middleware-retry": "^4.0.3",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/middleware-retry": "^4.0.7",
+ "@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/node-http-handler": "^4.0.3",
"@smithy/protocol-http": "^5.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@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.3",
- "@smithy/util-defaults-mode-node": "^4.0.3",
+ "@smithy/util-defaults-mode-browser": "^4.0.7",
+ "@smithy/util-defaults-mode-node": "^4.0.7",
"@smithy/util-endpoints": "^3.0.1",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -1032,12 +1034,12 @@
}
},
"node_modules/@aws-sdk/signature-v4-multi-region": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.734.0.tgz",
- "integrity": "sha512-GSRP8UH30RIYkcpPILV4pWrKFjRmmNjtUd41HTKWde5GbjJvNYpxqFXw2aIJHjKTw/js3XEtGSNeTaQMVVt3CQ==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz",
+ "integrity": "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-sdk-s3": "3.734.0",
+ "@aws-sdk/middleware-sdk-s3": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
@@ -1049,12 +1051,12 @@
}
},
"node_modules/@aws-sdk/token-providers": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.734.0.tgz",
- "integrity": "sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz",
+ "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/nested-clients": "3.734.0",
+ "@aws-sdk/nested-clients": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -1091,9 +1093,9 @@
}
},
"node_modules/@aws-sdk/util-endpoints": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.734.0.tgz",
- "integrity": "sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg==",
+ "version": "3.743.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz",
+ "integrity": "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
@@ -1130,12 +1132,12 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.734.0.tgz",
- "integrity": "sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA==",
+ "version": "3.758.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz",
+ "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-user-agent": "3.734.0",
+ "@aws-sdk/middleware-user-agent": "3.758.0",
"@aws-sdk/types": "3.734.0",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -1182,124 +1184,17 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
- "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz",
+ "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.17.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
- "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-environment-visitor/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
- "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
- "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
- "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/parser": "^7.26.8",
+ "@babel/types": "^7.26.8",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1326,13 +1221,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
- "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz",
+ "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.3"
+ "@babel/types": "^7.26.8"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1341,25 +1236,10 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/parser/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/runtime": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
"integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -1369,87 +1249,39 @@
}
},
"node_modules/@babel/template": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
- "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz",
+ "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.26.8",
+ "@babel/types": "^7.26.8"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz",
+ "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.8",
+ "@babel/parser": "^7.26.8",
+ "@babel/template": "^7.26.8",
+ "@babel/types": "^7.26.8",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse/node_modules/@babel/generator": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
- "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.26.3",
- "@babel/types": "^7.26.3",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -1460,28 +1292,15 @@
"node": ">=4"
}
},
- "node_modules/@babel/traverse/node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@babel/types": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
- "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz",
+ "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1527,9 +1346,9 @@
}
},
"node_modules/@datadog/native-iast-rewriter": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/@datadog/native-iast-rewriter/-/native-iast-rewriter-2.6.1.tgz",
- "integrity": "sha512-zv7cr/MzHg560jhAnHcO7f9pLi4qaYrBEcB+Gla0xkVouYSDsp8cGXIGG4fiGdAMHdt7SpDNS6+NcEAqD/v8Ig==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-iast-rewriter/-/native-iast-rewriter-2.8.0.tgz",
+ "integrity": "sha512-DKmtvlmCld9RIJwDcPKWNkKYWYQyiuOrOtynmBppJiUv/yfCOuZtsQV4Zepj40H33sLiQyi5ct6dbWl53vxqkA==",
"license": "Apache-2.0",
"dependencies": {
"lru-cache": "^7.14.0",
@@ -1551,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": {
@@ -1649,13 +1468,13 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
- "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+ "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.5",
+ "@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -1664,9 +1483,9 @@
}
},
"node_modules/@eslint/core": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz",
- "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
+ "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1677,9 +1496,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
- "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
+ "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1714,9 +1533,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.19.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz",
- "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==",
+ "version": "9.21.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
+ "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1724,9 +1543,9 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
- "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1734,13 +1553,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz",
- "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==",
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
+ "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.10.0",
+ "@eslint/core": "^0.12.0",
"levn": "^0.4.1"
},
"engines": {
@@ -2036,9 +1855,9 @@
}
},
"node_modules/@humanwhocodes/retry": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
- "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2138,9 +1957,9 @@
"license": "MIT"
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2264,6 +2083,84 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz",
+ "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz",
+ "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz",
+ "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz",
+ "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz",
+ "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz",
+ "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@oozcitak/dom": {
"version": "1.15.10",
"resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz",
@@ -2541,17 +2438,17 @@
}
},
"node_modules/@smithy/core": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.1.tgz",
- "integrity": "sha512-hhUZlBWYuh9t6ycAcN90XOyG76C1AzwxZZgaCVPMYpWqqk9uMFo7HGG5Zu2cEhCJn7DdOi5krBmlibWWWPgdsw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz",
+ "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/middleware-serde": "^4.0.2",
"@smithy/protocol-http": "^5.0.1",
"@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.2",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -2759,13 +2656,13 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.2.tgz",
- "integrity": "sha512-Z9m67CXizGpj8CF/AW/7uHqYNh1VXXOn9Ap54fenWsCa0HnT4cJuE61zqG3cBkTZJDCy0wHJphilI41co/PE5g==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz",
+ "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.1.1",
- "@smithy/middleware-serde": "^4.0.1",
+ "@smithy/core": "^3.1.5",
+ "@smithy/middleware-serde": "^4.0.2",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -2778,15 +2675,15 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.3.tgz",
- "integrity": "sha512-TiKwwQTwUDeDtwWW8UWURTqu7s6F3wN2pmziLU215u7bqpVT9Mk2oEvURjpRLA+5XeQhM68R5BpAGzVtomsqgA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz",
+ "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==",
"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.2",
+ "@smithy/smithy-client": "^4.1.6",
"@smithy/types": "^4.1.0",
"@smithy/util-middleware": "^4.0.1",
"@smithy/util-retry": "^4.0.1",
@@ -2811,9 +2708,9 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.1.tgz",
- "integrity": "sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz",
+ "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^4.1.0",
@@ -2852,9 +2749,9 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz",
- "integrity": "sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz",
+ "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/abort-controller": "^4.0.1",
@@ -2965,17 +2862,17 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.2.tgz",
- "integrity": "sha512-0yApeHWBqocelHGK22UivZyShNxFbDNrgREBllGh5Ws0D0rg/yId/CJfeoKKpjbfY2ju8j6WgDUGZHYQmINZ5w==",
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz",
+ "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.1.1",
- "@smithy/middleware-endpoint": "^4.0.2",
+ "@smithy/core": "^3.1.5",
+ "@smithy/middleware-endpoint": "^4.0.6",
"@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.2",
"tslib": "^2.6.2"
},
"engines": {
@@ -3072,13 +2969,13 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.3.tgz",
- "integrity": "sha512-7c5SF1fVK0EOs+2EOf72/qF199zwJflU1d02AevwKbAUPUZyE9RUZiyJxeUmhVxfKDWdUKaaVojNiaDQgnHL9g==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz",
+ "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/property-provider": "^4.0.1",
- "@smithy/smithy-client": "^4.1.2",
+ "@smithy/smithy-client": "^4.1.6",
"@smithy/types": "^4.1.0",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
@@ -3088,16 +2985,16 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.3.tgz",
- "integrity": "sha512-CVnD42qYD3JKgDlImZ9+On+MqJHzq9uJgPbMdeBE8c2x8VJ2kf2R3XO/yVFx+30ts5lD/GlL0eFIShY3x9ROgQ==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz",
+ "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==",
"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.2",
+ "@smithy/smithy-client": "^4.1.6",
"@smithy/types": "^4.1.0",
"tslib": "^2.6.2"
},
@@ -3159,13 +3056,13 @@
}
},
"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.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz",
+ "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/fetch-http-handler": "^5.0.1",
- "@smithy/node-http-handler": "^4.0.2",
+ "@smithy/node-http-handler": "^4.0.3",
"@smithy/types": "^4.1.0",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-buffer-from": "^4.0.0",
@@ -3298,26 +3195,37 @@
}
},
"node_modules/@trivago/prettier-plugin-sort-imports": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz",
- "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz",
+ "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@babel/generator": "7.17.7",
- "@babel/parser": "^7.20.5",
- "@babel/traverse": "7.23.2",
- "@babel/types": "7.17.0",
- "javascript-natural-sort": "0.7.1",
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.7",
+ "@babel/traverse": "^7.26.7",
+ "@babel/types": "^7.26.7",
+ "javascript-natural-sort": "^0.7.1",
"lodash": "^4.17.21"
},
+ "engines": {
+ "node": ">18.12"
+ },
"peerDependencies": {
"@vue/compiler-sfc": "3.x",
- "prettier": "2.x - 3.x"
+ "prettier": "2.x - 3.x",
+ "prettier-plugin-svelte": "3.x",
+ "svelte": "4.x || 5.x"
},
"peerDependenciesMeta": {
"@vue/compiler-sfc": {
"optional": true
+ },
+ "prettier-plugin-svelte": {
+ "optional": true
+ },
+ "svelte": {
+ "optional": true
}
}
},
@@ -3713,7 +3621,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
"integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -3833,7 +3740,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
"integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
@@ -3914,7 +3820,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"possible-typed-array-names": "^1.0.0"
@@ -3933,9 +3838,9 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.7.9",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
- "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz",
+ "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -4005,6 +3910,48 @@
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
"license": "MIT"
},
+ "node_modules/bee-queue": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/bee-queue/-/bee-queue-1.7.1.tgz",
+ "integrity": "sha512-ZjF6/rf9DUsM7Ox1hfPNL16rYy1OBHgjdAcrE/mwH+iqaoX1UAgysB5aYloVfLcVmK/FplKXADLemoni4eQ+Kg==",
+ "license": "MIT",
+ "dependencies": {
+ "p-finally": "^2.0.0",
+ "promise-callbacks": "^3.8.1",
+ "redis": "^3.1.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/bee-queue/node_modules/denque": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
+ "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/bee-queue/node_modules/redis": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
+ "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
+ "license": "MIT",
+ "dependencies": {
+ "denque": "^1.5.0",
+ "redis-commands": "^1.7.0",
+ "redis-errors": "^1.2.0",
+ "redis-parser": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-redis"
+ }
+ },
"node_modules/better-queue": {
"version": "3.8.12",
"resolved": "https://registry.npmjs.org/better-queue/-/better-queue-3.8.12.tgz",
@@ -4145,6 +4092,34 @@
"node": ">=10.0.0"
}
},
+ "node_modules/bullmq": {
+ "version": "5.41.7",
+ "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.41.7.tgz",
+ "integrity": "sha512-eZbKJSx15bflfzKRiR+dKeLTr/M/YKb4cIp73OdU79PEMHQ6aEFUtbG6R+f0KvLLznI/O01G581U2Eqli6S2ew==",
+ "license": "MIT",
+ "dependencies": {
+ "cron-parser": "^4.9.0",
+ "ioredis": "^5.4.1",
+ "msgpackr": "^1.11.2",
+ "node-abort-controller": "^3.1.1",
+ "semver": "^7.5.4",
+ "tslib": "^2.0.0",
+ "uuid": "^9.0.0"
+ }
+ },
+ "node_modules/bullmq/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -4169,7 +4144,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.0",
@@ -4261,9 +4235,9 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.7",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
- "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz",
+ "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@@ -4490,9 +4464,9 @@
}
},
"node_modules/compression": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz",
- "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz",
+ "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
@@ -4705,6 +4679,18 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/cron-parser": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
+ "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "luxon": "^3.2.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/cross-fetch": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
@@ -4795,7 +4781,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
"integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -4813,7 +4798,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
"integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -4831,7 +4815,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
"integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -4878,16 +4861,16 @@
}
},
"node_modules/dd-trace": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.33.1.tgz",
- "integrity": "sha512-ryjrX/yZ3r8lltp4hY8TmovrZYW+4by9ABrrIq6rgbvoLqRPRKnZsg7B7FRbz+6xFgS/0DHQ5RMbGQn/zX2gZw==",
+ "version": "5.40.0",
+ "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.40.0.tgz",
+ "integrity": "sha512-/UYVCcgpZ9LnnUvIJcNfd1Hj51i8HhqLOn9PCj5gK3wJUn6MY/ie/5da2ZaFtoK2DKQ9OZmFBITLV3+KDl4pjA==",
"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.6.1",
- "@datadog/native-iast-taint-tracking": "3.2.0",
+ "@datadog/native-iast-rewriter": "2.8.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",
@@ -4911,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",
@@ -4976,7 +4959,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
@@ -4994,7 +4976,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.0.1",
@@ -5401,7 +5382,6 @@
"version": "1.23.9",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
"integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.2",
@@ -5525,7 +5505,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -5551,7 +5530,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
"integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.2.7",
@@ -5607,22 +5585,22 @@
}
},
"node_modules/eslint": {
- "version": "9.19.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz",
- "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==",
+ "version": "9.21.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz",
+ "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.19.0",
- "@eslint/core": "^0.10.0",
- "@eslint/eslintrc": "^3.2.0",
- "@eslint/js": "9.19.0",
- "@eslint/plugin-kit": "^0.2.5",
+ "@eslint/config-array": "^0.19.2",
+ "@eslint/core": "^0.12.0",
+ "@eslint/eslintrc": "^3.3.0",
+ "@eslint/js": "9.21.0",
+ "@eslint/plugin-kit": "^0.2.7",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.1",
+ "@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
@@ -6111,9 +6089,9 @@
}
},
"node_modules/firebase-admin": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.0.2.tgz",
- "integrity": "sha512-YWVpoN+tZVSRXF0qC0gojoF5bSqvBRbnBk8+xUtFiguM2L4vB7f0moAwV1VVWDDHvTnvQ68OyTMpdp6wKo/clw==",
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.1.0.tgz",
+ "integrity": "sha512-XPKiTyPyvUMZ22EPk4M1oSiZ8/4qFeYwjK88o/DYpGtNbOLKrM6Oc9jTaK+P6Vwn3Vr1+OCyLLJ93Bci382UqA==",
"license": "Apache-2.0",
"dependencies": {
"@fastify/busboy": "^3.0.0",
@@ -6205,7 +6183,6 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.1.3"
@@ -6328,7 +6305,6 @@
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
"integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -6356,7 +6332,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6522,7 +6497,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
"integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -6597,9 +6571,9 @@
}
},
"node_modules/globals": {
- "version": "15.14.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
- "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6613,7 +6587,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
"integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"define-properties": "^1.2.1",
@@ -6748,7 +6721,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6767,7 +6739,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
@@ -6780,7 +6751,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
"integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.0"
@@ -6808,7 +6778,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@@ -6973,9 +6942,9 @@
}
},
"node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7053,7 +7022,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
"integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -7065,9 +7033,9 @@
}
},
"node_modules/intuit-oauth": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/intuit-oauth/-/intuit-oauth-4.1.3.tgz",
- "integrity": "sha512-jamanOys33Z2Uw1bisf+v7M+2rE9syMPmPZzkOt0iUrTp+IUk99QLgirKPukXidfwVdhgURnkTVb2wUcp84D8g==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/intuit-oauth/-/intuit-oauth-4.2.0.tgz",
+ "integrity": "sha512-FG+A4uiJT9xIm07yLtp4bhAdcOMcHukW7gZs6aJvh+3zHUKKqG/zEAtAIZP1d8YCMbPVHu5SbbnMygeM/OVEvg==",
"license": "Apache-2.0",
"dependencies": {
"atob": "2.1.2",
@@ -7083,9 +7051,9 @@
}
},
"node_modules/ioredis": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz",
- "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.5.0.tgz",
+ "integrity": "sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==",
"license": "MIT",
"dependencies": {
"@ioredis/commands": "^1.1.1",
@@ -7119,7 +7087,6 @@
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
"integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -7143,7 +7110,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz",
"integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -7162,7 +7128,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
"integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"has-bigints": "^1.0.2"
@@ -7178,7 +7143,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
"integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7195,7 +7159,6 @@
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -7224,7 +7187,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
"integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7242,7 +7204,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
"integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7285,7 +7246,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
"integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
@@ -7310,7 +7270,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
"integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -7342,7 +7301,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
"integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -7355,7 +7313,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
"integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -7372,7 +7329,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
"integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7391,7 +7347,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
"integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -7404,7 +7359,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
"integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
@@ -7432,7 +7386,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
"integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -7449,7 +7402,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
"integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7467,7 +7419,6 @@
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
"integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"which-typed-array": "^1.1.16"
@@ -7483,7 +7434,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
"integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -7496,7 +7446,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
"integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2"
@@ -7512,7 +7461,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
"integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -7666,16 +7614,16 @@
}
},
"node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/json-2-csv": {
@@ -8093,6 +8041,15 @@
"node": ">=10"
}
},
+ "node_modules/luxon": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
+ "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -8317,6 +8274,37 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
+ "node_modules/msgpackr": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz",
+ "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==",
+ "license": "MIT",
+ "optionalDependencies": {
+ "msgpackr-extract": "^3.0.2"
+ }
+ },
+ "node_modules/msgpackr-extract": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz",
+ "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "node-gyp-build-optional-packages": "5.2.2"
+ },
+ "bin": {
+ "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
+ },
+ "optionalDependencies": {
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3"
+ }
+ },
"node_modules/multer": {
"version": "1.4.5-lts.1",
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
@@ -8358,6 +8346,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "license": "MIT"
+ },
"node_modules/node-addon-api": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
@@ -8410,6 +8404,21 @@
"node-gyp-build-test": "build-test.js"
}
},
+ "node_modules/node-gyp-build-optional-packages": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
+ "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.1"
+ },
+ "bin": {
+ "node-gyp-build-optional-packages": "bin.js",
+ "node-gyp-build-optional-packages-optional": "optional.js",
+ "node-gyp-build-optional-packages-test": "build-test.js"
+ }
+ },
"node_modules/node-mailjet": {
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/node-mailjet/-/node-mailjet-6.0.6.tgz",
@@ -8538,7 +8547,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -8548,7 +8556,6 @@
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
"integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -8599,6 +8606,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object.getownpropertydescriptors": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/object.values": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
@@ -8705,7 +8728,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
"integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.6",
@@ -8719,6 +8741,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/p-finally": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -8922,7 +8953,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
"integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -8945,9 +8975,9 @@
}
},
"node_modules/prettier": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
- "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz",
+ "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -8966,6 +8996,19 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
+ "node_modules/promise-callbacks": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/promise-callbacks/-/promise-callbacks-3.8.2.tgz",
+ "integrity": "sha512-g+SziwZr9eLwF+Tejuz0nirmzrYm1Ou4dExaRap1+wG/Bip1FAjMwE+oOqwv6C+CxDCQJ9l0jMSE8ui1oRC/tQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2",
+ "object.getownpropertydescriptors": "2.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/promise-retry": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
@@ -9193,6 +9236,12 @@
"@redis/time-series": "1.1.0"
}
},
+ "node_modules/redis-commands": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
+ "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==",
+ "license": "MIT"
+ },
"node_modules/redis-errors": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
@@ -9218,7 +9267,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
"integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -9241,14 +9289,12 @@
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "dev": true,
"license": "MIT"
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
"integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
@@ -9392,7 +9438,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
"integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -9412,7 +9457,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
"license": "MIT"
},
"node_modules/safe-buffer": {
@@ -9439,7 +9483,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
"integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -9456,14 +9499,12 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
"license": "MIT"
},
"node_modules/safe-regex-test": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
"integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -9510,6 +9551,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",
@@ -9607,7 +9654,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
@@ -9625,7 +9671,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
@@ -9641,7 +9686,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
"integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
@@ -9875,9 +9919,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",
@@ -9892,7 +9936,7 @@
"xml-crypto": "^6.0.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=14.17.0"
}
},
"node_modules/socket.io": {
@@ -9987,16 +10031,6 @@
}
}
},
- "node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/source-map-explorer": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.5.3.tgz",
@@ -10344,7 +10378,6 @@
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
"integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -10366,7 +10399,6 @@
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
"integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -10385,7 +10417,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
"integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
@@ -10630,16 +10661,6 @@
"integrity": "sha512-eGYW4bjf1DtrHzUYxYfAcSytpOkA44zsr7G2n3PV7yOUR23vmkGe3LL4R+1jL9OsXtbsFOwe8XtbCrabeaEFnw==",
"license": "MIT"
},
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -10753,7 +10774,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
"integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -10768,7 +10788,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
"integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -10788,7 +10807,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
"integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
@@ -10810,7 +10828,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
"integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
@@ -10858,7 +10875,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
"integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
@@ -11185,7 +11201,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
"integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-bigint": "^1.1.0",
@@ -11205,7 +11220,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
"integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -11233,14 +11247,12 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
"license": "MIT"
},
"node_modules/which-collection": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
"integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-map": "^2.0.3",
@@ -11259,7 +11271,6 @@
"version": "1.1.18",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
"integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
diff --git a/package.json b/package.json
index 8405786e0..f7265a83e 100644
--- a/package.json
+++ b/package.json
@@ -19,37 +19,39 @@
"makeitpretty": "prettier --write \"**/*.{css,js,json,jsx,scss}\""
},
"dependencies": {
- "@aws-sdk/client-cloudwatch-logs": "^3.738.0",
- "@aws-sdk/client-elasticache": "^3.738.0",
- "@aws-sdk/client-s3": "^3.738.0",
- "@aws-sdk/client-secrets-manager": "^3.738.0",
- "@aws-sdk/client-ses": "^3.738.0",
- "@aws-sdk/credential-provider-node": "^3.738.0",
+ "@aws-sdk/client-cloudwatch-logs": "^3.758.0",
+ "@aws-sdk/client-elasticache": "^3.758.0",
+ "@aws-sdk/client-s3": "^3.758.0",
+ "@aws-sdk/client-secrets-manager": "^3.758.0",
+ "@aws-sdk/client-ses": "^3.758.0",
+ "@aws-sdk/credential-provider-node": "^3.758.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
"aws4": "^1.13.2",
- "axios": "^1.7.7",
+ "axios": "^1.8.1",
+ "bee-queue": "^1.7.1",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.3",
- "chart.js": "^4.4.6",
+ "bullmq": "^5.41.7",
+ "chart.js": "^4.4.8",
"cloudinary": "^2.5.1",
- "compression": "^1.7.5",
+ "compression": "^1.8.0",
"cookie-parser": "^1.4.7",
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
- "dd-trace": "^5.33.1",
+ "dd-trace": "^5.40.0",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
- "firebase-admin": "^13.0.2",
+ "firebase-admin": "^13.1.0",
"graphql": "^16.10.0",
"graphql-request": "^6.1.0",
"inline-css": "^4.0.3",
- "intuit-oauth": "^4.1.3",
- "ioredis": "^5.4.2",
+ "intuit-oauth": "^4.2.0",
+ "ioredis": "^5.5.0",
"json-2-csv": "^5.5.8",
"juice": "^11.0.0",
"lodash": "^4.17.21",
@@ -64,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",
@@ -76,14 +78,14 @@
"xmlbuilder2": "^3.1.1"
},
"devDependencies": {
- "@eslint/js": "^9.19.0",
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
+ "@eslint/js": "^9.21.0",
+ "@trivago/prettier-plugin-sort-imports": "^5.2.2",
"concurrently": "^8.2.2",
- "eslint": "^9.19.0",
+ "eslint": "^9.21.0",
"eslint-plugin-react": "^7.37.4",
- "globals": "^15.14.0",
+ "globals": "^15.15.0",
"p-limit": "^3.1.0",
- "prettier": "^3.3.3",
+ "prettier": "^3.5.2",
"source-map-explorer": "^2.5.2"
}
}
diff --git a/redis/redis.conf b/redis/redis.conf
index 22533e22d..dafe316cc 100644
--- a/redis/redis.conf
+++ b/redis/redis.conf
@@ -4,3 +4,4 @@ cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
+maxmemory-policy noeviction
diff --git a/server.js b/server.js
index ef480a7ea..4047333d3 100644
--- a/server.js
+++ b/server.js
@@ -5,7 +5,7 @@ require("dotenv").config({
});
if (process.env.NODE_ENV) {
- const tracer = require("dd-trace").init({
+ require("dd-trace").init({
profiling: true,
env: process.env.NODE_ENV,
service: "bodyshop-api"
@@ -31,9 +31,11 @@ const { redisSocketEvents } = require("./server/web-sockets/redisSocketEvents");
const { ElastiCacheClient, DescribeCacheClustersCommand } = require("@aws-sdk/client-elasticache");
const { InstanceRegion } = require("./server/utils/instanceMgr");
const StartStatusReporter = require("./server/utils/statusReporter");
+const { registerCleanupTask, initializeCleanupManager } = require("./server/utils/cleanupManager");
+
+const { loadEmailQueue } = require("./server/notifications/queues/emailQueue");
+const { loadAppQueue } = require("./server/notifications/queues/appQueue");
-const cleanupTasks = [];
-let isShuttingDown = false;
const CLUSTER_RETRY_BASE_DELAY = 100;
const CLUSTER_RETRY_MAX_DELAY = 5000;
const CLUSTER_RETRY_JITTER = 100;
@@ -58,7 +60,7 @@ const SOCKETIO_CORS_ORIGIN = [
"https://beta.test.imex.online",
"https://www.beta.test.imex.online",
"https://beta.imex.online",
- "https://www.beta.imex.online",
+ "https://www.beta.imex.online",
"https://www.test.promanager.web-est.com",
"https://test.promanager.web-est.com",
"https://www.promanager.web-est.com",
@@ -143,7 +145,10 @@ const getRedisNodesFromAWS = async () => {
cluster.CacheNodes.map((node) => `${node.Endpoint.Address}:${node.Endpoint.Port}`)
);
} catch (err) {
- logger.log(`Error fetching Redis nodes from AWS: ${err.message}`, "ERROR", "redis", "api");
+ logger.log(`Error fetching Redis nodes from AWS:`, "ERROR", "redis", "api", {
+ message: err?.message,
+ stack: err?.stack
+ });
throw err;
}
};
@@ -167,7 +172,10 @@ const connectToRedisCluster = async () => {
try {
redisServers = JSON.parse(process.env.REDIS_URL);
} catch (error) {
- logger.log(`Failed to parse REDIS_URL: ${error.message}. Exiting...`, "ERROR", "redis", "api");
+ logger.log(`Failed to parse REDIS_URL: ${error.message}. Exiting...`, "ERROR", "redis", "api", {
+ message: error?.message,
+ stack: error?.stack
+ });
process.exit(1);
}
}
@@ -193,11 +201,22 @@ const connectToRedisCluster = async () => {
return new Promise((resolve, reject) => {
redisCluster.on("ready", () => {
logger.log(`Redis cluster connection established.`, "INFO", "redis", "api");
- resolve(redisCluster);
+ if (process.env.NODE_ENV === "development" && process.env?.CLEAR_REDIS_ON_START === "true") {
+ logger.log("[Development] Flushing Redis Cluster on Service start...", "INFO", "redis", "api");
+ const master = redisCluster.nodes("master");
+ Promise.all(master.map((node) => node.flushall())).then(() => {
+ resolve(redisCluster);
+ });
+ } else {
+ resolve(redisCluster);
+ }
});
redisCluster.on("error", (err) => {
- logger.log(`Redis cluster connection failed: ${err.message}`, "ERROR", "redis", "api");
+ logger.log(`Redis cluster connection failed:`, "ERROR", "redis", "api", {
+ message: err?.message,
+ stack: err?.stack
+ });
reject(err);
});
});
@@ -219,17 +238,24 @@ const applySocketIO = async ({ server, app }) => {
const pubClient = redisCluster;
const subClient = pubClient.duplicate();
- pubClient.on("error", (err) => logger.log(`Redis pubClient error: ${err}`, "ERROR", "redis"));
- subClient.on("error", (err) => logger.log(`Redis subClient error: ${err}`, "ERROR", "redis"));
+ pubClient.on("error", (err) =>
+ logger.log(`Redis pubClient error: ${err}`, "ERROR", "redis", "api", {
+ message: err?.message,
+ stack: err?.stack
+ })
+ );
+ subClient.on("error", (err) =>
+ logger.log(`Redis subClient error: ${err}`, "ERROR", "redis", "api", {
+ message: err?.message,
+ stack: err?.stack
+ })
+ );
- process.on("SIGINT", async () => {
+ // Register Redis cleanup
+ registerCleanupTask(async () => {
logger.log("Closing Redis connections...", "INFO", "redis", "api");
- try {
- await Promise.all([pubClient.disconnect(), subClient.disconnect()]);
- logger.log("Redis connections closed. Process will exit.", "INFO", "redis", "api");
- } catch (error) {
- logger.log(`Error closing Redis connections: ${error.message}`, "ERROR", "redis", "api");
- }
+ await Promise.all([pubClient.disconnect(), subClient.disconnect()]);
+ logger.log("Redis connections closed.", "INFO", "redis", "api");
});
const ioRedis = new Server(server, {
@@ -287,6 +313,34 @@ const applySocketIO = async ({ server, app }) => {
return api;
};
+/**
+ * Load Queues for Email and App
+ * @param {Object} options - Queue configuration options
+ * @param {Redis.Cluster} options.pubClient - Redis client for publishing
+ * @param {Object} options.logger - Logger instance
+ * @param {Object} options.redisHelpers - Redis helper functions
+ * @param {Server} options.ioRedis - Socket.IO server instance
+ * @returns {Promise}
+ */
+const loadQueues = async ({ pubClient, logger, redisHelpers, ioRedis }) => {
+ const queueSettings = { pubClient, logger, redisHelpers, ioRedis };
+
+ // Assuming loadEmailQueue and loadAppQueue return Promises
+ const [notificationsEmailsQueue, notificationsAppQueue] = await Promise.all([
+ loadEmailQueue(queueSettings),
+ loadAppQueue(queueSettings)
+ ]);
+
+ // Add error listeners or other setup for queues if needed
+ notificationsEmailsQueue.on("error", (error) => {
+ logger.log(`Error in notificationsEmailsQueue: ${error}`, "ERROR", "queue", "api", null, { error: error?.message });
+ });
+
+ notificationsAppQueue.on("error", (error) => {
+ logger.log(`Error in notificationsAppQueue: ${error}`, "ERROR", "queue", "api", null, { error: error?.message });
+ });
+};
+
/**
* Main function to start the server
* @returns {Promise}
@@ -297,6 +351,9 @@ const main = async () => {
const server = http.createServer(app);
+ // Initialize cleanup manager with signal handlers
+ initializeCleanupManager();
+
const { pubClient, ioRedis } = await applySocketIO({ server, app });
const redisHelpers = applyRedisHelpers({ pubClient, app, logger });
const ioHelpers = applyIOHelpers({ app, redisHelpers, ioRedis, logger });
@@ -304,6 +361,9 @@ const main = async () => {
// Legacy Socket Events
require("./server/web-sockets/web-socket");
+ // Initialize Queues
+ await loadQueues({ pubClient: pubClient, logger, redisHelpers, ioRedis });
+
applyMiddleware({ app });
applyRoutes({ app });
redisSocketEvents({ io: ioRedis, redisHelpers, ioHelpers, logger });
@@ -313,15 +373,11 @@ const main = async () => {
StatusReporter.end();
});
- // Add SIGTERM signal handler
- process.on("SIGTERM", handleSigterm);
- process.on("SIGINT", handleSigterm); // Optional: Handle Ctrl+C
-
try {
await server.listen(port);
logger.log(`Server started on port ${port}`, "INFO", "api");
} catch (error) {
- logger.log(`Server failed to start on port ${port}`, "ERROR", "api", error);
+ logger.log(`Server failed to start on port ${port}`, "ERROR", "api", null, { error: error.message });
}
};
@@ -335,33 +391,3 @@ main().catch((error) => {
// Note: If we want the app to crash on all uncaught async operations, we would
// need to put a `process.exit(1);` here
});
-
-// Register a cleanup task
-function registerCleanupTask(task) {
- cleanupTasks.push(task);
-}
-
-// SIGTERM handler
-async function handleSigterm() {
- if (isShuttingDown) {
- logger.log("sigterm-api", "WARN", null, null, { message: "Shutdown already in progress, ignoring signal." });
- return;
- }
-
- isShuttingDown = true;
-
- logger.log("sigterm-api", "WARN", null, null, { message: "SIGTERM Received. Starting graceful shutdown." });
-
- try {
- for (const task of cleanupTasks) {
- logger.log("sigterm-api", "WARN", null, null, { message: `Running cleanup task: ${task.name}` });
-
- await task();
- }
- logger.log("sigterm-api", "WARN", null, null, { message: `All cleanup tasks completed.` });
- } catch (error) {
- logger.log("sigterm-api-error", "ERROR", null, null, { message: error.message, stack: error.stack });
- }
-
- process.exit(0);
-}
diff --git a/server/accounting/qbo/qbo-callback.js b/server/accounting/qbo/qbo-callback.js
index af6d244d7..f1de7d551 100644
--- a/server/accounting/qbo/qbo-callback.js
+++ b/server/accounting/qbo/qbo-callback.js
@@ -7,7 +7,7 @@ const OAuthClient = require("intuit-oauth");
const client = require("../../graphql-client/graphql-client").client;
const queries = require("../../graphql-client/queries");
const { parse, stringify } = require("querystring");
-const InstanceManager = require("../../utils/instanceMgr").default;
+const { InstanceEndpoints } = require("../../utils/instanceMgr");
const oauthClient = new OAuthClient({
clientId: process.env.QBO_CLIENT_ID,
@@ -17,16 +17,8 @@ const oauthClient = new OAuthClient({
logging: true
});
-let url;
-
-if (process.env.NODE_ENV === "production") {
- //TODO:AIO Add in QBO callbacks.
- url = InstanceManager({ imex: `https://imex.online`, rome: `https://romeonline.io` });
-} else if (process.env.NODE_ENV === "test") {
- url = InstanceManager({ imex: `https://test.imex.online`, rome: `https://test.romeonline.io` });
-} else {
- url = `http://localhost:3000`;
-}
+//TODO:AIO Add in QBO callbacks.
+const url = InstanceEndpoints();
exports.default = async (req, res) => {
const queryString = req.url.split("?").reverse()[0];
diff --git a/server/email/sendemail.js b/server/email/sendemail.js
index 81787fe49..26d5c8560 100644
--- a/server/email/sendemail.js
+++ b/server/email/sendemail.js
@@ -69,11 +69,14 @@ const sendServerEmail = async ({ subject, text }) => {
}
},
(err, info) => {
- logger.log("server-email-failure", err ? "error" : "debug", null, null, { message: err || info });
+ logger.log("server-email-failure", err ? "error" : "debug", null, null, {
+ message: err?.message,
+ stack: err?.stack
+ });
}
);
} catch (error) {
- logger.log("server-email-failure", "error", null, null, { error });
+ logger.log("server-email-failure", "error", null, null, { message: error?.message, stack: error?.stack });
}
};
@@ -92,11 +95,11 @@ const sendTaskEmail = async ({ to, subject, type = "text", html, text, attachmen
},
(err, info) => {
// (message, type, user, record, meta
- logger.log("server-email", err ? "error" : "debug", null, null, { message: err ? err?.message : info });
+ logger.log("server-email", err ? "error" : "debug", null, null, { message: err?.message, stack: err?.stack });
}
);
} catch (error) {
- logger.log("server-email-failure", "error", null, null, { error });
+ logger.log("server-email-failure", "error", null, null, { message: error?.message, stack: error?.stack });
}
};
@@ -125,7 +128,8 @@ const sendEmail = async (req, res) => {
cc: req.body.cc,
subject: req.body.subject,
templateStrings: req.body.templateStrings,
- error
+ errorMessage: error?.message,
+ errorStack: error?.stack
});
}
})
@@ -194,7 +198,8 @@ const sendEmail = async (req, res) => {
cc: req.body.cc,
subject: req.body.subject,
templateStrings: req.body.templateStrings,
- error: err
+ errorMessage: err?.message,
+ errorStack: err?.stack
});
logEmail(req, {
to: req.body.to,
@@ -202,7 +207,7 @@ const sendEmail = async (req, res) => {
subject: req.body.subject,
bodyshopid: req.body.bodyshopid
});
- res.status(500).json({ success: false, error: err });
+ res.status(500).json({ success: false, errorMessage: err?.message, stack: err?.stack });
}
}
);
@@ -270,14 +275,16 @@ ${body.bounce?.bouncedRecipients.map(
},
(err, info) => {
logger.log("sns-error", err ? "error" : "debug", "api", null, {
- message: err ? err?.message : info
+ errorMessage: err?.message,
+ errorStack: err?.stack
});
}
);
}
} catch (error) {
logger.log("sns-error", "ERROR", "api", null, {
- error: JSON.stringify(error)
+ errorMessage: error?.message,
+ errorStack: error?.stack
});
}
res.sendStatus(200);
diff --git a/server/email/tasksEmails.js b/server/email/tasksEmails.js
index 6d787811a..05811e5e2 100644
--- a/server/email/tasksEmails.js
+++ b/server/email/tasksEmails.js
@@ -10,6 +10,7 @@ const generateEmailTemplate = require("./generateTemplate");
const moment = require("moment-timezone");
const { taskEmailQueue } = require("./tasksEmailsQueue");
const mailer = require("./mailer");
+const { InstanceEndpoints } = require("../utils/instanceMgr");
// Initialize the Tasks Email Queue
const tasksEmailQueue = taskEmailQueue();
@@ -83,15 +84,8 @@ const formatPriority = (priority) => {
* @param taskId
* @returns {{header, body: string, subHeader: string}}
*/
-
-const getEndpoints = (bodyshop) =>
- InstanceManager({
- imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online",
- rome: process.env?.NODE_ENV === "test" ? "https//test.romeonline.io" : "https://romeonline.io"
- });
-
const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, job, taskId, dateLine, createdBy) => {
- const endPoints = getEndpoints(bodyshop);
+ const endPoints = InstanceEndpoints();
return {
header: title,
subHeader: `Body Shop: ${bodyshop.shopname} | Priority: ${formatPriority(priority)} ${formatDate(dueDate)} | Created By: ${createdBy || "N/A"}`,
@@ -108,9 +102,8 @@ const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, j
* @param html
* @param taskIds
* @param successCallback
- * @param requestInstance
*/
-const sendMail = (type, to, subject, html, taskIds, successCallback, requestInstance) => {
+const sendMail = (type, to, subject, html, taskIds, successCallback) => {
const fromEmails = InstanceManager({
imex: "ImEX Online ",
rome: "Rome Online "
@@ -136,7 +129,7 @@ const sendMail = (type, to, subject, html, taskIds, successCallback, requestInst
};
/**
- * Send an email to the assigned user.
+ * Email the assigned user.
* @param req
* @param res
* @returns {Promise<*>}
@@ -186,7 +179,7 @@ const taskAssignedEmail = async (req, res) => {
};
/**
- * Send an email to remind the user of their tasks.
+ * Email remind the user of their tasks.
* @param req
* @param res
* @returns {Promise<*>}
@@ -264,11 +257,6 @@ const tasksRemindEmail = async (req, res) => {
}
// There are multiple emails to send to this author.
else {
- const endPoints = InstanceManager({
- imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online",
- rome: process.env?.NODE_ENV === "test" ? "https//test.romeonline.io" : "https://romeonline.io"
- });
-
const allTasks = groupedTasks[recipient.email];
emailData.subject = `New Tasks Reminder - ${allTasks.length} Tasks require your attention`;
emailData.html = generateEmailTemplate({
@@ -278,7 +266,7 @@ const tasksRemindEmail = async (req, res) => {
body: ``
@@ -338,6 +326,5 @@ const tasksRemindEmail = async (req, res) => {
module.exports = {
taskAssignedEmail,
- tasksRemindEmail,
- getEndpoints
+ tasksRemindEmail
};
diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js
index d55daa222..94c76bb90 100644
--- a/server/graphql-client/queries.js
+++ b/server/graphql-client/queries.js
@@ -2705,3 +2705,55 @@ exports.INSERT_AUDIT_TRAIL = `
}
}
`;
+
+exports.GET_JOB_WATCHERS = `
+query GET_JOB_WATCHERS($jobid: uuid!) {
+ job_watchers(where: { jobid: { _eq: $jobid } }) {
+ user_email
+ user {
+ authid
+ employee {
+ id
+ first_name
+ last_name
+ }
+ }
+ }
+ job: jobs_by_pk(id: $jobid) {
+ id
+ ro_number
+ clm_no
+ bodyshop {
+ id
+ shopname
+ }
+ }
+}
+`;
+
+exports.GET_NOTIFICATION_ASSOCIATIONS = `
+query GET_NOTIFICATION_ASSOCIATIONS($emails: [String!]!, $shopid: uuid!) {
+ associations(where: {
+ useremail: { _in: $emails },
+ shopid: { _eq: $shopid }
+ }) {
+ id
+ useremail
+ notification_settings
+ }
+}
+`;
+
+exports.INSERT_NOTIFICATIONS_MUTATION = ` mutation INSERT_NOTIFICATIONS($objects: [notifications_insert_input!]!) {
+ insert_notifications(objects: $objects) {
+ affected_rows
+ returning {
+ id
+ jobid
+ associationid
+ scenario_text
+ fcm_text
+ scenario_meta
+ }
+ }
+ }`;
diff --git a/server/intellipay/intellipay.js b/server/intellipay/intellipay.js
index 71adce9a3..0106cb6da 100644
--- a/server/intellipay/intellipay.js
+++ b/server/intellipay/intellipay.js
@@ -10,12 +10,11 @@ const moment = require("moment");
const logger = require("../utils/logger");
const { sendTaskEmail } = require("../email/sendemail");
const generateEmailTemplate = require("../email/generateTemplate");
-const { getEndpoints } = require("../email/tasksEmails");
const domain = process.env.NODE_ENV ? "secure" : "test";
const { SecretsManagerClient, GetSecretValueCommand } = require("@aws-sdk/client-secrets-manager");
-const { InstanceRegion } = require("../utils/instanceMgr");
+const { InstanceRegion, InstanceEndpoints } = require("../utils/instanceMgr");
const client = new SecretsManagerClient({
region: InstanceRegion()
@@ -443,31 +442,28 @@ exports.postback = async (req, res) => {
});
if (values.origin === "OneLink" && parsedComment.userEmail) {
- try {
- const endPoints = getEndpoints();
- sendTaskEmail({
- to: parsedComment.userEmail,
- subject: `New Payment(s) Received - RO ${jobs.jobs.map((j) => j.ro_number).join(", ")}`,
- type: "html",
- html: generateEmailTemplate({
- header: "New Payment(s) Received",
- subHeader: "",
- body: jobs.jobs
- .map(
- (job) =>
- `Reference: ${job.ro_number || "N/A"} | ${job.ownr_co_nm ? job.ownr_co_nm : `${job.ownr_fn || ""} ${job.ownr_ln || ""}`.trim()} | ${`${job.v_model_yr || ""} ${job.v_make_desc || ""} ${job.v_model_desc || ""}`.trim()} | $${partialPayments.find((p) => p.jobid === job.id).amount}`
- )
- .join("
")
- })
- });
- } catch (error) {
+ sendTaskEmail({
+ to: parsedComment.userEmail,
+ subject: `New Payment(s) Received - RO ${jobs.jobs.map((j) => j.ro_number).join(", ")}`,
+ type: "html",
+ html: generateEmailTemplate({
+ header: "New Payment(s) Received",
+ subHeader: "",
+ body: jobs.jobs
+ .map(
+ (job) =>
+ `Reference: ${job.ro_number || "N/A"} | ${job.ownr_co_nm ? job.ownr_co_nm : `${job.ownr_fn || ""} ${job.ownr_ln || ""}`.trim()} | ${`${job.v_model_yr || ""} ${job.v_make_desc || ""} ${job.v_model_desc || ""}`.trim()} | $${partialPayments.find((p) => p.jobid === job.id).amount}`
+ )
+ .join("
")
+ })
+ }).catch((error) => {
logger.log("intellipay-postback-email-error", "ERROR", req.user?.email, null, {
message: error.message,
jobs,
paymentResult,
...logResponseMeta
});
- }
+ });
}
res.sendStatus(200);
} else if (values.invoice) {
diff --git a/server/notifications/eventHandlers.js b/server/notifications/eventHandlers.js
new file mode 100644
index 000000000..45de5dc3e
--- /dev/null
+++ b/server/notifications/eventHandlers.js
@@ -0,0 +1,140 @@
+/**
+ * @fileoverview Notification event handlers.
+ * This module exports functions to handle various notification events.
+ * Each handler optionally calls the scenarioParser and logs errors if they occur,
+ * then returns a JSON response with a success message.
+ */
+
+const scenarioParser = require("./scenarioParser");
+
+/**
+ * Processes a notification event by invoking the scenario parser.
+ * The scenarioParser is intentionally not awaited so that the response is sent immediately.
+ *
+ * @param {Object} req - Express request object.
+ * @param {Object} res - Express response object.
+ * @param {string} parserPath - The key path to be passed to scenarioParser.
+ * @param {string} successMessage - The message to return on success.
+ * @returns {Promise