diff --git a/client/package-lock.json b/client/package-lock.json index ff52a3dd9..b2bb7d8c4 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@amplitude/analytics-browser": "^2.34.0", "@ant-design/pro-layout": "^7.22.6", - "@apollo/client": "^4.1.2", + "@apollo/client": "^4.1.3", "@emotion/is-prop-valid": "^1.4.0", "@fingerprintjs/fingerprintjs": "^5.0.1", "@firebase/analytics": "^0.10.19", @@ -51,7 +51,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.70", - "posthog-js": "^1.335.5", + "posthog-js": "^1.336.1", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", @@ -540,9 +540,9 @@ } }, "node_modules/@apollo/client": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.1.2.tgz", - "integrity": "sha512-MxlWuO94Y6TRf6+d4KfG5bCUXg5NP4s7zPKRA0PDNNa18K86zcbpHUgWKdx6wMT/5KVMeC5rsZkDqZLr/R0mFw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.1.3.tgz", + "integrity": "sha512-2D0eN9R0IHj9qp1RwjM1/brKqcBGldlDfY0YiP5ecCj9FtVrhOtXqMj98SZ1CA0YGDY5X+dxx32Ljh7J0VHTfA==", "license": "MIT", "workspaces": [ "dist", @@ -4771,18 +4771,18 @@ } }, "node_modules/@posthog/core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.14.1.tgz", - "integrity": "sha512-DtmJ1y1IDauX8yAZtIotRAYDRkgCCMLk5S9vFFRX7vufhWblQuRUOgn9WYSJrocJlZKm1aEjDzGQ0uyL7HcdLw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.15.0.tgz", + "integrity": "sha512-n2/Yy0+qc8xhmlcOFiYqTcGHBZuuaQjVolfFXk7yTCynzdMe8Fx1zYvPPUrbdQK5tWwXyilkzybpqhK6I7aV4Q==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6" } }, "node_modules/@posthog/types": { - "version": "1.335.5", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.335.5.tgz", - "integrity": "sha512-QYj5c8wSaXGvV4ugEN65GHD0sIXRveGiZxV4tqpyoP7YIAvAwwA0do0yNfTrEjDXucCQn25pMbCqO25hJrMi5w==", + "version": "1.336.1", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.336.1.tgz", + "integrity": "sha512-KSGst/a/HK7GhfLSbwAy35HtU3KjDqjLtq3+PoDlGfbz9SbO0owjc6jo6hAHnMz67QTSvrn/r0xgimDO4NQ+rA==", "license": "MIT" }, "node_modules/@protobufjs/aspromise": { @@ -14974,9 +14974,9 @@ "license": "MIT" }, "node_modules/posthog-js": { - "version": "1.335.5", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.335.5.tgz", - "integrity": "sha512-1zCEdn7bc1mQ/jpd62YY8U1CyNiftIBE6uKqE2L+mjZ5aJyB2rtUAXefaTbaR/3A98tItjSej4aIa8FBN+O1fw==", + "version": "1.336.1", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.336.1.tgz", + "integrity": "sha512-YphbVhXnImmZoALvf2oh129Cxu6IRQ9P9sWhuyY+dGe7jqt1jBp6Dg7QEK39stB4rzxmT/N3OLFcWZM7ZYQzCg==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -14984,8 +14984,8 @@ "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", - "@posthog/core": "1.14.1", - "@posthog/types": "1.335.5", + "@posthog/core": "1.15.0", + "@posthog/types": "1.336.1", "core-js": "^3.38.1", "dompurify": "^3.3.1", "fflate": "^0.4.8", diff --git a/client/package.json b/client/package.json index 91651f061..ae4a51fbf 100644 --- a/client/package.json +++ b/client/package.json @@ -10,7 +10,7 @@ "dependencies": { "@amplitude/analytics-browser": "^2.34.0", "@ant-design/pro-layout": "^7.22.6", - "@apollo/client": "^4.1.2", + "@apollo/client": "^4.1.3", "@emotion/is-prop-valid": "^1.4.0", "@fingerprintjs/fingerprintjs": "^5.0.1", "@firebase/analytics": "^0.10.19", @@ -50,7 +50,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.70", - "posthog-js": "^1.335.5", + "posthog-js": "^1.336.1", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", 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 25f9e22a1..d4e3485c3 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 @@ -1,10 +1,11 @@ import { DownCircleFilled } from "@ant-design/icons"; import { useApolloClient, useMutation, useQuery } from "@apollo/client/react"; import { useTreatmentsWithConfig } from "@splitsoftware/splitio-react"; -import { Button, Card, Dropdown, Form, Input, Modal, Popconfirm, Popover, Select, Space } from "antd"; +import { Button, Card, Dropdown, Form, Input, Modal, Popover, Select, Space } from "antd"; import axios from "axios"; import parsePhoneNumber from "libphonenumber-js"; import { useCallback, useMemo, useRef, useState } from "react"; +import { HasRbacAccess } from "../../components/rbac-wrapper/rbac-wrapper.component"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { Link, useNavigate } from "react-router-dom"; @@ -20,7 +21,7 @@ import { selectJobReadOnly } from "../../redux/application/application.selectors import { setEmailOptions } from "../../redux/email/email.actions"; import { openChatByPhone, setMessage } from "../../redux/messaging/messaging.actions"; import { setModalContext } from "../../redux/modals/modals.actions"; -import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors"; +import { selectAuthLevel, selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors"; import AuditTrailMapping from "../../utils/AuditTrailMappings"; import { DateTimeFormatter } from "../../utils/DateFormatter"; import { TemplateList } from "../../utils/TemplateConstants"; @@ -28,7 +29,6 @@ import dayjs from "../../utils/day"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import FormDateTimePickerComponent from "../form-date-time-picker/form-date-time-picker.component"; import LockerWrapperComponent from "../lock-wrapper/lock-wrapper.component"; -import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component"; import ShareToTeamsButton from "../share-to-teams/share-to-teams.component.jsx"; import AddToProduction from "./jobs-detail-header-actions.addtoproduction.util"; import DuplicateJob from "./jobs-detail-header-actions.duplicate.util"; @@ -39,7 +39,8 @@ const EMPTY_ARRAY = Object.freeze([]); const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, jobRO: selectJobReadOnly, - currentUser: selectCurrentUser + currentUser: selectCurrentUser, + authLevel: selectAuthLevel }); const mapDispatchToProps = (dispatch) => ({ @@ -117,7 +118,8 @@ export function JobsDetailHeaderActions({ openChatByPhone, setMessage, setTimeTicketTaskContext, - setTaskUpsertContext + setTaskUpsertContext, + authLevel }) { const { t } = useTranslation(); const client = useApolloClient(); @@ -129,10 +131,6 @@ export function JobsDetailHeaderActions({ const jobId = job?.id; const watcherVars = useMemo(() => ({ jobid: jobId }), [jobId]); - // Option A: coordinated Dropdown + Popconfirm open state so the menu doesn't unmount before Popconfirm renders. - const [confirmKey, setConfirmKey] = useState(null); - const confirmKeyRef = useRef(null); - const [isCancelScheduleModalVisible, setIsCancelScheduleModalVisible] = useState(false); const [insertAppointment] = useMutation(INSERT_MANUAL_APPT); const [deleteJob] = useMutation(DELETE_JOB); @@ -150,6 +148,8 @@ export function JobsDetailHeaderActions({ const devEmails = ["imex.dev", "rome.dev"]; const prodEmails = ["imex.prod", "rome.prod", "imex.test", "rome.test"]; + const canVoidJob = useMemo(() => HasRbacAccess({ authLevel, bodyshop, action: "jobs:void" }), [authLevel, bodyshop]); + const hasValidEmail = (emails) => emails.some((email) => userEmail.endsWith(email)); const canSubmitForTesting = (isDevEnv && hasValidEmail(devEmails)) || (isProdEnv && hasValidEmail(prodEmails)); @@ -179,83 +179,69 @@ export function JobsDetailHeaderActions({ const jobInPreProduction = preProductionStatuses.includes(jobStatus); const jobInPostProduction = postProductionStatuses.includes(jobStatus); - const openConfirm = useCallback((key) => { - confirmKeyRef.current = key; - setConfirmKey(key); - setDropdownOpen(true); - }, []); + const makeConfirmId = () => + globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(16).slice(2)}`; - const closeConfirm = useCallback(() => { - confirmKeyRef.current = null; - setConfirmKey(null); - }, []); + const [modal, modalContextHolder] = Modal.useModal(); - const handleDropdownOpenChange = useCallback( - (nextOpen, info) => { - if (!nextOpen && info?.source === "menu" && confirmKeyRef.current) return; - setDropdownOpen(nextOpen); - if (!nextOpen) closeConfirm(); - }, - [closeConfirm] - ); + const confirmInstancesRef = useRef(new Map()); - const renderPopconfirmMenuLabel = ({ - key, - text, + const closeConfirmById = (id) => { + const inst = confirmInstancesRef.current.get(id); + if (inst) inst.destroy(); // hard close + confirmInstancesRef.current.delete(id); + }; + + const openConfirmFromMenu = ({ + variant = "confirm", // "confirm" | "info" | "warning" title, + content, okText, cancelText, showCancel = true, - closeDropdownOnConfirm = true, - onConfirm - }) => ( - { - if (nextOpen) openConfirm(key); - else closeConfirm(); - }} - onConfirm={(e) => { - e?.stopPropagation?.(); - closeConfirm(); + onOk, + onCancel + }) => { + // close the dropdown immediately; confirm dialog is separate + setDropdownOpen(false); - // Critical: for informational popconfirms, keep the dropdown open so the Popconfirm can cleanly close. - if (closeDropdownOnConfirm) { - setDropdownOpen(false); + const id = makeConfirmId(); + + const openFn = variant === "info" ? modal.info : variant === "warning" ? modal.warning : modal.confirm; + + const inst = openFn({ + title, + content, + okText, + cancelText, + centered: true, + maskClosable: false, + onCancel: () => { + closeConfirmById(id); + onCancel?.(); + }, + onOk: async () => { + try { + await onOk?.(); + } finally { + closeConfirmById(id); } + }, + ...(showCancel ? {} : { okCancel: false }) + }); - onConfirm?.(e); - }} - onCancel={(e) => { - e?.stopPropagation?.(); - closeConfirm(); - // Keep dropdown open on cancel so the user can continue using the menu. - }} - getPopupContainer={() => document.body} - > -
{ - e.preventDefault(); - e.stopPropagation(); - openConfirm(key); - }} - > - {text} -
-
- ); + confirmInstancesRef.current.set(id, inst); + return id; + }; + + const handleDropdownOpenChange = useCallback((nextOpen) => { + setDropdownOpen(nextOpen); + }, []); - // Function to show modal const showCancelScheduleModal = () => { setIsCancelScheduleModalVisible(true); }; - // Function to handle Cancel const handleCancelScheduleModalCancel = () => { setIsCancelScheduleModalVisible(false); }; @@ -476,6 +462,11 @@ export function JobsDetailHeaderActions({ }; const handleVoidJob = async () => { + if (!canVoidJob) { + notification.error({ title: t("general.messages.rbacunauth") }); + return; + } + //delete the job. const result = await voidJob({ variables: { @@ -964,26 +955,26 @@ export function JobsDetailHeaderActions({ { key: "duplicate", id: "job-actions-duplicate", - label: renderPopconfirmMenuLabel({ - key: "confirm-duplicate", - text: t("menus.jobsactions.duplicate"), - title: t("jobs.labels.duplicateconfirm"), - okText: t("general.labels.yes"), - cancelText: t("general.labels.no"), - onConfirm: handleDuplicate - }) + label: t("menus.jobsactions.duplicate"), + onClick: () => + openConfirmFromMenu({ + title: t("jobs.labels.duplicateconfirm"), + okText: t("general.labels.yes"), + cancelText: t("general.labels.no"), + onOk: handleDuplicate + }) }, { key: "duplicatenolines", id: "job-actions-duplicatenolines", - label: renderPopconfirmMenuLabel({ - key: "confirm-duplicate-nolines", - text: t("menus.jobsactions.duplicatenolines"), - title: t("jobs.labels.duplicateconfirm"), - okText: t("general.labels.yes"), - cancelText: t("general.labels.no"), - onConfirm: handleDuplicateConfirm - }) + label: t("menus.jobsactions.duplicatenolines"), + onClick: () => + openConfirmFromMenu({ + title: t("jobs.labels.duplicateconfirm"), + okText: t("general.labels.yes"), + cancelText: t("general.labels.no"), + onOk: handleDuplicateConfirm + }) } ] }, @@ -1156,26 +1147,25 @@ export function JobsDetailHeaderActions({ menuItems.push({ key: "deletejob", id: "job-actions-deletejob", - label: - jobWatchersCount === 0 - ? renderPopconfirmMenuLabel({ - key: "confirm-deletejob", - text: t("menus.jobsactions.deletejob"), - title: t("jobs.labels.deleteconfirm"), - okText: t("general.labels.yes"), - cancelText: t("general.labels.no"), - onConfirm: handleDeleteJob - }) - : renderPopconfirmMenuLabel({ - key: "confirm-deletejob-watchers", - text: t("menus.jobsactions.deletejob"), - title: t("jobs.labels.deletewatchers"), - showCancel: false, - closeDropdownOnConfirm: false, // <-- FIX: keep dropdown mounted so Popconfirm can close cleanly - onConfirm: () => { - // informational confirm only - } - }) + label: t("menus.jobsactions.deletejob"), + onClick: () => { + if (jobWatchersCount === 0) { + openConfirmFromMenu({ + title: t("jobs.labels.deleteconfirm"), + okText: t("general.labels.yes"), + cancelText: t("general.labels.no"), + onOk: handleDeleteJob + }); + } else { + // informational "OK only" + openConfirmFromMenu({ + variant: "info", + title: t("jobs.labels.deletewatchers"), + okText: t("general.actions.ok") ?? "OK", + showCancel: false + }); + } + } }); } @@ -1188,22 +1178,18 @@ export function JobsDetailHeaderActions({ label: t("appointments.labels.manualevent") }); - if (!jobRO && job.converted) { + if (!jobRO && job.converted && canVoidJob) { menuItems.push({ key: "voidjob", id: "job-actions-voidjob", - label: ( - - {renderPopconfirmMenuLabel({ - key: "confirm-voidjob", - text: t("menus.jobsactions.void"), - title: t("jobs.labels.voidjob"), - okText: t("general.labels.yes"), - cancelText: t("general.labels.no"), - onConfirm: handleVoidJob - })} - - ) + label: t("menus.jobsactions.void"), + onClick: () => + openConfirmFromMenu({ + title: t("jobs.labels.voidjob"), + okText: t("general.labels.yes"), + cancelText: t("general.labels.no"), + onOk: handleVoidJob + }) }); } @@ -1235,6 +1221,7 @@ export function JobsDetailHeaderActions({ return ( <> + {modalContextHolder} =20.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "3.975.0" + "@aws-sdk/client-s3": "3.978.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.1.tgz", - "integrity": "sha512-YVvoitBdE8WOpHqIXvv49efT73F4bJ99XH2bi3Dn3mx7WngI4RwHwn/zF5i0q1Wdi5frGSCNF3vuh+pY817//w==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.2.tgz", + "integrity": "sha512-ofuXBnitp9j8t05O4NQVrpMZDECPtUhRIWdLzR35baR5njOIPY7YqNtJE+yELVpSn2m4jt2sV1ezYMBY4/Lo+w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", - "@aws-sdk/util-arn-parser": "^3.972.1", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-arn-parser": "^3.972.2", "@smithy/node-config-provider": "^4.3.8", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", @@ -842,12 +842,12 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.1.tgz", - "integrity": "sha512-6lfl2/J/kutzw/RLu1kjbahsz4vrGPysrdxWaw8fkjLYG+6M6AswocIAZFS/LgAVi/IWRwPTx9YC0/NH2wDrSw==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.2.tgz", + "integrity": "sha512-d9bBQlGk1T5j5rWfof20M2tErddOSoSLDauP2/yyuXfeOfQRCSBUZNrApSxjJ9Hw+/RDGR/XL+LEOqmXxSlV3A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -857,17 +857,17 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.1.tgz", - "integrity": "sha512-kjVVREpqeUkYQsXr78AcsJbEUlxGH7+H6yS7zkjrnu6HyEVxbdSndkKX6VpKneFOihjCAhIXlk4wf3butDHkNQ==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.2.tgz", + "integrity": "sha512-GgWVZJdzXzqhXxzNAYB3TnZCj7d5rZNdovqSIV91e97nowHVaExRoyaZ3H/Ydqot7veHGPTl8nBp464zZeLDTQ==", "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.973.0", + "@aws-sdk/core": "^3.973.2", "@aws-sdk/crc64-nvme": "3.972.0", - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/is-array-buffer": "^4.2.0", "@smithy/node-config-provider": "^4.3.8", "@smithy/protocol-http": "^5.3.8", @@ -882,12 +882,12 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.1.tgz", - "integrity": "sha512-/R82lXLPmZ9JaUGSUdKtBp2k/5xQxvBT3zZWyKiBOhyulFotlfvdlrO8TnqstBimsl4lYEYySDL+W6ldFh6ALg==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.2.tgz", + "integrity": "sha512-42hZ8jEXT2uR6YybCzNq9OomqHPw43YIfRfz17biZjMQA4jKSQUaHIl6VvqO2Ddl5904pXg2Yd/ku78S0Ikgog==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -897,12 +897,12 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.1.tgz", - "integrity": "sha512-YisPaCbvBk9gY5aUI8jDMDKXsLZ9Fet0WYj1MviK8tZYMgxBIYHM6l3O/OHaAIujojZvamd9F3haYYYWp5/V3w==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.2.tgz", + "integrity": "sha512-pyayzpq+VQiG1o9pEUyr6BXEJ2g2t4JIPdNxDkIHp2AhR63Gy/10WQkXTBOgRnfQ7/aLPLOnjRIWwOPp0CfUlA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -911,12 +911,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.1.tgz", - "integrity": "sha512-JGgFl6cHg9G2FHu4lyFIzmFN8KESBiRr84gLC3Aeni0Gt1nKm+KxWLBuha/RPcXxJygGXCcMM4AykkIwxor8RA==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.2.tgz", + "integrity": "sha512-iUzdXKOgi4JVDDEG/VvoNw50FryRCEm0qAudw12DcZoiNJWl0rN6SYVLcL1xwugMfQncCXieK5UBlG6mhH7iYA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -925,12 +925,12 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.1.tgz", - "integrity": "sha512-taGzNRe8vPHjnliqXIHp9kBgIemLE/xCaRTMH1NH0cncHeaPcjxtnCroAAM9aOlPuKvBe2CpZESyvM1+D8oI7Q==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.2.tgz", + "integrity": "sha512-/mzlyzJDtngNFd/rAYvqx29a2d0VuiYKN84Y/Mu9mGw7cfMOCyRK+896tb9wV6MoPRHUX7IXuKCIL8nzz2Pz5A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", @@ -941,19 +941,19 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.2.tgz", - "integrity": "sha512-5f9x9/G+StE8+7wd9EVDF3d+J74xK+WBA3FhZwLSkf3pHFGLKzlmUfxJJE1kkXkbj/j/H+Dh3zL/hrtQE9hNsg==", + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.4.tgz", + "integrity": "sha512-lradfn72Td7lswhZKi86VKRNkDtmQR7bq9shX1kaPK1itjThxfcx7ogXSvMm/0cuqoYGic8UUXQOaK4kpU933g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.1", - "@aws-sdk/types": "^3.973.0", - "@aws-sdk/util-arn-parser": "^3.972.1", - "@smithy/core": "^3.21.1", + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-arn-parser": "^3.972.2", + "@smithy/core": "^3.22.0", "@smithy/node-config-provider": "^4.3.8", "@smithy/protocol-http": "^5.3.8", "@smithy/signature-v4": "^5.3.8", - "@smithy/smithy-client": "^4.10.12", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/util-config-provider": "^4.2.0", "@smithy/util-middleware": "^4.2.8", @@ -966,12 +966,12 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.1.tgz", - "integrity": "sha512-fLtRTPd/MxJT2drJKft2GVGKm35PiNEeQ1Dvz1vc/WhhgAteYrp4f1SfSgjgLaYWGMExESJL4bt8Dxqp6tVsog==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.2.tgz", + "integrity": "sha512-HJ3OmQnlQ1es6esrDWnx3nVPhBAN89WaFCzsDcb6oT7TMjBPUfZ5+1BpI7B0Hnme8cc6kp7qc4cgo2plrlROJA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -980,15 +980,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.2.tgz", - "integrity": "sha512-d+Exq074wy0X6wvShg/kmZVtkah+28vMuqCtuY3cydg8LUZOJBtbAolCpEJizSyb8mJJZF9BjWaTANXL4OYnkg==", + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.4.tgz", + "integrity": "sha512-6sU8jrSJvY/lqSnU6IYsa8SrCKwOZ4Enl6O4xVJo8RCq9Bdr5Giuw2eUaJAk9GPcpr4OFcmSFv3JOLhpKGeRZA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.1", - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/types": "^3.973.1", "@aws-sdk/util-endpoints": "3.972.0", - "@smithy/core": "^3.21.1", + "@smithy/core": "^3.22.0", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -998,44 +998,44 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.974.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.974.0.tgz", - "integrity": "sha512-k3dwdo/vOiHMJc9gMnkPl1BA5aQfTrZbz+8fiDkWrPagqAioZgmo5oiaOaeX0grObfJQKDtcpPFR4iWf8cgl8Q==", + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.975.0.tgz", + "integrity": "sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.0", + "@aws-sdk/core": "^3.973.1", "@aws-sdk/middleware-host-header": "^3.972.1", "@aws-sdk/middleware-logger": "^3.972.1", "@aws-sdk/middleware-recursion-detection": "^3.972.1", - "@aws-sdk/middleware-user-agent": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", "@aws-sdk/region-config-resolver": "^3.972.1", "@aws-sdk/types": "^3.973.0", "@aws-sdk/util-endpoints": "3.972.0", "@aws-sdk/util-user-agent-browser": "^3.972.1", "@aws-sdk/util-user-agent-node": "^3.972.1", "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.21.0", + "@smithy/core": "^3.21.1", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.10", - "@smithy/middleware-retry": "^4.4.26", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-retry": "^4.4.27", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.10.11", + "@smithy/smithy-client": "^4.10.12", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.25", - "@smithy/util-defaults-mode-node": "^4.2.28", + "@smithy/util-defaults-mode-browser": "^4.3.26", + "@smithy/util-defaults-mode-node": "^4.2.29", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", @@ -1047,12 +1047,12 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.1.tgz", - "integrity": "sha512-voIY8RORpxLAEgEkYaTFnkaIuRwVBEc+RjVZYcSSllPV+ZEKAacai6kNhJeE3D70Le+JCfvRb52tng/AVHY+jQ==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.2.tgz", + "integrity": "sha512-/7vRBsfmiOlg2X67EdKrzzQGw5/SbkXb7ALHQmlQLkZh8qNgvS2G2dDC6NtF3hzFlpP3j2k+KIEtql/6VrI6JA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/config-resolver": "^4.4.6", "@smithy/node-config-provider": "^4.3.8", "@smithy/types": "^4.12.0", @@ -1063,17 +1063,17 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.975.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.975.0.tgz", - "integrity": "sha512-rqDktHVSB7Ah7XXqr6BWMqDhGXEccp0h1EivaOGED73JjeG/S7taoywJPqi7YkalRb3Ka+LRc7wVoN9wSa4KQA==", + "version": "3.978.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.978.0.tgz", + "integrity": "sha512-P+SZrny/BT/x9w4BBM9IUr17jjDL7Rg/FjXKqh9viV81i/68Eu6gHBtS/JzvNF+rpG5gdZcMnBSANZqbnEbDmA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/signature-v4-multi-region": "3.972.0", - "@aws-sdk/types": "^3.973.0", - "@aws-sdk/util-format-url": "^3.972.1", - "@smithy/middleware-endpoint": "^4.4.11", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-format-url": "^3.972.2", + "@smithy/middleware-endpoint": "^4.4.12", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.10.12", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1205,13 +1205,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.974.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.974.0.tgz", - "integrity": "sha512-cBykL0LiccKIgNhGWvQRTPvsBLPZxnmJU3pYxG538jpFX8lQtrCy1L7mmIHNEdxIdIGEPgAEHF8/JQxgBToqUQ==", + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.975.0.tgz", + "integrity": "sha512-AWQt64hkVbDQ+CmM09wnvSk2mVyH4iRROkmYkr3/lmUtFNbE2L/fnw26sckZnUcFCsHPqbkQrcsZAnTcBLbH4w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.0", - "@aws-sdk/nested-clients": "3.974.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/nested-clients": "3.975.0", "@aws-sdk/types": "^3.973.0", "@smithy/property-provider": "^4.2.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -1223,9 +1223,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.973.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.0.tgz", - "integrity": "sha512-jYIdB7a7jhRTvyb378nsjyvJh1Si+zVduJ6urMNGpz8RjkmHZ+9vM2H07XaIB2Cfq0GhJRZYOfUCH8uqQhqBkQ==", + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.12.0", @@ -1236,9 +1236,9 @@ } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.1.tgz", - "integrity": "sha512-XnNit6H9PPHhqUXW/usjX6JeJ6Pm8ZNqivTjmNjgWHeOfVpblUc/MTic02UmCNR0jJLPjQ3mBKiMen0tnkNQjQ==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.2.tgz", + "integrity": "sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1277,12 +1277,12 @@ } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.1.tgz", - "integrity": "sha512-8wJ4/XOLU/RIYBHsXsIOTR04bNmalC8F2YPMyf3oL8YC750M3Rv5WGywW0Fo07HCv770KXJOzVq03Gyl68moFg==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.2.tgz", + "integrity": "sha512-RCd8eur5wzDLgFBvbBhoFQ1bw1wxHJiN88MQ82IiJBs6OGXTWaf0oFgLbK06qJvnVUqL13t3jEnlYPHPNdgBWw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/querystring-builder": "^4.2.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -1304,25 +1304,25 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.1.tgz", - "integrity": "sha512-IgF55NFmJX8d9Wql9M0nEpk2eYbuD8G4781FN4/fFgwTXBn86DvlZJuRWDCMcMqZymnBVX7HW9r+3r9ylqfW0w==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.2.tgz", + "integrity": "sha512-gz76bUyebPZRxIsBHJUd/v+yiyFzm9adHbr8NykP2nm+z/rFyvQneOHajrUejtmnc5tTBeaDPL4X25TnagRk4A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.1.tgz", - "integrity": "sha512-oIs4JFcADzoZ0c915R83XvK2HltWupxNsXUIuZse2rgk7b97zTpkxaqXiH0h9ylh31qtgo/t8hp4tIqcsMrEbQ==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.2.tgz", + "integrity": "sha512-vnxOc4C6AR7hVbwyFo1YuH0GB6dgJlWt8nIOOJpnzJAWJPkUMPJ9Zv2lnKsSU7TTZbhP2hEO8OZ4PYH59XFv8Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.1", - "@aws-sdk/types": "^3.973.0", + "@aws-sdk/middleware-user-agent": "^3.972.3", + "@aws-sdk/types": "^3.973.1", "@smithy/node-config-provider": "^4.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -1340,9 +1340,9 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.1.tgz", - "integrity": "sha512-6zZGlPOqn7Xb+25MAXGb1JhgvaC5HjZj6GzszuVrnEgbhvzBRFGKYemuHBV4bho+dtqeYKPgaZUv7/e80hIGNg==", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.2.tgz", + "integrity": "sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.12.0", @@ -3067,9 +3067,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", - "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.22.0.tgz", + "integrity": "sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.2.9", @@ -3287,12 +3287,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", - "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.12.tgz", + "integrity": "sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.21.1", + "@smithy/core": "^3.22.0", "@smithy/middleware-serde": "^4.2.9", "@smithy/node-config-provider": "^4.3.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -3306,15 +3306,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.27", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz", - "integrity": "sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==", + "version": "4.4.29", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.29.tgz", + "integrity": "sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.8", "@smithy/protocol-http": "^5.3.8", "@smithy/service-error-classification": "^4.2.8", - "@smithy/smithy-client": "^4.10.12", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", @@ -3481,13 +3481,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.10.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", - "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.1.tgz", + "integrity": "sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.21.1", - "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/core": "^3.22.0", + "@smithy/middleware-endpoint": "^4.4.12", "@smithy/middleware-stack": "^4.2.8", "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", @@ -3588,13 +3588,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.26", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz", - "integrity": "sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.28.tgz", + "integrity": "sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.10.12", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -3603,16 +3603,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.29", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz", - "integrity": "sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==", + "version": "4.2.31", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.31.tgz", + "integrity": "sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.6", "@smithy/credential-provider-imds": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.10.12", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -4598,9 +4598,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz", - "integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -4792,9 +4792,9 @@ } }, "node_modules/bullmq": { - "version": "5.67.1", - "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.67.1.tgz", - "integrity": "sha512-ELJEAzwzesgFxk29emvnAakqrwdBEhEyfZREPQ8pbG4ALVz/mk/AhfuChzxkFpJ7SfL2qclPHbiUGBZzaqcLvg==", + "version": "5.67.2", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.67.2.tgz", + "integrity": "sha512-3KYqNqQptKcgksACO1li4YW9/jxEh6XWa1lUg4OFrHa80Pf0C7H9zeb6ssbQQDfQab/K3QCXopbZ40vrvcyrLw==", "license": "MIT", "dependencies": { "cron-parser": "4.9.0", @@ -7138,9 +7138,9 @@ } }, "node_modules/globals": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.1.0.tgz", - "integrity": "sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.2.0.tgz", + "integrity": "sha512-tovnCz/fEq+Ripoq+p/gN1u7l6A7wwkoBT9pRCzTHzsD/LvADIzXZdjmRymh5Ztf0DYC3Rwg5cZRYjxzBmzbWg==", "dev": true, "license": "MIT", "engines": { @@ -10317,9 +10317,9 @@ } }, "node_modules/soap": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/soap/-/soap-1.6.3.tgz", - "integrity": "sha512-wCjtSXdpGXKd4okKwS34ZCXkhBXAdRPRVelSoNm1a/mo53P6Z1MWLfdkaas67seBw/JHB1i755BzbUXU6SPmmQ==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/soap/-/soap-1.6.4.tgz", + "integrity": "sha512-cVsVgMpN8kAEjzdBm8o1aSPawLIxmQsDlo0EHiFyii4IAcvndAwxG6cWVyR+6FKDrSNnPg7oi9my0LQz6r+B3w==", "license": "MIT", "dependencies": { "axios": "^1.13.1", diff --git a/package.json b/package.json index e7fc4de30..48572cf1d 100644 --- a/package.json +++ b/package.json @@ -18,23 +18,23 @@ "job-totals-fixtures:local": "docker exec node-app /usr/bin/node /app/download-job-totals-fixtures.js" }, "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.975.0", - "@aws-sdk/client-elasticache": "^3.975.0", - "@aws-sdk/client-s3": "^3.975.0", - "@aws-sdk/client-secrets-manager": "^3.975.0", - "@aws-sdk/client-ses": "^3.975.0", - "@aws-sdk/credential-provider-node": "^3.972.1", - "@aws-sdk/lib-storage": "^3.975.0", - "@aws-sdk/s3-request-presigner": "^3.975.0", + "@aws-sdk/client-cloudwatch-logs": "^3.978.0", + "@aws-sdk/client-elasticache": "^3.978.0", + "@aws-sdk/client-s3": "^3.978.0", + "@aws-sdk/client-secrets-manager": "^3.978.0", + "@aws-sdk/client-ses": "^3.978.0", + "@aws-sdk/credential-provider-node": "^3.972.2", + "@aws-sdk/lib-storage": "^3.978.0", + "@aws-sdk/s3-request-presigner": "^3.978.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.1", "aws4": "^1.13.2", - "axios": "^1.13.3", + "axios": "^1.13.4", "axios-curlirize": "^2.0.0", "better-queue": "^3.8.12", - "bullmq": "^5.67.1", + "bullmq": "^5.67.2", "chart.js": "^4.5.1", "cloudinary": "^2.9.0", "compression": "^1.8.1", @@ -65,7 +65,7 @@ "recursive-diff": "^1.0.9", "rimraf": "^6.1.2", "skia-canvas": "^3.0.8", - "soap": "^1.6.3", + "soap": "^1.6.4", "socket.io": "^4.8.3", "socket.io-adapter": "^2.5.6", "ssh2-sftp-client": "^11.0.0", @@ -82,7 +82,7 @@ "@eslint/js": "^9.39.2", "eslint": "^9.39.2", "eslint-plugin-react": "^7.37.5", - "globals": "^17.1.0", + "globals": "^17.2.0", "mock-require": "^3.0.3", "p-limit": "^3.1.0", "prettier": "^3.8.1",