From a5e483d6221c2884ea01c07e1fffd35c6325bc4b Mon Sep 17 00:00:00 2001 From: Joanne Young <38694448+Joanneyoung01@users.noreply.github.com> Date: Wed, 15 May 2024 14:40:29 +0100 Subject: [PATCH] DFC 319/AUT-2459 - Add GOVUK One Login Analytics Package (#1522) * Add analytics package to auth repo - intial set up * Add OPL template and script * Add ga4 on page load to base.njk file * Add taxonomy * Add taxonomy values * Add static taxonomy values * WIP * Add changes for dyanamic content id's * Add WIP resend codes * Add add password reset and resend code content ids * WIP- add unhappy path page content ids OPL tracker * Add dev app changes - required for docker containers * Add http status ok * Update yarn lock and update content id * Add GA4 OPL tracker and remove unused code * Add UA implementation * Refine UA implementation * Update to v0.0.10 analytics package * Add additional taxonomy level 2 and content id's * Remove console.logs for debugging * Remove commented out code * Refactor and tidy code * Reduce pollution from linting * Run yarn pretty * Remove unused console.log * Address unit testing and refactor contact us OPL tracker * Revent application.js changes * Apply loggedin and dynamic attributes to GA4 tracker * Remove duplicate OPL component * Correct application.js changes from PR review * apply application.js changes * Reduce linting bloat * Remove the linting bloat and add amendments from PR Review * Update read.me, run yarn pretty * Apply yarn pretty blocker * Add unit test correction * Add amends from yarn pretty fix * Add OPL to missing pages, including error pages * Remove unused variables * Remove docker-compose change introduced, revert code * Add PR amendments * yarn run pretty amend * Add PR amendments * Revery docker-compose.yml * DFC-319: Update analytics package to latest * [DFC-319] - Update build scripts with new package name * Un-uglify showpassword * Remove env variable instructions from readme, include in variable file build files * Correct GA4 object formatting * Restructure local variables to getter functions * Remove set variables from nunjucks files, reduce duplication of variable setting from controllers * Remove comments and add whitespacing where specified, revert docker yml file * Address feedback re endblock spacing * Update package.json with updated frontend analytics package * Revert ci changes made, implement build vars change * Correct resend-mfa account creation * Apply amendments re removing special characters, CSP amend, and optional chaining replacement --------- Co-authored-by: di-aholme --- package.json | 3 +- scripts/_create_env_file.py | 25 + src/app.ts | 2 + src/assets/javascript/application.js | 50 +- src/assets/javascript/cookies.js | 190 +------ src/components/account-created/index.njk | 2 + .../resend-mfa-code/index.njk | 2 + .../resend-mfa-code-controller.ts | 21 + .../password-reset-required/index.njk | 2 + .../permanently-blocked/index.njk | 2 + .../account-not-found/index-mandatory.njk | 1 + .../account-not-found/index-one-login.njk | 1 + .../account-not-found/index-optional.njk | 1 + .../index.njk | 1 + ...ck-your-email-security-codes-controller.ts | 18 + .../check-your-email-security-codes/index.njk | 1 + .../check-your-email-controller.ts | 21 + src/components/check-your-email/index.njk | 1 + src/components/check-your-phone/index.njk | 1 + src/components/common/errors/404.njk | 3 + src/components/common/errors/500.njk | 2 + ...rney-direct-navigation-without-session.njk | 2 + .../common/errors/session-expired.njk | 2 + .../common/footer/accessibility-statement.njk | 2 + .../common/footer/privacy-statement.njk | 2 + src/components/common/footer/support.njk | 1 + .../common/footer/terms-conditions.njk | 2 + src/components/common/layout/base.njk | 28 +- .../contact-us/further-information/index.njk | 1 + .../index-gov-service-contact-us.njk | 2 + .../contact-us/index-public-contact-us.njk | 1 + .../contact-us/index-submit-success.njk | 1 + src/components/create-password/index.njk | 1 + .../index-2fa-service-uplift-auth-app.njk | 3 + .../enter-authenticator-app-code/index.njk | 2 + .../enter-email/index-create-account.njk | 1 + .../enter-email/index-existing-account.njk | 1 + .../index-re-enter-email-account.njk | 2 + ...sign-in-details-entered-too-many-times.njk | 2 + .../index-2fa-service-uplift-mobile-phone.njk | 3 + src/components/enter-mfa/index.njk | 2 + .../enter-password-controller.ts | 5 + .../enter-password/index-account-exists.njk | 1 + .../enter-password/index-account-locked.njk | 2 + .../index-sign-in-retry-blocked.njk | 1 + src/components/enter-password/index.njk | 1 + .../enter-phone-number-controller.ts | 26 + src/components/enter-phone-number/index.njk | 2 +- .../enter-phone-number-controller.test.ts | 4 + src/components/ga4-opl/macro.njk | 3 + src/components/ga4-opl/template.njk | 16 + .../prove-identity-callback/index.njk | 3 + .../session-expiry-error.njk | 2 + .../index-existing-session.njk | 2 + .../prove-identity-welcome/index.njk | 2 + src/components/resend-email-code/index.njk | 2 + src/components/resend-mfa-code/index.njk | 2 + .../reset-password-2fa-auth-app/index.njk | 2 + .../reset-password-2fa-sms/index.njk | 2 + .../index-exceeded-request-count.njk | 2 + .../index-request-attempt-blocked.njk | 2 + .../index-reset-password-resend-code.njk | 1 + .../reset-password-check-email/index.njk | 2 + .../reset-password-check-email-controller.ts | 31 ++ ...et-password-check-email-controller.test.ts | 2 + src/components/reset-password/index.njk | 1 + .../reset-password-controller.ts | 14 +- .../tests/reset-password-controller.test.ts | 2 + .../index-security-code-entered-exceeded.njk | 2 + .../index-too-many-requests.njk | 2 + .../security-code-error/index-wait.njk | 3 + src/components/security-code-error/index.njk | 3 + .../security-code-error-controller.ts | 30 ++ .../security-code-error-controller.test.ts | 59 ++- src/components/select-mfa-options/index.njk | 1 + .../select-mfa-options-controller.ts | 20 + .../setup-authenticator-app/index.njk | 1 + .../setup-authenticator-app-controller.ts | 21 + src/components/share-info/index.njk | 2 + src/components/sign-in-or-create/index.njk | 1 + src/components/signed-out/index.njk | 2 + .../signed-out/signed-out-controller.ts | 10 + .../updated-terms-conditions/index.njk | 2 + src/config.ts | 16 + src/middleware/analytics-middleware.ts | 16 + src/utils/logger.ts | 1 + yarn.lock | 475 +++++++++--------- 87 files changed, 754 insertions(+), 459 deletions(-) create mode 100644 src/components/ga4-opl/macro.njk create mode 100644 src/components/ga4-opl/template.njk create mode 100644 src/middleware/analytics-middleware.ts diff --git a/package.json b/package.json index 2798259c0..a3e52d288 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "build-sass": "rm -rf dist/public/style.css && sass --load-path=node_modules/govuk-frontend/govuk --no-source-map --quiet-deps src/assets/scss/application.scss dist/public/style.css --style compressed", "clean": "rm -rf dist node_modules logs.json", "clean-modules": "rm -rf node_modules", - "copy-assets": "mkdir -p dist && copyfiles -u 1 src/**/*.njk dist/ src/locales/**/** dist/ src/config/*.txt dist/ && copyfiles -u 3 src/assets/javascript/*.js dist/public/scripts -e **/all.js && cp node_modules/govuk-frontend/govuk/all.js dist/public/scripts", + "copy-assets": "mkdir -p dist && copyfiles -u 1 src/**/*.njk dist/ src/locales/**/** dist/ src/config/*.txt dist/ && copyfiles -u 3 src/assets/javascript/*.js dist/public/scripts -e **/all.js && cp node_modules/govuk-frontend/govuk/all.js dist/public/scripts && cp node_modules/@govuk-one-login/frontend-analytics/lib/analytics.js dist/public/scripts", "dev": "tsc && concurrently -k -p \"[{name}]\" -n \"Sass,TypeScript,Node\" -c \"yellow.bold,cyan.bold,green.bold\" \"npm run watch-sass\" \"npm run watch-ts\" \"npm run watch-node\"", "dummy-server": "node dev-app.js | pino-pretty", "depcheck": "depcheck", @@ -64,6 +64,7 @@ "@aws-sdk/client-kms": "^3.366.0", "@govuk-one-login/frontend-language-toggle": "^1.1.0", "@govuk-one-login/frontend-passthrough-headers": "^0.0.3", + "@govuk-one-login/frontend-analytics": "1.0.3", "@otplib/core": "^12.0.1", "@otplib/plugin-base32-enc-dec": "^12.0.1", "aws-sdk": "^2.1356.0", diff --git a/scripts/_create_env_file.py b/scripts/_create_env_file.py index ff1858461..ed774acc6 100644 --- a/scripts/_create_env_file.py +++ b/scripts/_create_env_file.py @@ -123,6 +123,31 @@ class EnvFileSection(TypedDict): }, }, }, + { + "header": "Analytics", + "variables": { + "GA4_DISABLED": { + "value": "false", + "comment": "GA4 Enablement", + }, + "UA_DISABLED": { + "value": "false", + "comment": "Univeral Analytics", + }, + "UNIVERSAL_ANALYTICS_GTM_CONTAINER_ID": { + "value": "GTM-TK92W68", + "comment": "Universal Analytics Container Id", + }, + "GOOGLE_ANALYTICS_4_GTM_CONTAINER_ID": { + "value": "GTM-KD86CMZ", + "comment": "Listen port for frontend nodemon", + }, + "ANALYTICS_COOKIE_DOMAIN": { + "value": "localhost", + "comment": "Analytics cookie domain where cookie is set", + }, + }, + }, ] DEFAULT_USER_VARIABLE_LOOKUP = { diff --git a/src/app.ts b/src/app.ts index 7774ad3d7..581e6b3e5 100644 --- a/src/app.ts +++ b/src/app.ts @@ -87,6 +87,7 @@ import { accountInterventionRouter } from "./components/account-intervention/pas import { permanentlyBlockedRouter } from "./components/account-intervention/permanently-blocked/permanently-blocked-router"; import { temporarilyBlockedRouter } from "./components/account-intervention/temporarily-blocked/temporarily-blocked-router"; import { resetPassword2FAAuthAppRouter } from "./components/reset-password-2fa-auth-app/reset-password-2fa-auth-app-routes"; +import { setGTM } from "./middleware/analytics-middleware"; import { setCurrentUrlMiddleware } from "./middleware/current-url-middleware"; const APP_VIEWS = [ @@ -168,6 +169,7 @@ async function createApp(): Promise { app.use("/public", express.static(path.join(__dirname, "public"))); app.set("view engine", configureNunjucks(app, APP_VIEWS)); app.use(setLocalVarsMiddleware); + app.use(setGTM); i18next .use(Backend) diff --git a/src/assets/javascript/application.js b/src/assets/javascript/application.js index 8dc857889..b53158040 100644 --- a/src/assets/javascript/application.js +++ b/src/assets/javascript/application.js @@ -1,23 +1,23 @@ function initFeedbackRadioButtons() { var feedbackRadioButtons = Array.prototype.slice.call( - document.querySelectorAll('input[name="feedbackContact"]') - ); - var container = document.querySelector("#contact-details-container"); - feedbackRadioButtons.forEach(function (element) { - element.addEventListener( - "click", - function (event) { - if (event.target.value === "true") { - container.classList.remove("govuk-!-display-none"); - } else { - container.classList.add("govuk-!-display-none"); - var elements = container.getElementsByTagName("input"); - for (var i = 0; i < elements.length; i++) { - if (elements[i].type == "text") { - elements[i].value = ""; + document.querySelectorAll('input[name="feedbackContact"]') + ); + var container = document.querySelector("#contact-details-container"); + feedbackRadioButtons.forEach(function (element) { + element.addEventListener( + "click", + function (event) { + if (event.target.value === "true") { + container.classList.remove("govuk-!-display-none"); + } else { + container.classList.add("govuk-!-display-none"); + var elements = container.getElementsByTagName("input"); + for (var i = 0; i < elements.length; i++) { + if (elements[i].type == "text") { + elements[i].value = ""; + } } } - } }.bind(this) ); }); @@ -50,21 +50,17 @@ function initEnterPhoneNumber() { } } +window.DI = window.DI || {}; +window.DI.analyticsUa = window.DI.analyticsUa || {}; (function (w) { "use strict"; - function appInit(trackingId, analyticsCookieDomain) { + function appInit() { window.GOVUKFrontend.initAll(); - var cookies = window.GOVSignIn.Cookies(trackingId, analyticsCookieDomain); + var cookies = window.GOVSignIn.Cookies(); - if (cookies.hasConsentForAnalytics()) { + if (window.DI.analyticsGa4.cookie.hasConsentForAnalytics()) { cookies.initAnalytics(); } - - if (cookies.isOnCookiesPage()) { - cookies.cookiesPageInit(); - } else { - cookies.cookieBannerInit(); - } } initFeedbackRadioButtons(); @@ -80,5 +76,5 @@ function initEnterPhoneNumber() { } } - w.GOVSignIn.appInit = appInit; -})(window); + w.DI.analyticsUa.init = appInit; +})(window); diff --git a/src/assets/javascript/cookies.js b/src/assets/javascript/cookies.js index 7c3ec1f3b..e5c52a430 100644 --- a/src/assets/javascript/cookies.js +++ b/src/assets/javascript/cookies.js @@ -1,96 +1,10 @@ "use strict"; -var cookies = function (trackingId, analyticsCookieDomain) { - var COOKIES_PREFERENCES_SET = "cookies_preferences_set"; - var COOKIES_HISTORY_LENGTH = "chl"; - var cookiesAccepted = document.querySelector("#cookies-accepted"); - var cookiesRejected = document.querySelector("#cookies-rejected"); - var hideCookieBanner = document.querySelectorAll(".cookie-hide-button"); - var cookieBannerContainer = document.querySelector(".govuk-cookie-banner"); - var cookieBanner = document.querySelector("#cookies-banner-main"); - var acceptCookies = document.querySelector('button[name="cookiesAccept"]'); - var rejectCookies = document.querySelector('button[name="cookiesReject"]'); - - function cookieBannerInit() { - acceptCookies.addEventListener( - "click", - function (event) { - event.preventDefault(); - setBannerCookieConsent(true); - }.bind(this) - ); - - rejectCookies.addEventListener( - "click", - function (event) { - event.preventDefault(); - setBannerCookieConsent(false); - }.bind(this) - ); - - var hideButtons = Array.prototype.slice.call(hideCookieBanner); - hideButtons.forEach(function (element) { - element.addEventListener( - "click", - function (event) { - event.preventDefault(); - hideElement(cookieBannerContainer); - }.bind(this) - ); - }); - - var hasCookiesPolicy = getCookie(COOKIES_PREFERENCES_SET); - - if (!hasCookiesPolicy) { - showElement(cookieBannerContainer); - } - } - - function setBannerCookieConsent(analyticsConsent) { - setCookie( - COOKIES_PREFERENCES_SET, - { analytics: analyticsConsent }, - { days: 365 } - ); - - hideElement(cookieBanner); - - if (analyticsConsent) { - showElement(cookiesAccepted); - initAnalytics(); - } else { - showElement(cookiesRejected); - } - } - - function cookiesPageInit() { - document.querySelector("#cookie-preferences-form").hidden = false; - var chl = getCookie(COOKIES_HISTORY_LENGTH); - if (! chl || chl === "0" ) { - setCookie( - COOKIES_HISTORY_LENGTH, - window.history.length - ); - } - document.querySelector("#go-back-link").onclick = function() { - var chl = getCookie(COOKIES_HISTORY_LENGTH); - if (chl && !isNaN(chl)) { - var backCount = (window.history.length - chl) + 1; - window.history.go(-(Math.abs(backCount))); - setCookie(COOKIES_HISTORY_LENGTH, 0); - } - }; - } - - function hasConsentForAnalytics() { - var cookieConsent = JSON.parse(getCookie(COOKIES_PREFERENCES_SET)); - return cookieConsent ? cookieConsent.analytics : false; - } +var cookies = function () { function initAnalytics() { - loadGtmScript(); + window.DI.analyticsGa4.loadGtmScript(window.DI.analyticsGa4.uaContainerId); initGtm(); - initLinkerHandlers(); } function pushLanguageToDataLayer() { @@ -114,16 +28,6 @@ var cookies = function (trackingId, analyticsCookieDomain) { } } - function loadGtmScript() { - var gtmScriptTag = document.createElement("script"); - gtmScriptTag.type = "text/javascript"; - gtmScriptTag.setAttribute("async", "true"); - gtmScriptTag.setAttribute( - "src", - "https://www.googletagmanager.com/gtm.js?id=" + trackingId - ); - document.documentElement.firstChild.appendChild(gtmScriptTag); - } function initGtm() { window.dataLayer = [ @@ -153,39 +57,6 @@ var cookies = function (trackingId, analyticsCookieDomain) { gtag({ "gtm.start": new Date().getTime(), event: "gtm.js" }); } - function initLinkerHandlers() { - var submitButton = document.querySelector('button[type="submit"]'); - var pageForm = document.getElementById("form-tracking"); - - if (submitButton && pageForm) { - submitButton.addEventListener("click", function () { - if (window.ga && window.gaplugins) { - var tracker = ga.getAll()[0]; - var linker = new window.gaplugins.Linker(tracker); - var destinationLink = linker.decorate(pageForm.action); - pageForm.action = destinationLink; - } - }); - } - - var trackLink = document.getElementById("track-link"); - - if (trackLink) { - trackLink.addEventListener("click", function (e) { - e.preventDefault(); - - if (window.ga && window.gaplugins) { - var tracker = ga.getAll()[0]; - var linker = new window.gaplugins.Linker(tracker); - var destinationLink = linker.decorate(trackLink.href); - window.location.href = destinationLink; - } else { - window.location.href = trackLink.href; - } - }); - } - } - function generateSessionJourney(journey, status) { return { sessionjourney: { @@ -236,64 +107,7 @@ var cookies = function (trackingId, analyticsCookieDomain) { return JOURNEY_DATA_LAYER_PATHS[url]; } - function getCookie(name) { - var nameEQ = name + "="; - var cookies = document.cookie.split(";"); - for (var i = 0, len = cookies.length; i < len; i++) { - var cookie = cookies[i]; - while (cookie.charAt(0) === " ") { - cookie = cookie.substring(1, cookie.length); - } - if (cookie.indexOf(nameEQ) === 0) { - return decodeURIComponent(cookie.substring(nameEQ.length)); - } - } - return null; - } - - function setCookie(name, values, options) { - if (typeof options === "undefined") { - options = {}; - } - - var cookieString = name + "=" + JSON.stringify(values); - if (options.days) { - var date = new Date(); - date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000); - cookieString = - cookieString + - "; expires=" + - date.toGMTString() + - "; path=/;" + - " domain=" + - analyticsCookieDomain + - ";"; - } - - if (document.location.protocol === "https:") { - cookieString = cookieString + "; Secure"; - } - - document.cookie = cookieString; - } - - function hideElement(el) { - el.style.display = "none"; - } - - function showElement(el) { - el.style.display = "block"; - } - - function isOnCookiesPage() { - return window.location.pathname.indexOf("cookies") !== -1; - } - return { - cookieBannerInit, - isOnCookiesPage, - cookiesPageInit, - hasConsentForAnalytics, initAnalytics, }; }; diff --git a/src/components/account-created/index.njk b/src/components/account-created/index.njk index fcd02d4ce..f54500f82 100644 --- a/src/components/account-created/index.njk +++ b/src/components/account-created/index.njk @@ -28,4 +28,6 @@ }) }} {% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "create account", contentId: "6857e410-75b8-4807-b475-3f24fc96c9de", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/account-creation/resend-mfa-code/index.njk b/src/components/account-creation/resend-mfa-code/index.njk index feb8176be..2655f2725 100644 --- a/src/components/account-creation/resend-mfa-code/index.njk +++ b/src/components/account-creation/resend-mfa-code/index.njk @@ -37,4 +37,6 @@ }) }} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "create account", contentId: "8247477c-3e33-4dae-9528-22e7ed44efb3", loggedInStatus: false, dynamic:false })}} {% endblock %} diff --git a/src/components/account-creation/resend-mfa-code/resend-mfa-code-controller.ts b/src/components/account-creation/resend-mfa-code/resend-mfa-code-controller.ts index f35182ca5..2b541ae89 100644 --- a/src/components/account-creation/resend-mfa-code/resend-mfa-code-controller.ts +++ b/src/components/account-creation/resend-mfa-code/resend-mfa-code-controller.ts @@ -14,6 +14,21 @@ import { BadRequestError } from "../../../utils/error"; import { support2hrLockout } from "../../../config"; import { isLocked } from "../../../utils/lock-helper"; +const oplValues = { + default: { + contentId: "f463a280-31f1-43c0-a2f5-6b46b1e2bb15", + taxonomyLevel2: "sign in", + }, + enterExceeded: { + contentId: "f463a280-31f1-43c0-a2f5-6b46b1e2bb15", + taxonomyLevel2: "sign in", + }, + indexWait: { + contentId: "f463a280-31f1-43c0-a2f5-6b46b1e2bb15", + taxonomyLevel2: "sign in", + }, +}; + export function resendMfaCodeGet(req: Request, res: Response): void { const newCodeLink = req.query?.isResendCodeRequest ? pathWithQueryParam( @@ -27,10 +42,14 @@ export function resendMfaCodeGet(req: Request, res: Response): void { res.render("security-code-error/index-security-code-entered-exceeded.njk", { newCodeLink: newCodeLink, isAuthApp: false, + contentId: oplValues.enterExceeded.contentId, + taxonomyLevel2: oplValues.enterExceeded.taxonomyLevel2, }); } else if (isLocked(req.session.user.codeRequestLock)) { res.render("security-code-error/index-wait.njk", { newCodeLink, + contentId: oplValues.indexWait.contentId, + taxonomyLevel2: oplValues.indexWait.taxonomyLevel2, support2hrLockout: support2hrLockout(), isAccountCreationJourney: req.session.user.isAccountCreationJourney, }); @@ -39,6 +58,8 @@ export function resendMfaCodeGet(req: Request, res: Response): void { phoneNumber: req.session.user.redactedPhoneNumber, isResendCodeRequest: req.query?.isResendCodeRequest, support2hrLockout: support2hrLockout(), + contentId: oplValues.default.contentId, + taxonomyLevel2: oplValues.default.taxonomyLevel2, }); } } diff --git a/src/components/account-intervention/password-reset-required/index.njk b/src/components/account-intervention/password-reset-required/index.njk index 5926927b5..ea3ce2af4 100644 --- a/src/components/account-intervention/password-reset-required/index.njk +++ b/src/components/account-intervention/password-reset-required/index.njk @@ -20,4 +20,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/account-intervention/permanently-blocked/index.njk b/src/components/account-intervention/permanently-blocked/index.njk index 0192d2301..aaf6262e6 100644 --- a/src/components/account-intervention/permanently-blocked/index.njk +++ b/src/components/account-intervention/permanently-blocked/index.njk @@ -15,4 +15,6 @@

{{'pages.permanentlyLockedScreen.section2.paragraph2' | translate }}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/account-not-found/index-mandatory.njk b/src/components/account-not-found/index-mandatory.njk index e90b1ad60..05b5e010a 100644 --- a/src/components/account-not-found/index-mandatory.njk +++ b/src/components/account-not-found/index-mandatory.njk @@ -42,4 +42,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "10e1b70b-e208-4db8-8863-3679a675b51d", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/account-not-found/index-one-login.njk b/src/components/account-not-found/index-one-login.njk index 578bdcaec..a126b1aba 100644 --- a/src/components/account-not-found/index-one-login.njk +++ b/src/components/account-not-found/index-one-login.njk @@ -45,4 +45,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "a70b71e7-b444-46e5-895c-cd2e27bbe6ba", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/account-not-found/index-optional.njk b/src/components/account-not-found/index-optional.njk index 69403f6d2..201a349de 100644 --- a/src/components/account-not-found/index-optional.njk +++ b/src/components/account-not-found/index-optional.njk @@ -40,4 +40,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "a70b71e7-b444-46e5-895c-cd2e27bbe6ba", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/account-recovery/change-security-codes-confirmation/index.njk b/src/components/account-recovery/change-security-codes-confirmation/index.njk index d987cec6d..839b1977e 100644 --- a/src/components/account-recovery/change-security-codes-confirmation/index.njk +++ b/src/components/account-recovery/change-security-codes-confirmation/index.njk @@ -25,4 +25,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "account recovery", contentId: "1abedb1b-7d09-4e81-9f88-a8b4297635b3", loggedInStatus: false, dynamic: false }) }} {% endblock %} diff --git a/src/components/account-recovery/check-your-email-security-codes/check-your-email-security-codes-controller.ts b/src/components/account-recovery/check-your-email-security-codes/check-your-email-security-codes-controller.ts index 89b0a6a66..a299df67c 100644 --- a/src/components/account-recovery/check-your-email-security-codes/check-your-email-security-codes-controller.ts +++ b/src/components/account-recovery/check-your-email-security-codes/check-your-email-security-codes-controller.ts @@ -12,6 +12,17 @@ import { ERROR_CODES } from "../../common/constants"; import { AccountInterventionsInterface } from "../../account-intervention/types"; import { accountInterventionService } from "../../account-intervention/account-intervention-service"; +const oplValues = { + createAccount: { + contentId: "95e26313-bc2f-49bc-bc62-fd715476c1d9", + taxonomyLevel2: "create account", + }, + accountRecovery: { + contentId: "account recovery", + taxonomyLevel2: "e768e27b-1c4d-48ba-8bcf-4c40274a6441", + }, +}; + const TEMPLATE_NAME = "account-recovery/check-your-email-security-codes/index.njk"; @@ -25,9 +36,16 @@ export function checkYourEmailSecurityCodesGet( } else if (req.query.type === MFA_METHOD_TYPE.SMS) { backUrl = HREF_BACK.ENTER_MFA; } + const { isAccountRecoveryJourney } = req.session.user; res.render(TEMPLATE_NAME, { email: req.session.user.email, backUrl: backUrl, + contentId: isAccountRecoveryJourney + ? oplValues.accountRecovery.contentId + : oplValues.createAccount.contentId, + taxonomyLevel2: isAccountRecoveryJourney + ? oplValues.accountRecovery.taxonomyLevel2 + : oplValues.createAccount.taxonomyLevel2, }); } diff --git a/src/components/account-recovery/check-your-email-security-codes/index.njk b/src/components/account-recovery/check-your-email-security-codes/index.njk index 5aae86ffb..7cbb6d8b9 100644 --- a/src/components/account-recovery/check-your-email-security-codes/index.njk +++ b/src/components/account-recovery/check-your-email-security-codes/index.njk @@ -63,4 +63,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: "false", dynamic:"false" })}} {% endblock %} diff --git a/src/components/check-your-email/check-your-email-controller.ts b/src/components/check-your-email/check-your-email-controller.ts index b5a07872b..932380f92 100644 --- a/src/components/check-your-email/check-your-email-controller.ts +++ b/src/components/check-your-email/check-your-email-controller.ts @@ -17,6 +17,25 @@ import { isLocked } from "../../utils/lock-helper"; const TEMPLATE_NAME = "check-your-email/index.njk"; +const oplValues = { + createAccount: { + contentId: "054e1ea8-97a8-461a-a964-07345c80098e", + taxonomyLevel2: "create account", + }, + accountRecoveryPassword: { + contentId: "653c3488-2436-489a-83df-eef29cbf2f7b", + taxonomyLevel2: "account recovery", + }, + accountRecovery2fa: { + contentId: "8c9cfa1a-fde2-42e0-b785-16f0a06896e2", + taxonomyLevel2: "account recovery", + }, + accountIntervention: { + contentId: "7b663466-8001-436f-b10b-e6ac581d39aa", + taxonomyLevel2: "account intervention", + }, +}; + export function checkYourEmailGet(req: Request, res: Response): void { if (isLocked(req.session.user.codeRequestLock)) { return res.render("security-code-error/index-wait.njk", { @@ -29,6 +48,8 @@ export function checkYourEmailGet(req: Request, res: Response): void { } res.render(TEMPLATE_NAME, { email: req.session.user.email, + contentId: oplValues.createAccount.contentId, + taxonomyLevel2: oplValues.createAccount.taxonomyLevel2, }); } diff --git a/src/components/check-your-email/index.njk b/src/components/check-your-email/index.njk index 45b31c65f..56c9ec5a3 100644 --- a/src/components/check-your-email/index.njk +++ b/src/components/check-your-email/index.njk @@ -62,4 +62,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "accounts", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: "false", dynamic: true }) }} {% endblock %} diff --git a/src/components/check-your-phone/index.njk b/src/components/check-your-phone/index.njk index 9711dadc7..d0886d6e1 100644 --- a/src/components/check-your-phone/index.njk +++ b/src/components/check-your-phone/index.njk @@ -76,4 +76,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "create account", contentId: "1fef9388-34cd-4ea2-b899-a66b7327d2f7", loggedInStatus: false, dynamic: false}) }} {% endblock %} diff --git a/src/components/common/errors/404.njk b/src/components/common/errors/404.njk index 026db7588..a2bd66d01 100644 --- a/src/components/common/errors/404.njk +++ b/src/components/common/errors/404.njk @@ -15,4 +15,7 @@ "type": "Submit", "href": "error.error404.content.govUKHomepageButtonHref" | translate }) }} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "404", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "" , loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/errors/500.njk b/src/components/common/errors/500.njk index 7cc923e3c..edefc6d86 100644 --- a/src/components/common/errors/500.njk +++ b/src/components/common/errors/500.njk @@ -9,4 +9,6 @@

{{ 'error.error500.content.paragraph1' | translate }}

+ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "500", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/common/errors/mid-journey-direct-navigation-without-session.njk b/src/components/common/errors/mid-journey-direct-navigation-without-session.njk index fd966f675..fb3a9c281 100644 --- a/src/components/common/errors/mid-journey-direct-navigation-without-session.njk +++ b/src/components/common/errors/mid-journey-direct-navigation-without-session.njk @@ -12,4 +12,6 @@ {{ 'error.sessionRequiredMidJourneyError.content.paragraph1.text3' | translate }}.

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/errors/session-expired.njk b/src/components/common/errors/session-expired.njk index 4fcb26c4e..5d6b4b0ac 100644 --- a/src/components/common/errors/session-expired.njk +++ b/src/components/common/errors/session-expired.njk @@ -16,4 +16,6 @@ "href": "error.timeoutError.content.govUKHomepageButtonHref" | translate }) }} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/footer/accessibility-statement.njk b/src/components/common/footer/accessibility-statement.njk index 62fe3aaa5..898be6dd5 100644 --- a/src/components/common/footer/accessibility-statement.njk +++ b/src/components/common/footer/accessibility-statement.njk @@ -125,4 +125,6 @@

{{'pages.accessibilityStatement.section9.paragraph1' | translate}}

{{'pages.accessibilityStatement.section9.paragraph2' | translate}}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/footer/privacy-statement.njk b/src/components/common/footer/privacy-statement.njk index 13b2a0d75..6c67b8222 100644 --- a/src/components/common/footer/privacy-statement.njk +++ b/src/components/common/footer/privacy-statement.njk @@ -899,4 +899,6 @@ {{ 'pages.privacy.sections.changes_to_this_notice.paragraph_three' | translate }}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/footer/support.njk b/src/components/common/footer/support.njk index 429eac993..8e3debc4b 100644 --- a/src/components/common/footer/support.njk +++ b/src/components/common/footer/support.njk @@ -55,4 +55,5 @@

{{'pages.support.section2.paragraph1' | translate}}

{{'pages.support.section2.paragraph2' | translate}}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/common/footer/terms-conditions.njk b/src/components/common/footer/terms-conditions.njk index c1a24ca4f..d19cddc0b 100644 --- a/src/components/common/footer/terms-conditions.njk +++ b/src/components/common/footer/terms-conditions.njk @@ -172,4 +172,6 @@ {{'pages.termsAndConditions.section11.paragraph2.linkText' | translate}}.

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/common/layout/base.njk b/src/components/common/layout/base.njk index 66e08272a..ad52adfa7 100644 --- a/src/components/common/layout/base.njk +++ b/src/components/common/layout/base.njk @@ -1,4 +1,5 @@ {% extends "govuk/template.njk" %} +{% from "ga4-opl/macro.njk" import ga4OnPageLoad %} {% from "govuk/components/cookie-banner/macro.njk" import govukCookieBanner %} {% from "govuk/components/phase-banner/macro.njk" import govukPhaseBanner %} {% from "govuk/components/back-link/macro.njk" import govukBackLink %} @@ -49,9 +50,11 @@ {% endblock %} {% set phaseBannerText %} - {{ 'general.phaseBanner.message.start' | translate }} {{ 'general.phaseBanner.message.linkText' | translate }} {{ 'general.phaseBanner.message.end' | translate }} + target="_blank">{{ 'general.phaseBanner.message.linkText' | translate }} +{{ 'general.phaseBanner.message.end' | translate }} {% endset %} {% block main %} @@ -142,6 +145,21 @@ - -{% endblock %} + + +{% endblock %} \ No newline at end of file diff --git a/src/components/contact-us/further-information/index.njk b/src/components/contact-us/further-information/index.njk index 94c5df0b3..0b1a1c439 100644 --- a/src/components/contact-us/further-information/index.njk +++ b/src/components/contact-us/further-information/index.njk @@ -50,4 +50,5 @@ {% include 'contact-us/further-information/_proving-identity-further-information.njk' %} {% endif %} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "feedback", contentId: "a06d6387-d411-47db-8f7d-88871286330b", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/contact-us/index-gov-service-contact-us.njk b/src/components/contact-us/index-gov-service-contact-us.njk index ad9a1e78a..e7bc49b07 100644 --- a/src/components/contact-us/index-gov-service-contact-us.njk +++ b/src/components/contact-us/index-gov-service-contact-us.njk @@ -34,4 +34,6 @@

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/contact-us/index-public-contact-us.njk b/src/components/contact-us/index-public-contact-us.njk index b0ab35031..e92e9dcab 100644 --- a/src/components/contact-us/index-public-contact-us.njk +++ b/src/components/contact-us/index-public-contact-us.njk @@ -97,4 +97,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "feedback", contentId: "e08d04e6-b24f-4bad-9955-1eb860771747", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/contact-us/index-submit-success.njk b/src/components/contact-us/index-submit-success.njk index d48218636..1761e88ce 100644 --- a/src/components/contact-us/index-submit-success.njk +++ b/src/components/contact-us/index-submit-success.njk @@ -26,4 +26,5 @@

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "feedback", contentId: "0e020971-d828-4679-97fe-23af6e96ab14", loggedInStatus: false, dynamic:false })}} {% endblock %} diff --git a/src/components/create-password/index.njk b/src/components/create-password/index.njk index 8a58257d5..c6348dab5 100644 --- a/src/components/create-password/index.njk +++ b/src/components/create-password/index.njk @@ -68,6 +68,7 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "create account", contentId: "8c0cc624-2e97-471d-ad36-6b695f9a038d", loggedInStatus: false, dynamic: false })}} {% endblock %} {% block scripts %} diff --git a/src/components/enter-authenticator-app-code/index-2fa-service-uplift-auth-app.njk b/src/components/enter-authenticator-app-code/index-2fa-service-uplift-auth-app.njk index 072c28a47..aa3d14ebd 100644 --- a/src/components/enter-authenticator-app-code/index-2fa-service-uplift-auth-app.njk +++ b/src/components/enter-authenticator-app-code/index-2fa-service-uplift-auth-app.njk @@ -67,4 +67,7 @@ html: detailsHTML }) }} {% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/enter-authenticator-app-code/index.njk b/src/components/enter-authenticator-app-code/index.njk index d5729d646..e5fa956d3 100644 --- a/src/components/enter-authenticator-app-code/index.njk +++ b/src/components/enter-authenticator-app-code/index.njk @@ -53,4 +53,6 @@ html: detailsHTML }) }} {% endif %} + + {{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "89461417-df3f-46a8-9c37-713b9dd78085", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/enter-email/index-create-account.njk b/src/components/enter-email/index-create-account.njk index e68bda991..57b9b6167 100644 --- a/src/components/enter-email/index-create-account.njk +++ b/src/components/enter-email/index-create-account.njk @@ -40,4 +40,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "account", contentId: "390f46f9-1f6b-44f2-8fd7-21a5385a7d3a", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/enter-email/index-existing-account.njk b/src/components/enter-email/index-existing-account.njk index 2772e5648..4c3b12e07 100644 --- a/src/components/enter-email/index-existing-account.njk +++ b/src/components/enter-email/index-existing-account.njk @@ -40,4 +40,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "d8767bcf-ffb8-4b43-8bda-24c6291590bb", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/enter-email/index-re-enter-email-account.njk b/src/components/enter-email/index-re-enter-email-account.njk index 765d52a04..c5ae133d8 100644 --- a/src/components/enter-email/index-re-enter-email-account.njk +++ b/src/components/enter-email/index-re-enter-email-account.njk @@ -44,4 +44,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/enter-email/index-sign-in-details-entered-too-many-times.njk b/src/components/enter-email/index-sign-in-details-entered-too-many-times.njk index 6d52b6487..a1c8b1498 100644 --- a/src/components/enter-email/index-sign-in-details-entered-too-many-times.njk +++ b/src/components/enter-email/index-sign-in-details-entered-too-many-times.njk @@ -25,4 +25,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/enter-mfa/index-2fa-service-uplift-mobile-phone.njk b/src/components/enter-mfa/index-2fa-service-uplift-mobile-phone.njk index 512319eef..99b1fe56e 100644 --- a/src/components/enter-mfa/index-2fa-service-uplift-mobile-phone.njk +++ b/src/components/enter-mfa/index-2fa-service-uplift-mobile-phone.njk @@ -71,4 +71,7 @@ }) }} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/enter-mfa/index.njk b/src/components/enter-mfa/index.njk index 2fc1a89c3..ee038937e 100644 --- a/src/components/enter-mfa/index.njk +++ b/src/components/enter-mfa/index.njk @@ -71,4 +71,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "19601dd7-be55-4ab6-aa44-a6358c4239dc", loggedInStatus: false, dynamic: false })}} {% endblock %} + \ No newline at end of file diff --git a/src/components/enter-password/enter-password-controller.ts b/src/components/enter-password/enter-password-controller.ts index 1ac0ee7a2..ae50f2887 100644 --- a/src/components/enter-password/enter-password-controller.ts +++ b/src/components/enter-password/enter-password-controller.ts @@ -101,6 +101,7 @@ export function enterPasswordPost( accountInterventionsService: AccountInterventionsInterface = accountInterventionService() ): ExpressRouteFunc { return async function (req: Request, res: Response) { + const { isAccountCreationJourney } = req.session.user; const { email } = req.session.user; const { sessionId, clientSessionId, persistentSessionId } = res.locals; @@ -218,6 +219,10 @@ export function enterPasswordPost( "security-code-error/index-security-code-entered-exceeded.njk", { show2HrScreen: support2hrLockout(), + contentId: "727a0395-cc00-48eb-a411-bfe9d8ac5fc8", + taxonomyLevel2: isAccountCreationJourney + ? "create account" + : "sign in", } ); } diff --git a/src/components/enter-password/index-account-exists.njk b/src/components/enter-password/index-account-exists.njk index 8a6b0dae5..50c93c96d 100644 --- a/src/components/enter-password/index-account-exists.njk +++ b/src/components/enter-password/index-account-exists.njk @@ -51,6 +51,7 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "a36232c7-2649-42f8-bf1e-e66ba151aa1c", loggedInStatus: false, dynamic: true })}} {% endblock %} {% block scripts %} diff --git a/src/components/enter-password/index-account-locked.njk b/src/components/enter-password/index-account-locked.njk index 23fd8a5c7..199c610ab 100644 --- a/src/components/enter-password/index-account-locked.njk +++ b/src/components/enter-password/index-account-locked.njk @@ -33,4 +33,6 @@ {% endif %} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/enter-password/index-sign-in-retry-blocked.njk b/src/components/enter-password/index-sign-in-retry-blocked.njk index 2a69db0c8..e8a340a48 100644 --- a/src/components/enter-password/index-sign-in-retry-blocked.njk +++ b/src/components/enter-password/index-sign-in-retry-blocked.njk @@ -38,4 +38,5 @@

{% endif %} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "e020dd02-2f97-46f9-9b26-c98730c89d73", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/enter-password/index.njk b/src/components/enter-password/index.njk index 76f0338fc..6c1820ea0 100644 --- a/src/components/enter-password/index.njk +++ b/src/components/enter-password/index.njk @@ -42,6 +42,7 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "6b9f2243-d217-4c55-8ef3-7ac24b1f77e2", loggedInStatus: false, dynamic: true })}} {% endblock %} {% block scripts %} diff --git a/src/components/enter-phone-number/enter-phone-number-controller.ts b/src/components/enter-phone-number/enter-phone-number-controller.ts index 9d4871e3d..ea351886b 100644 --- a/src/components/enter-phone-number/enter-phone-number-controller.ts +++ b/src/components/enter-phone-number/enter-phone-number-controller.ts @@ -17,9 +17,35 @@ import { support2hrLockout, supportAccountRecovery } from "../../config"; import xss from "xss"; import { getNewCodePath } from "../security-code-error/security-code-error-controller"; +const oplValues = { + createAccount: { + contentId: "0f519eb6-5cd4-476f-968f-d847b3c4c034", + taxonomyLevel2: "create account", + }, + accountRecovery: { + contentId: "cbca1676-f632-4937-984e-1ae5934d13e2", + taxonomyLevel2: "account recovery", + }, +}; + export function enterPhoneNumberGet(req: Request, res: Response): void { + const { isAccountRecoveryJourney, isAccountRecoveryPermitted } = + req.session.user; + const isAccountRecoveryEnabledForEnvironment = supportAccountRecovery(); + + const accountRecovery = + isAccountRecoveryJourney && + isAccountRecoveryPermitted && + isAccountRecoveryEnabledForEnvironment; + res.render("enter-phone-number/index.njk", { isAccountPartCreated: req.session.user.isAccountPartCreated, + contentId: accountRecovery + ? oplValues.accountRecovery.contentId + : oplValues.createAccount.contentId, + taxonomyLevel2: accountRecovery + ? oplValues.accountRecovery.taxonomyLevel2 + : oplValues.createAccount.taxonomyLevel2, }); } diff --git a/src/components/enter-phone-number/index.njk b/src/components/enter-phone-number/index.njk index 2966e0218..f2af7190a 100644 --- a/src/components/enter-phone-number/index.njk +++ b/src/components/enter-phone-number/index.njk @@ -7,7 +7,6 @@ {% set pageTitleName = 'pages.enterPhoneNumber.title' | translate %} - {% set showBack = true %} {% set hrefBack = 'get-security-codes' %} @@ -84,4 +83,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/enter-phone-number/tests/enter-phone-number-controller.test.ts b/src/components/enter-phone-number/tests/enter-phone-number-controller.test.ts index d37bea3c8..49e1b3d14 100644 --- a/src/components/enter-phone-number/tests/enter-phone-number-controller.test.ts +++ b/src/components/enter-phone-number/tests/enter-phone-number-controller.test.ts @@ -37,6 +37,8 @@ describe("enter phone number controller", () => { expect(res.render).to.have.calledWith("enter-phone-number/index.njk", { isAccountPartCreated: undefined, + contentId: "0f519eb6-5cd4-476f-968f-d847b3c4c034", + taxonomyLevel2: "create account", }); }); @@ -48,6 +50,8 @@ describe("enter phone number controller", () => { expect(res.render).to.have.calledWith("enter-phone-number/index.njk", { isAccountPartCreated: true, + contentId: "0f519eb6-5cd4-476f-968f-d847b3c4c034", + taxonomyLevel2: "create account", }); }); }); diff --git a/src/components/ga4-opl/macro.njk b/src/components/ga4-opl/macro.njk new file mode 100644 index 000000000..4c5046dc6 --- /dev/null +++ b/src/components/ga4-opl/macro.njk @@ -0,0 +1,3 @@ +{% macro ga4OnPageLoad(params) %} + {%- include "./template.njk" -%} +{% endmacro %} diff --git a/src/components/ga4-opl/template.njk b/src/components/ga4-opl/template.njk new file mode 100644 index 000000000..a3e40a7e1 --- /dev/null +++ b/src/components/ga4-opl/template.njk @@ -0,0 +1,16 @@ + diff --git a/src/components/prove-identity-callback/index.njk b/src/components/prove-identity-callback/index.njk index 27a027ce7..ef4dc96c5 100644 --- a/src/components/prove-identity-callback/index.njk +++ b/src/components/prove-identity-callback/index.njk @@ -9,4 +9,7 @@

{{'pages.proveIdentityCheck.header' | translate | replace("[serviceName]", serviceName) }}

{{'pages.proveIdentityCheck.paragraph1' | translate}}

+ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/prove-identity-callback/session-expiry-error.njk b/src/components/prove-identity-callback/session-expiry-error.njk index c5163f236..96ba8514e 100644 --- a/src/components/prove-identity-callback/session-expiry-error.njk +++ b/src/components/prove-identity-callback/session-expiry-error.njk @@ -11,4 +11,6 @@

{{ 'error.proveIdentityCallbackSessionExpiryError.content.section1.paragraph1' | translate }}

{{ 'error.proveIdentityCallbackSessionExpiryError.content.section1.paragraph2' | translate }}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/prove-identity-welcome/index-existing-session.njk b/src/components/prove-identity-welcome/index-existing-session.njk index 7e7b2f024..5a7f35785 100644 --- a/src/components/prove-identity-welcome/index-existing-session.njk +++ b/src/components/prove-identity-welcome/index-existing-session.njk @@ -41,4 +41,6 @@ }) }} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/prove-identity-welcome/index.njk b/src/components/prove-identity-welcome/index.njk index 1fdd4e43a..a46888320 100644 --- a/src/components/prove-identity-welcome/index.njk +++ b/src/components/prove-identity-welcome/index.njk @@ -44,4 +44,6 @@ }) }} +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/resend-email-code/index.njk b/src/components/resend-email-code/index.njk index 56718a8ed..3529d9782 100644 --- a/src/components/resend-email-code/index.njk +++ b/src/components/resend-email-code/index.njk @@ -35,4 +35,6 @@ }) }} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "create account", contentId: "3104ec55-1a4e-4811-b927-0531fb315480", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/resend-mfa-code/index.njk b/src/components/resend-mfa-code/index.njk index 24abea141..af60efa3e 100644 --- a/src/components/resend-mfa-code/index.njk +++ b/src/components/resend-mfa-code/index.njk @@ -37,4 +37,6 @@ }) }} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200",englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "sign in", contentId: "f463a280-31f1-43c0-a2f5-6b46b1e2bb15", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/reset-password-2fa-auth-app/index.njk b/src/components/reset-password-2fa-auth-app/index.njk index 707f016bc..9d8c6fbae 100644 --- a/src/components/reset-password-2fa-auth-app/index.njk +++ b/src/components/reset-password-2fa-auth-app/index.njk @@ -63,4 +63,6 @@ html: detailsHTML }) }} {% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "account recovery", contentId: "943b41f4-8262-417f-8866-c0639319ccf0", loggedInStatus: false, dynamic: false })}} {% endblock %} diff --git a/src/components/reset-password-2fa-sms/index.njk b/src/components/reset-password-2fa-sms/index.njk index f72f2e8d3..9640bef4a 100644 --- a/src/components/reset-password-2fa-sms/index.njk +++ b/src/components/reset-password-2fa-sms/index.njk @@ -63,4 +63,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/reset-password-check-email/index-exceeded-request-count.njk b/src/components/reset-password-check-email/index-exceeded-request-count.njk index 3bf1343c1..b825fe8e1 100644 --- a/src/components/reset-password-check-email/index-exceeded-request-count.njk +++ b/src/components/reset-password-check-email/index-exceeded-request-count.njk @@ -14,4 +14,6 @@ {{'pages.resetPasswordCountExceeded.paragraph3' | translate}}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/reset-password-check-email/index-request-attempt-blocked.njk b/src/components/reset-password-check-email/index-request-attempt-blocked.njk index 2a0530a9e..ebd5a5aca 100644 --- a/src/components/reset-password-check-email/index-request-attempt-blocked.njk +++ b/src/components/reset-password-check-email/index-request-attempt-blocked.njk @@ -14,4 +14,6 @@ {{'pages.resetPasswordAttemptBlocked.paragraph3' | translate}}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/reset-password-check-email/index-reset-password-resend-code.njk b/src/components/reset-password-check-email/index-reset-password-resend-code.njk index 4af311ff8..5b5381d6d 100644 --- a/src/components/reset-password-check-email/index-reset-password-resend-code.njk +++ b/src/components/reset-password-check-email/index-reset-password-resend-code.njk @@ -28,4 +28,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/reset-password-check-email/index.njk b/src/components/reset-password-check-email/index.njk index 4c63075f2..b7a61750e 100644 --- a/src/components/reset-password-check-email/index.njk +++ b/src/components/reset-password-check-email/index.njk @@ -8,6 +8,7 @@ {% set showBack = true %} {% set hrefBack = 'enter-password' %} {% block content %} + {% include "common/errors/errorSummary.njk" %}

{{'pages.resetPasswordCheckEmail.header' | translate}}

@@ -73,4 +74,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/reset-password-check-email/reset-password-check-email-controller.ts b/src/components/reset-password-check-email/reset-password-check-email-controller.ts index 990168693..822e34d31 100644 --- a/src/components/reset-password-check-email/reset-password-check-email-controller.ts +++ b/src/components/reset-password-check-email/reset-password-check-email-controller.ts @@ -15,6 +15,23 @@ import { isLocked } from "../../utils/lock-helper"; const TEMPLATE_NAME = "reset-password-check-email/index.njk"; +const oplValues = { + resetPasswordResendEmail: { + default: { + contentId: "b78d016b-0f2c-4599-9c2f-76b3a6397997", + }, + csrf: { + contentId: "e48886d5-7be8-424d-8471-d9a9bf49d1b7", + }, + requestCode: { + contentId: "8cbc57f9-28df-4279-a001-cc62a9dd3415", + }, + }, + resetPasswordResendCode: { + contentId: "7b663466-8001-436f-b10b-e6ac581d39aa", + }, +}; + export function resetPasswordCheckEmailGet( service: ResetPasswordCheckEmailServiceInterface = resetPasswordCheckEmailService() ): ExpressRouteFunc { @@ -56,6 +73,15 @@ export function resetPasswordCheckEmailGet( req.session.user.redactedPhoneNumber = result.data.phoneNumberLastThree; } + const getContentId = (url: Request) => { + if (url.originalUrl.includes("csrf")) { + return oplValues.resetPasswordResendEmail.csrf.contentId; + } else if (url.originalUrl.includes("requestcode")) { + return oplValues.resetPasswordResendEmail.requestCode.contentId; + } + return oplValues.resetPasswordResendEmail.default.contentId; + }; + if (!requestCode || result.success) { const support2FABeforePasswordResetFlag = support2FABeforePasswordReset(); const isForcedPasswordResetJourney = @@ -64,6 +90,9 @@ export function resetPasswordCheckEmailGet( support2FABeforePasswordResetFlag, isForcedPasswordResetJourney, email, + currentPath: req.originalUrl, + contentId: getContentId(req), + taxonomyLevel2: "account recovery", }); } @@ -119,6 +148,8 @@ export function resetPasswordResendCodeGet(req: Request, res: Response): void { { email: req.session.user.email, support2hrLockout: support2hrLockout(), + contentId: oplValues.resetPasswordResendCode.contentId, + taxonomyLevel2: "account recovery", } ); } diff --git a/src/components/reset-password-check-email/tests/reset-password-check-email-controller.test.ts b/src/components/reset-password-check-email/tests/reset-password-check-email-controller.test.ts index d2f254801..b48bedebc 100644 --- a/src/components/reset-password-check-email/tests/reset-password-check-email-controller.test.ts +++ b/src/components/reset-password-check-email/tests/reset-password-check-email-controller.test.ts @@ -172,6 +172,8 @@ describe("reset password check email controller", () => { { email: req.session.user.email, support2hrLockout: false, + contentId: "7b663466-8001-436f-b10b-e6ac581d39aa", + taxonomyLevel2: "account recovery", } ); }); diff --git a/src/components/reset-password/index.njk b/src/components/reset-password/index.njk index 2aee8ef42..636e186d6 100644 --- a/src/components/reset-password/index.njk +++ b/src/components/reset-password/index.njk @@ -67,6 +67,7 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "account recovery", contentId: "c8520c6c-9f09-4edf-8c99-7123a3991cfc", loggedInStatus: false, dynamic: false })}} {% endblock %} {% block scripts %} diff --git a/src/components/reset-password/reset-password-controller.ts b/src/components/reset-password/reset-password-controller.ts index 3b27e005f..4dd8be963 100644 --- a/src/components/reset-password/reset-password-controller.ts +++ b/src/components/reset-password/reset-password-controller.ts @@ -23,13 +23,25 @@ import { support2FABeforePasswordReset } from "../../config"; const resetPasswordTemplate = "reset-password/index.njk"; +const oplValues = { + accountRecovery: { + contentId: "a95d02f6-6445-4112-b0c2-7a6d4f804b99", + taxonomyLevel2: "account recovery", + }, +}; + export function resetPasswordGet(req: Request, res: Response): void { - res.render(resetPasswordTemplate); + res.render(resetPasswordTemplate, { + contentId: oplValues.accountRecovery.contentId, + taxonomyLevel2: oplValues.accountRecovery.taxonomyLevel2, + }); } export function resetPasswordRequiredGet(req: Request, res: Response): void { res.render(resetPasswordTemplate, { isPasswordChangeRequired: req.session.user.isPasswordChangeRequired, + contentId: oplValues.accountRecovery.contentId, + taxonomyLevel2: oplValues.accountRecovery.taxonomyLevel2, }); } diff --git a/src/components/reset-password/tests/reset-password-controller.test.ts b/src/components/reset-password/tests/reset-password-controller.test.ts index 9928c2da0..e44cc2ac6 100644 --- a/src/components/reset-password/tests/reset-password-controller.test.ts +++ b/src/components/reset-password/tests/reset-password-controller.test.ts @@ -71,6 +71,8 @@ describe("reset password controller (in 6 digit code flow)", () => { expect(res.render).to.have.calledWith("reset-password/index.njk", { isPasswordChangeRequired: true, + contentId: "a95d02f6-6445-4112-b0c2-7a6d4f804b99", + taxonomyLevel2: "account recovery", }); }); }); diff --git a/src/components/security-code-error/index-security-code-entered-exceeded.njk b/src/components/security-code-error/index-security-code-entered-exceeded.njk index 34fc84fd0..cd128e98c 100644 --- a/src/components/security-code-error/index-security-code-entered-exceeded.njk +++ b/src/components/security-code-error/index-security-code-entered-exceeded.njk @@ -45,4 +45,6 @@

{% endif %} {% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/security-code-error/index-too-many-requests.njk b/src/components/security-code-error/index-too-many-requests.njk index a7813d404..3f3b0c76a 100644 --- a/src/components/security-code-error/index-too-many-requests.njk +++ b/src/components/security-code-error/index-too-many-requests.njk @@ -25,4 +25,6 @@

{% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/security-code-error/index-wait.njk b/src/components/security-code-error/index-wait.njk index fc3f67b8b..0fd84d4d4 100644 --- a/src/components/security-code-error/index-wait.njk +++ b/src/components/security-code-error/index-wait.njk @@ -1,5 +1,6 @@ {% extends "common/layout/base.njk" %} {% from "govuk/components/button/macro.njk" import govukButton %} + {% if support2hrLockout %} {% if isAccountCreationJourney %} {% set pageTitleName = 'pages.securityCodeWaitToRequest.title_create' | translate %} @@ -31,4 +32,6 @@ {{'pages.securityCodeWaitToRequest.info_old.paragraph2End' | translate}}

{% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/security-code-error/index.njk b/src/components/security-code-error/index.njk index 0d59a948b..0831aa09c 100644 --- a/src/components/security-code-error/index.njk +++ b/src/components/security-code-error/index.njk @@ -2,6 +2,7 @@ {% from "govuk/components/button/macro.njk" import govukButton %} {% from "govuk/components/inset-text/macro.njk" import govukInsetText %} {% set pageTitleName = 'pages.securityCodeInvalid.title' | translate %} + {% block content %} {% if show2HrScreen %}

{{'pages.securityCodeInvalid.header' | translate }}

@@ -34,4 +35,6 @@ {% endif %}

{% endif %} + +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/security-code-error/security-code-error-controller.ts b/src/components/security-code-error/security-code-error-controller.ts index 8f8fd17f7..0daf37a4b 100644 --- a/src/components/security-code-error/security-code-error-controller.ts +++ b/src/components/security-code-error/security-code-error-controller.ts @@ -16,7 +16,23 @@ import { import { UserSession } from "../../types"; import { isLocked, timestampNMinutesFromNow } from "../../utils/lock-helper"; +const oplValues = { + mfaMaxRetries: { + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + }, + mfaBlocked: { + contentId: "1277915f-ce6e-4a06-89a0-e3458f95631a", + }, + enteredExceeded: { + contentId: "727a0395-cc00-48eb-a411-bfe9d8ac5fc8", + }, + requestedTooManyTimes: { + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + }, +}; + export function securityCodeInvalidGet(req: Request, res: Response): void { + const { isAccountCreationJourney } = req.session.user; const actionType = req.query.actionType as SecurityCodeErrorType; const isEmailCode = [ SecurityCodeErrorType.EmailMaxRetries, @@ -40,6 +56,8 @@ export function securityCodeInvalidGet(req: Request, res: Response): void { isAuthApp: isAuthApp(req.query.actionType as SecurityCodeErrorType), isBlocked: actionType !== SecurityCodeErrorType.EmailMaxRetries, show2HrScreen: show2HrScreen, + contentId: oplValues.mfaMaxRetries.contentId, + taxonomyLevel2: isAccountCreationJourney ? "create account" : "sign in", }); } @@ -53,6 +71,8 @@ export function securityCodeTriesExceededGet( ); } + const { isAccountCreationJourney } = req.session.user; + return res.render("security-code-error/index-too-many-requests.njk", { newCodeLink: getNewCodePath( req.query.actionType as SecurityCodeErrorType, @@ -61,6 +81,8 @@ export function securityCodeTriesExceededGet( isResendCodeRequest: req.query.isResendCodeRequest, isAccountCreationJourney: req.session.user?.isAccountCreationJourney, support2hrLockout: support2hrLockout(), + contentId: oplValues.requestedTooManyTimes.contentId, + taxonomyLevel2: isAccountCreationJourney ? "create account" : "sign in", }); } @@ -68,9 +90,13 @@ export function securityCodeCannotRequestCodeGet( req: Request, res: Response ): void { + const { isAccountCreationJourney } = req.session.user; + res.render("security-code-error/index-too-many-requests.njk", { newCodeLink: getNewCodePath(req.query.actionType as SecurityCodeErrorType), support2hrLockout: support2hrLockout(), + contentId: oplValues.mfaBlocked.contentId, + taxonomyLevel2: isAccountCreationJourney ? "create account" : "sign in", }); } @@ -78,11 +104,15 @@ export function securityCodeEnteredExceededGet( req: Request, res: Response ): void { + const { isAccountCreationJourney } = req.session.user; + res.render("security-code-error/index-security-code-entered-exceeded.njk", { newCodeLink: isAuthApp(req.query.actionType as SecurityCodeErrorType) ? PATH_NAMES.ENTER_AUTHENTICATOR_APP_CODE : PATH_NAMES.RESEND_MFA_CODE, isAuthApp: isAuthApp(req.query.actionType as SecurityCodeErrorType), + contentId: oplValues.mfaMaxRetries.contentId, + taxonomyLevel2: isAccountCreationJourney ? "create account" : "sign in", }); } diff --git a/src/components/security-code-error/tests/security-code-error-controller.test.ts b/src/components/security-code-error/tests/security-code-error-controller.test.ts index 8fbf60ad2..fcdbfde3d 100644 --- a/src/components/security-code-error/tests/security-code-error-controller.test.ts +++ b/src/components/security-code-error/tests/security-code-error-controller.test.ts @@ -46,6 +46,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: false, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", }, }, { @@ -59,6 +61,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", }, }, { @@ -72,6 +76,8 @@ describe("security code controller", () => { isAuthApp: true, isBlocked: true, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", }, }, { @@ -85,6 +91,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", }, }, ].forEach(({ actionType, expectedRenderOptions }) => { @@ -110,6 +118,8 @@ describe("security code controller", () => { actionType: SecurityCodeErrorType.EmailMaxCodesSent, newCodeLink: PATH_NAMES.SECURITY_CODE_CHECK_TIME_LIMIT, isAccountCreationJourney: undefined, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", }, { actionType: SecurityCodeErrorType.MfaMaxRetries, @@ -119,11 +129,15 @@ describe("security code controller", () => { SecurityCodeErrorType.MfaMaxRetries ), isAccountCreationJourney: undefined, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", }, { actionType: SecurityCodeErrorType.OtpMaxCodesSent, newCodeLink: PATH_NAMES.CREATE_ACCOUNT_ENTER_PHONE_NUMBER, isAccountCreationJourney: undefined, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", }, { actionType: SecurityCodeErrorType.OtpMaxRetries, @@ -133,6 +147,8 @@ describe("security code controller", () => { "true" ), isAccountCreationJourney: true, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "create account", }, ]; @@ -151,6 +167,8 @@ describe("security code controller", () => { isResendCodeRequest: undefined, isAccountCreationJourney: params.isAccountCreationJourney, support2hrLockout: false, + contentId: params.contentId, + taxonomyLevel2: params.taxonomyLevel2, } ); }); @@ -162,14 +180,20 @@ describe("security code controller", () => { { actionType: SecurityCodeErrorType.OtpBlocked, expectedCodeLink: PATH_NAMES.CREATE_ACCOUNT_ENTER_PHONE_NUMBER, + contentId: "1277915f-ce6e-4a06-89a0-e3458f95631a", + taxonomyLevel2: "sign in", }, { actionType: SecurityCodeErrorType.MfaBlocked, expectedCodeLink: PATH_NAMES.RESEND_MFA_CODE, + contentId: "1277915f-ce6e-4a06-89a0-e3458f95631a", + taxonomyLevel2: "sign in", }, { actionType: SecurityCodeErrorType.EmailBlocked, expectedCodeLink: PATH_NAMES.SECURITY_CODE_CHECK_TIME_LIMIT, + contentId: "1277915f-ce6e-4a06-89a0-e3458f95631a", + taxonomyLevel2: "sign in", }, ]; @@ -184,6 +208,8 @@ describe("security code controller", () => { { newCodeLink: params.expectedCodeLink, support2hrLockout: false, + contentId: params.contentId, + taxonomyLevel2: params.taxonomyLevel2, } ); }); @@ -198,7 +224,12 @@ describe("security code controller", () => { expect(res.render).to.have.calledWith( "security-code-error/index-security-code-entered-exceeded.njk", - { newCodeLink: PATH_NAMES.RESEND_MFA_CODE, isAuthApp: false } + { + newCodeLink: PATH_NAMES.RESEND_MFA_CODE, + isAuthApp: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", + } ); }); @@ -212,6 +243,8 @@ describe("security code controller", () => { { newCodeLink: PATH_NAMES.ENTER_AUTHENTICATOR_APP_CODE, isAuthApp: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); }); @@ -257,6 +290,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: false, show2HrScreen: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); } @@ -282,6 +317,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: false, show2HrScreen: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); } @@ -320,6 +357,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: params.isBlocked, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "create account", } ); }); @@ -344,6 +383,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); expect(req.session.user.wrongCodeEnteredLock).to.eq( @@ -372,6 +413,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "create account", } ); expect(req.session.user.wrongCodeEnteredLock).to.eq( @@ -400,6 +443,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: false, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); expect(req.session.user.wrongCodeEnteredLock).to.eq( @@ -429,6 +474,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); expect(req.session.user.wrongCodeEnteredAccountRecoveryLock).to.eq( @@ -457,6 +504,8 @@ describe("security code controller", () => { isAuthApp: false, isBlocked: true, show2HrScreen: true, + contentId: "fdbcdd69-a2d5-4aee-97f2-d65d8f307dc5", + taxonomyLevel2: "sign in", } ); expect(req.session.user.wrongCodeEnteredPasswordResetLock).to.eq( @@ -529,6 +578,8 @@ describe("security code controller", () => { isResendCodeRequest: undefined, isAccountCreationJourney: undefined, support2hrLockout: true, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", } ); expect(req.session.user.codeRequestLock).to.eq( @@ -556,6 +607,8 @@ describe("security code controller", () => { isResendCodeRequest: undefined, isAccountCreationJourney: undefined, support2hrLockout: true, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", } ); } @@ -576,6 +629,8 @@ describe("security code controller", () => { isResendCodeRequest: undefined, isAccountCreationJourney: undefined, support2hrLockout: true, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "sign in", } ); } @@ -600,6 +655,8 @@ describe("security code controller", () => { isResendCodeRequest: undefined, isAccountCreationJourney: true, support2hrLockout: true, + contentId: "445409a8-2aaf-47fc-82a9-b277eca4601d", + taxonomyLevel2: "create account", } ); } diff --git a/src/components/select-mfa-options/index.njk b/src/components/select-mfa-options/index.njk index 18e699d29..979c25b50 100644 --- a/src/components/select-mfa-options/index.njk +++ b/src/components/select-mfa-options/index.njk @@ -76,4 +76,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/select-mfa-options/select-mfa-options-controller.ts b/src/components/select-mfa-options/select-mfa-options-controller.ts index f08df8c68..f21d0e80f 100644 --- a/src/components/select-mfa-options/select-mfa-options-controller.ts +++ b/src/components/select-mfa-options/select-mfa-options-controller.ts @@ -4,15 +4,35 @@ import { USER_JOURNEY_EVENTS } from "../common/state-machine/state-machine"; import { generateMfaSecret } from "../../utils/mfa"; import { MFA_METHOD_TYPE } from "../../app.constants"; +const oplValues = { + createAccount: { + contentId: "95e26313-bc2f-49bc-bc62-fd715476c1d9", + taxonomyLevel2: "create account", + }, + accountRecovery: { + contentId: "e768e27b-1c4d-48ba-8bcf-4c40274a6441", + taxonomyLevel2: "account recovery", + }, +}; + export function getSecurityCodesGet(req: Request, res: Response): void { req.session.user.isAccountCreationJourney = !req.session.user.isAccountRecoveryJourney || req.session.user.isAccountPartCreated; + const isAccountRecoveryJourney = req.session.user.isAccountRecoveryJourney; + res.render("select-mfa-options/index.njk", { isAccountPartCreated: req.session.user.isAccountPartCreated, isAccountRecoveryJourney: req.session.user.isAccountRecoveryJourney, selectedMfaOption: req.session.user.selectedMfaOption, + + contentId: isAccountRecoveryJourney + ? oplValues.accountRecovery.contentId + : oplValues.createAccount.contentId, + taxonomyLevel2: isAccountRecoveryJourney + ? oplValues.accountRecovery.taxonomyLevel2 + : oplValues.createAccount.taxonomyLevel2, }); } diff --git a/src/components/setup-authenticator-app/index.njk b/src/components/setup-authenticator-app/index.njk index ffb3a63a4..555551b49 100644 --- a/src/components/setup-authenticator-app/index.njk +++ b/src/components/setup-authenticator-app/index.njk @@ -84,4 +84,5 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/setup-authenticator-app/setup-authenticator-app-controller.ts b/src/components/setup-authenticator-app/setup-authenticator-app-controller.ts index 1c2a57fc8..b23e07d69 100644 --- a/src/components/setup-authenticator-app/setup-authenticator-app-controller.ts +++ b/src/components/setup-authenticator-app/setup-authenticator-app-controller.ts @@ -24,6 +24,17 @@ import { getJourneyTypeFromUserSession } from "../common/journey/journey"; const TEMPLATE = "setup-authenticator-app/index.njk"; +const oplValues = { + createAccount: { + contentId: "5bc82db9-2012-44bf-9a7d-34d1d22fb035", + taxonomyLevel2: "create account", + }, + accountRecovery: { + contentId: "124051ef-673a-4eda-b585-96d9d711f545", + taxonomyLevel2: "account recovery", + }, +}; + export async function setupAuthenticatorAppGet( req: Request, res: Response @@ -35,12 +46,22 @@ export async function setupAuthenticatorAppGet( ); req.session.user.authAppQrCodeUrl = await QRCode.toDataURL(qrCodeText); + req.session.user.isAccountCreationJourney = + !req.session.user.isAccountRecoveryJourney; + + const isAccountRecoveryJourney = req.session.user.isAccountRecoveryJourney; res.render(TEMPLATE, { qrCode: req.session.user.authAppQrCodeUrl, secretKeyFragmentArray: splitSecretKeyIntoFragments( req.session.user.authAppSecret ), + contentId: isAccountRecoveryJourney + ? oplValues.accountRecovery.contentId + : oplValues.createAccount.contentId, + taxonomyLevel2: isAccountRecoveryJourney + ? oplValues.accountRecovery.taxonomyLevel2 + : oplValues.createAccount.taxonomyLevel2, }); } diff --git a/src/components/share-info/index.njk b/src/components/share-info/index.njk index 40b8f5020..505570cf5 100644 --- a/src/components/share-info/index.njk +++ b/src/components/share-info/index.njk @@ -61,4 +61,6 @@ +{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/components/sign-in-or-create/index.njk b/src/components/sign-in-or-create/index.njk index b5a6add28..356250cc1 100644 --- a/src/components/sign-in-or-create/index.njk +++ b/src/components/sign-in-or-create/index.njk @@ -70,4 +70,5 @@

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "Home", contentId: "9cd55996-3f12-4e79-adf3-0ec3c4faf7ce", loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/signed-out/index.njk b/src/components/signed-out/index.njk index f7a00866a..099f59112 100644 --- a/src/components/signed-out/index.njk +++ b/src/components/signed-out/index.njk @@ -2,6 +2,7 @@ {% from "govuk/components/button/macro.njk" import govukButton %} {% set pageTitleName = 'pages.signedOut.title' | translate %} + {% block content %} @@ -13,4 +14,5 @@ {{'pages.signedOut.signInLinkText' | translate}} {{'pages.signedOut.paragraph2' | translate}}

+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: taxonomyLevel2, contentId: contentId, loggedInStatus: false, dynamic: true })}} {% endblock %} diff --git a/src/components/signed-out/signed-out-controller.ts b/src/components/signed-out/signed-out-controller.ts index 9e9c0e2df..dbfab79d3 100644 --- a/src/components/signed-out/signed-out-controller.ts +++ b/src/components/signed-out/signed-out-controller.ts @@ -2,7 +2,15 @@ import { Request, Response } from "express"; import { BadRequestError } from "../../utils/error"; import xss from "xss"; +const oplValues = { + signOut: { + contentId: "83a49745-773f-49f6-aa15-58399e9a856c", + }, +}; + export function signedOutGet(req: Request, res: Response): void { + const { isAccountCreationJourney } = req.session.user; + const errorCode = xss(req.query.error_code as string); const errorDescription = xss(req.query.error_description as string); if (errorCode || errorDescription) { @@ -29,5 +37,7 @@ export function signedOutGet(req: Request, res: Response): void { res.render("signed-out/index.njk", { signinLink: res.locals.accountManagementUrl, + contentId: oplValues.signOut.contentId, + taxonomyLevel2: isAccountCreationJourney ? "create account" : "sign in", }); } diff --git a/src/components/updated-terms-conditions/index.njk b/src/components/updated-terms-conditions/index.njk index 3457318dc..700bf8905 100644 --- a/src/components/updated-terms-conditions/index.njk +++ b/src/components/updated-terms-conditions/index.njk @@ -33,4 +33,6 @@
+{{ga4OnPageLoad({ nonce: scriptNonce, statusCode: "200", englishPageTitle: pageTitleName, taxonomyLevel1: "authentication", taxonomyLevel2: "", contentId: "", loggedInStatus: false, dynamic: false })}} + {% endblock %} diff --git a/src/config.ts b/src/config.ts index 7d5799bbc..f8dc4e9f8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -186,3 +186,19 @@ export function getLanguageToggleEnabled(): boolean { export function getEmailEnteredWrongBlockDurationInMinutes(): number { return Number(process.env.EMAIL_ENTERED_WRONG_BLOCKED_MINUTES) || 15; } + +export function getGA4ContainerId(): string { + return process.env.GOOGLE_ANALYTICS_4_GTM_CONTAINER_ID || ""; +} + +export function getGTMContainerID(): string { + return process.env.UNIVERSAL_ANALYTICS_GTM_CONTAINER_ID || ""; +} + +export function googleAnalytics4Disabled(): string { + return process.env.GA4_DISABLED || "true"; +} + +export function universalAnalyticsDisabled(): string { + return process.env.UA_DISABLED || "false"; +} diff --git a/src/middleware/analytics-middleware.ts b/src/middleware/analytics-middleware.ts new file mode 100644 index 000000000..9d7ce61ec --- /dev/null +++ b/src/middleware/analytics-middleware.ts @@ -0,0 +1,16 @@ +import { NextFunction, Request, Response } from "express"; +import { + getAnalyticsCookieDomain, + getGA4ContainerId, + getGTMContainerID, + googleAnalytics4Disabled, + universalAnalyticsDisabled, +} from "../config"; +export function setGTM(req: Request, res: Response, next: NextFunction): void { + res.locals.ga4ContainerId = getGA4ContainerId(); + res.locals.uaContainerId = getGTMContainerID(); + res.locals.analyticsCookieDomain = getAnalyticsCookieDomain(); + res.locals.isGa4Disabled = googleAnalytics4Disabled(); + res.locals.isUaDisabled = universalAnalyticsDisabled(); + next(); +} diff --git a/src/utils/logger.ts b/src/utils/logger.ts index d1b485073..ae86438c3 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -45,6 +45,7 @@ const loggerMiddleware = PinoHttp({ autoLogging: { ignore: (req) => [ + "/public/scripts/analytics.js", "/public/scripts/cookies.js", "/public/scripts/all.js", "/public/style.css", diff --git a/yarn.lock b/yarn.lock index f1734e837..187129635 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,12 +4,12 @@ "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@aws-crypto/crc32@3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== dependencies: "@aws-crypto/util" "^3.0.0" @@ -18,14 +18,14 @@ "@aws-crypto/ie11-detection@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz" integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== dependencies: tslib "^1.11.1" "@aws-crypto/sha256-browser@3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz" integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== dependencies: "@aws-crypto/ie11-detection" "^3.0.0" @@ -39,7 +39,7 @@ "@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz" integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== dependencies: "@aws-crypto/util" "^3.0.0" @@ -48,14 +48,14 @@ "@aws-crypto/supports-web-crypto@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz" integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== dependencies: tslib "^1.11.1" "@aws-crypto/util@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== dependencies: "@aws-sdk/types" "^3.222.0" @@ -64,7 +64,7 @@ "@aws-sdk/client-kms@^3.366.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.370.0.tgz#392c671cfe1d6ef869fce6452b01c60014549b31" + resolved "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.370.0.tgz" integrity sha512-5nx9rzVrgdd0FC+SJm5iWX8oJo5AJOkDW/jjgWAM/+R4tWJy69ubhfyfMmUjQ97RjYKfDRqmAE/9aeOT+H6Vtg== dependencies: "@aws-crypto/sha256-browser" "3.0.0" @@ -106,7 +106,7 @@ "@aws-sdk/client-sso-oidc@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz#db03c04cb6a23888dc60016eb67505a41ede410b" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz" integrity sha512-jAYOO74lmVXylQylqkPrjLzxvUnMKw476JCUTvCO6Q8nv3LzCWd76Ihgv/m9Q4M2Tbqi1iP2roVK5bstsXzEjA== dependencies: "@aws-crypto/sha256-browser" "3.0.0" @@ -145,7 +145,7 @@ "@aws-sdk/client-sso@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz#68aea97ecb2e5e6c817dfd3a1dd9fa4e09ff6e1c" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz" integrity sha512-0Ty1iHuzNxMQtN7nahgkZr4Wcu1XvqGfrQniiGdKKif9jG/4elxsQPiydRuQpFqN6b+bg7wPP7crFP1uTxx2KQ== dependencies: "@aws-crypto/sha256-browser" "3.0.0" @@ -184,7 +184,7 @@ "@aws-sdk/client-sts@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz#65879fa35b396035dcab446c782056ef768f48af" + resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz" integrity sha512-utFxOPWIzbN+3kc415Je2o4J72hOLNhgR2Gt5EnRSggC3yOnkC4GzauxG8n7n5gZGBX45eyubHyPOXLOIyoqQA== dependencies: "@aws-crypto/sha256-browser" "3.0.0" @@ -227,7 +227,7 @@ "@aws-sdk/credential-provider-env@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz#edd507a88b36b967da048255f4a478ad92d1c5aa" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz" integrity sha512-raR3yP/4GGbKFRPP5hUBNkEmTnzxI9mEc2vJAJrcv4G4J4i/UP6ELiLInQ5eO2/VcV/CeKGZA3t7d1tsJ+jhCg== dependencies: "@aws-sdk/types" "3.370.0" @@ -237,7 +237,7 @@ "@aws-sdk/credential-provider-ini@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz#4e569b8054b4fba2f0a0a7fa88af84b1f8d78c0b" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz" integrity sha512-eJyapFKa4NrC9RfTgxlXnXfS9InG/QMEUPPVL+VhG7YS6nKqetC1digOYgivnEeu+XSKE0DJ7uZuXujN2Y7VAQ== dependencies: "@aws-sdk/credential-provider-env" "3.370.0" @@ -253,7 +253,7 @@ "@aws-sdk/credential-provider-node@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz#74605644ccbd9e8237223318a7955f4ab2ff0d86" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz" integrity sha512-gkFiotBFKE4Fcn8CzQnMeab9TAR06FEAD02T4ZRYW1xGrBJOowmje9dKqdwQFHSPgnWAP+8HoTA8iwbhTLvjNA== dependencies: "@aws-sdk/credential-provider-env" "3.370.0" @@ -270,7 +270,7 @@ "@aws-sdk/credential-provider-process@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz#f7b94d2ccfda3b067cb23ea832b10c692c831855" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz" integrity sha512-0BKFFZmUO779Xdw3u7wWnoWhYA4zygxJbgGVSyjkOGBvdkbPSTTcdwT1KFkaQy2kOXYeZPl+usVVRXs+ph4ejg== dependencies: "@aws-sdk/types" "3.370.0" @@ -281,7 +281,7 @@ "@aws-sdk/credential-provider-sso@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz#4c57f93d73f198d7e1e53fbfcdf72c053bc9c682" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz" integrity sha512-PFroYm5hcPSfC/jkZnCI34QFL3I7WVKveVk6/F3fud/cnP8hp6YjA9NiTNbqdFSzsyoiN/+e5fZgNKih8vVPTA== dependencies: "@aws-sdk/client-sso" "3.370.0" @@ -294,7 +294,7 @@ "@aws-sdk/credential-provider-web-identity@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz#c5831bb656bea1fe3b300e495e19a33bc90f4d84" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz" integrity sha512-CFaBMLRudwhjv1sDzybNV93IaT85IwS+L8Wq6VRMa0mro1q9rrWsIZO811eF+k0NEPfgU1dLH+8Vc2qhw4SARQ== dependencies: "@aws-sdk/types" "3.370.0" @@ -304,7 +304,7 @@ "@aws-sdk/middleware-host-header@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz#645472416efd16b22a66b0aa1d52f48cf5699feb" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz" integrity sha512-CPXOm/TnOFC7KyXcJglICC7OiA7Kj6mT3ChvEijr56TFOueNHvJdV4aNIFEQy0vGHOWtY12qOWLNto/wYR1BAQ== dependencies: "@aws-sdk/types" "3.370.0" @@ -314,7 +314,7 @@ "@aws-sdk/middleware-logger@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz#c9f694d7e1dd47b5e6e8eab94793fc1e272b1e26" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz" integrity sha512-cQMq9SaZ/ORmTJPCT6VzMML7OxFdQzNkhMAgKpTDl+tdPWynlHF29E5xGoSzROnThHlQPCjogU0NZ8AxI0SWPA== dependencies: "@aws-sdk/types" "3.370.0" @@ -323,7 +323,7 @@ "@aws-sdk/middleware-recursion-detection@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz#e5e8fd1d2ff1ade91135295dabcaa81c311ce00b" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz" integrity sha512-L7ZF/w0lAAY/GK1khT8VdoU0XB7nWHk51rl/ecAg64J70dHnMOAg8n+5FZ9fBu/xH1FwUlHOkwlodJOgzLJjtg== dependencies: "@aws-sdk/types" "3.370.0" @@ -333,7 +333,7 @@ "@aws-sdk/middleware-sdk-sts@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz#0599a624fe5cabe75cd7d9e7420927b102356fa2" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz" integrity sha512-ykbsoVy0AJtVbuhAlTAMcaz/tCE3pT8nAp0L7CQQxSoanRCvOux7au0KwMIQVhxgnYid4dWVF6d00SkqU5MXRA== dependencies: "@aws-sdk/middleware-signing" "3.370.0" @@ -343,7 +343,7 @@ "@aws-sdk/middleware-signing@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz#c094026251faa17a24f61630d56152f7b073e6cf" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz" integrity sha512-Dwr/RTCWOXdm394wCwICGT2VNOTMRe4IGPsBRJAsM24pm+EEqQzSS3Xu/U/zF4exuxqpMta4wec4QpSarPNTxA== dependencies: "@aws-sdk/types" "3.370.0" @@ -356,7 +356,7 @@ "@aws-sdk/middleware-user-agent@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz#a2bf71baf6407654811a02e4d276a2eec3996fdb" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz" integrity sha512-2+3SB6MtMAq1+gVXhw0Y3ONXuljorh6ijnxgTpv+uQnBW5jHCUiAS8WDYiDEm7i9euJPbvJfM8WUrSMDMU6Cog== dependencies: "@aws-sdk/types" "3.370.0" @@ -367,7 +367,7 @@ "@aws-sdk/token-providers@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz#e5229f2d116887c90ec103e024583be05c1f506c" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz" integrity sha512-EyR2ZYr+lJeRiZU2/eLR+mlYU9RXLQvNyGFSAekJKgN13Rpq/h0syzXVFLP/RSod/oZenh/fhVZ2HwlZxuGBtQ== dependencies: "@aws-sdk/client-sso-oidc" "3.370.0" @@ -379,7 +379,7 @@ "@aws-sdk/types@3.370.0", "@aws-sdk/types@^3.222.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.370.0.tgz#79e0e4927529c957b5c5c2a00f7590a76784a5e4" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz" integrity sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ== dependencies: "@smithy/types" "^1.1.0" @@ -387,7 +387,7 @@ "@aws-sdk/util-endpoints@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz#bf1f4653c3afc89d4e79aa4895dd3dffbb56c930" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz" integrity sha512-5ltVAnM79nRlywwzZN5i8Jp4tk245OCGkKwwXbnDU+gq7zT3CIOsct1wNZvmpfZEPGt/bv7/NyRcjP+7XNsX/g== dependencies: "@aws-sdk/types" "3.370.0" @@ -395,14 +395,14 @@ "@aws-sdk/util-locate-window@^3.0.0": version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz" integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w== dependencies: tslib "^2.5.0" "@aws-sdk/util-user-agent-browser@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz#df144f5f1a65578842b79d49555c754a531d85f0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz" integrity sha512-028LxYZMQ0DANKhW+AKFQslkScZUeYlPmSphrCIXgdIItRZh6ZJHGzE7J/jDsEntZOrZJsjI4z0zZ5W2idj04w== dependencies: "@aws-sdk/types" "3.370.0" @@ -412,7 +412,7 @@ "@aws-sdk/util-user-agent-node@3.370.0": version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz#96d8420b42cbebd498de8b94886340d11c97a34b" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz" integrity sha512-33vxZUp8vxTT/DGYIR3PivQm07sSRGWI+4fCv63Rt7Q++fO24E0kQtmVAlikRY810I10poD6rwILVtITtFSzkg== dependencies: "@aws-sdk/types" "3.370.0" @@ -422,7 +422,7 @@ "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== dependencies: tslib "^2.3.1" @@ -436,7 +436,7 @@ "@babel/code-frame@^7.22.13": version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: "@babel/highlight" "^7.22.13" @@ -479,7 +479,7 @@ "@babel/generator@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== dependencies: "@babel/types" "^7.23.0" @@ -499,12 +499,12 @@ "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" @@ -512,7 +512,7 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" @@ -578,14 +578,14 @@ "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== "@babel/helper-validator-identifier@^7.15.7": @@ -595,7 +595,7 @@ "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.14.5": @@ -623,7 +623,7 @@ "@babel/highlight@^7.22.13": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: "@babel/helper-validator-identifier" "^7.22.20" @@ -637,7 +637,7 @@ "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== "@babel/runtime@^7.12.0": @@ -665,7 +665,7 @@ "@babel/template@^7.22.15": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: "@babel/code-frame" "^7.22.13" @@ -674,7 +674,7 @@ "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" @@ -698,7 +698,7 @@ "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: "@babel/helper-string-parser" "^7.22.5" @@ -719,19 +719,19 @@ "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint/eslintrc@^2.1.4": version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" @@ -746,9 +746,14 @@ "@eslint/js@8.57.0": version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@govuk-one-login/frontend-analytics@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@govuk-one-login/frontend-analytics/-/frontend-analytics-1.0.3.tgz#32da13a67f8804b96a648d53f21adf1b00ca3691" + integrity sha512-V0vH3OS5rz2Oj8IkOmKkl34FYA3liV8FaJzYVhVBn/hVjZD0cOaGhinunkdcgei2R9JJXiiU0JlEKDxPoYNdRQ== + "@govuk-one-login/frontend-language-toggle@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@govuk-one-login/frontend-language-toggle/-/frontend-language-toggle-1.1.0.tgz#d1a55f39aaae0fb65ed891b5e6cb4cf8cd6265ce" @@ -764,7 +769,7 @@ "@humanwhocodes/config-array@^0.11.14": version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: "@humanwhocodes/object-schema" "^2.0.2" @@ -773,12 +778,12 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@istanbuljs/load-nyc-config@^1.0.0": @@ -799,7 +804,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -808,22 +813,22 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -899,12 +904,12 @@ "@redis/bloom@1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" + resolved "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz" integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== "@redis/client@1.5.14": version "1.5.14" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.14.tgz#1107893464d092f140d77c468b018a6ed306a180" + resolved "https://registry.npmjs.org/@redis/client/-/client-1.5.14.tgz" integrity sha512-YGn0GqsRBFUQxklhY7v562VMOP0DcmlrHHs3IV1mFE3cbxe31IITUkqhBcIhVSI/2JqtWAJXg5mjV4aU+zD0HA== dependencies: cluster-key-slot "1.1.2" @@ -913,22 +918,22 @@ "@redis/graph@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" + resolved "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz" integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== "@redis/json@1.0.6": version "1.0.6" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e" + resolved "https://registry.npmjs.org/@redis/json/-/json-1.0.6.tgz" integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw== "@redis/search@1.1.6": version "1.1.6" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756" + resolved "https://registry.npmjs.org/@redis/search/-/search-1.1.6.tgz" integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw== "@redis/time-series@1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" + resolved "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.5.tgz" integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3": @@ -968,7 +973,7 @@ "@smithy/abort-controller@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-1.0.2.tgz#74caac052ecea15c5460438272ad8d43a6ccbc53" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.0.2.tgz" integrity sha512-tb2h0b+JvMee+eAxTmhnyqyNk51UXIK949HnE14lFeezKsVJTB30maan+CO2IMwnig2wVYQH84B5qk6ylmKCuA== dependencies: "@smithy/types" "^1.1.1" @@ -976,7 +981,7 @@ "@smithy/config-resolver@^1.0.1", "@smithy/config-resolver@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-1.0.2.tgz#d4f556a44292b41b5c067662a4bd5049dea40e35" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.0.2.tgz" integrity sha512-8Bk7CgnVKg1dn5TgnjwPz2ebhxeR7CjGs5yhVYH3S8x0q8yPZZVWwpRIglwXaf5AZBzJlNO1lh+lUhMf2e73zQ== dependencies: "@smithy/types" "^1.1.1" @@ -986,7 +991,7 @@ "@smithy/credential-provider-imds@^1.0.1", "@smithy/credential-provider-imds@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.2.tgz#7aa797c0d95448eb3dccb988b40e62db8989576f" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.2.tgz" integrity sha512-fLjCya+JOu2gPJpCiwSUyoLvT8JdNJmOaTOkKYBZoGf7CzqR6lluSyI+eboZnl/V0xqcfcqBG4tgqCISmWS3/w== dependencies: "@smithy/node-config-provider" "^1.0.2" @@ -997,7 +1002,7 @@ "@smithy/eventstream-codec@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-1.0.2.tgz#06d1b6e2510cb2475a39b3a20b0c75e751917c59" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.0.2.tgz" integrity sha512-eW/XPiLauR1VAgHKxhVvgvHzLROUgTtqat2lgljztbH8uIYWugv7Nz+SgCavB+hWRazv2iYgqrSy74GvxXq/rg== dependencies: "@aws-crypto/crc32" "3.0.0" @@ -1007,7 +1012,7 @@ "@smithy/fetch-http-handler@^1.0.1", "@smithy/fetch-http-handler@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.2.tgz#4186ee6451de22e867f43c05236dcff43eca6e91" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.2.tgz" integrity sha512-kynyofLf62LvR8yYphPPdyHb8fWG3LepFinM/vWUTG2Q1pVpmPCM530ppagp3+q2p+7Ox0UvSqldbKqV/d1BpA== dependencies: "@smithy/protocol-http" "^1.1.1" @@ -1018,7 +1023,7 @@ "@smithy/hash-node@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-1.0.2.tgz#dc65203a348d29e45c493ead3e772e4f7dfb5bc0" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.0.2.tgz" integrity sha512-K6PKhcUNrJXtcesyzhIvNlU7drfIU7u+EMQuGmPw6RQDAg/ufUcfKHz4EcUhFAodUmN+rrejhRG9U6wxjeBOQA== dependencies: "@smithy/types" "^1.1.1" @@ -1028,7 +1033,7 @@ "@smithy/invalid-dependency@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-1.0.2.tgz#0a9d82d1a14e5bdbdc0bd2cef5f457c85a942920" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-1.0.2.tgz" integrity sha512-B1Y3Tsa6dfC+Vvb+BJMhTHOfFieeYzY9jWQSTR1vMwKkxsymD0OIAnEw8rD/RiDj/4E4RPGFdx9Mdgnyd6Bv5Q== dependencies: "@smithy/types" "^1.1.1" @@ -1036,14 +1041,14 @@ "@smithy/is-array-buffer@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-1.0.2.tgz#224702a2364d698f0a36ecb2c240c0c9541ecfb6" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.0.2.tgz" integrity sha512-pkyBnsBRpe+c/6ASavqIMRBdRtZNJEVJOEzhpxZ9JoAXiZYbkfaSMRA/O1dUxGdJ653GHONunnZ4xMo/LJ7utQ== dependencies: tslib "^2.5.0" "@smithy/middleware-content-length@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-1.0.2.tgz#63099f8d01b3419b65e21cfd07b0c2ef47d1f473" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-1.0.2.tgz" integrity sha512-pa1/SgGIrSmnEr2c9Apw7CdU4l/HW0fK3+LKFCPDYJrzM0JdYpqjQzgxi31P00eAkL0EFBccpus/p1n2GF9urw== dependencies: "@smithy/protocol-http" "^1.1.1" @@ -1052,7 +1057,7 @@ "@smithy/middleware-endpoint@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.3.tgz#ff4b1c0a83eb8d8b8d3937f434a95efbbf43e1cd" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.3.tgz" integrity sha512-GsWvTXMFjSgl617PCE2km//kIjjtvMRrR2GAuRDIS9sHiLwmkS46VWaVYy+XE7ubEsEtzZ5yK2e8TKDR6Qr5Lw== dependencies: "@smithy/middleware-serde" "^1.0.2" @@ -1063,7 +1068,7 @@ "@smithy/middleware-retry@^1.0.3": version "1.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-1.0.4.tgz#8e9de0713dac7f7af405477d46bd4525ca7b9ea8" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-1.0.4.tgz" integrity sha512-G7uRXGFL8c3F7APnoIMTtNAHH8vT4F2qVnAWGAZaervjupaUQuRRHYBLYubK0dWzOZz86BtAXKieJ5p+Ni2Xpg== dependencies: "@smithy/protocol-http" "^1.1.1" @@ -1076,7 +1081,7 @@ "@smithy/middleware-serde@^1.0.1", "@smithy/middleware-serde@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-1.0.2.tgz#87b3a0211602ae991d9b756893eb6bf2e3e5f711" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-1.0.2.tgz" integrity sha512-T4PcdMZF4xme6koUNfjmSZ1MLi7eoFeYCtodQNQpBNsS77TuJt1A6kt5kP/qxrTvfZHyFlj0AubACoaUqgzPeg== dependencies: "@smithy/types" "^1.1.1" @@ -1084,14 +1089,14 @@ "@smithy/middleware-stack@^1.0.1", "@smithy/middleware-stack@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-1.0.2.tgz#d241082bf3cb315c749dda57e233039a9aed804e" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.0.2.tgz" integrity sha512-H7/uAQEcmO+eDqweEFMJ5YrIpsBwmrXSP6HIIbtxKJSQpAcMGY7KrR2FZgZBi1FMnSUOh+rQrbOyj5HQmSeUBA== dependencies: tslib "^2.5.0" "@smithy/node-config-provider@^1.0.1", "@smithy/node-config-provider@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-1.0.2.tgz#2d391b96a9e10072e7e0a3698427400f4ef17ec4" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.0.2.tgz" integrity sha512-HU7afWpTToU0wL6KseGDR2zojeyjECQfr8LpjAIeHCYIW7r360ABFf4EaplaJRMVoC3hD9FeltgI3/NtShOqCg== dependencies: "@smithy/property-provider" "^1.0.2" @@ -1101,7 +1106,7 @@ "@smithy/node-http-handler@^1.0.2", "@smithy/node-http-handler@^1.0.3": version "1.0.3" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-1.0.3.tgz#89b556ca2bdcce7a994a9da1ea265094d76d4791" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.0.3.tgz" integrity sha512-PcPUSzTbIb60VCJCiH0PU0E6bwIekttsIEf5Aoo/M0oTfiqsxHTn0Rcij6QoH6qJy6piGKXzLSegspXg5+Kq6g== dependencies: "@smithy/abort-controller" "^1.0.2" @@ -1112,7 +1117,7 @@ "@smithy/property-provider@^1.0.1", "@smithy/property-provider@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-1.0.2.tgz#f99f104cbd6576c9aca9f56cb72819b4a65208e1" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.0.2.tgz" integrity sha512-pXDPyzKX8opzt38B205kDgaxda6LHcTfPvTYQZnwP6BAPp1o9puiCPjeUtkKck7Z6IbpXCPUmUQnzkUzWTA42Q== dependencies: "@smithy/types" "^1.1.1" @@ -1120,7 +1125,7 @@ "@smithy/protocol-http@^1.1.0", "@smithy/protocol-http@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.1.1.tgz#10977cf71631eed4f5ad1845408920238d52cdba" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.1.1.tgz" integrity sha512-mFLFa2sSvlUxm55U7B4YCIsJJIMkA6lHxwwqOaBkral1qxFz97rGffP/mmd4JDuin1EnygiO5eNJGgudiUgmDQ== dependencies: "@smithy/types" "^1.1.1" @@ -1128,7 +1133,7 @@ "@smithy/querystring-builder@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-1.0.2.tgz#ce861f6cbd14792c83aa19b4967a19923bd0706e" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.0.2.tgz" integrity sha512-6P/xANWrtJhMzTPUR87AbXwSBuz1SDHIfL44TFd/GT3hj6rA+IEv7rftEpPjayUiWRocaNnrCPLvmP31mobOyA== dependencies: "@smithy/types" "^1.1.1" @@ -1137,7 +1142,7 @@ "@smithy/querystring-parser@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-1.0.2.tgz#559d09c46b21e6fbda71e95deda4bcd8a46bdecc" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-1.0.2.tgz" integrity sha512-IWxwxjn+KHWRRRB+K2Ngl+plTwo2WSgc2w+DvLy0DQZJh9UGOpw40d6q97/63GBlXIt4TEt5NbcFrO30CKlrsA== dependencies: "@smithy/types" "^1.1.1" @@ -1145,12 +1150,12 @@ "@smithy/service-error-classification@^1.0.3": version "1.0.3" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-1.0.3.tgz#c620c1562610d3351985eb6dd04262ca2657ae67" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.0.3.tgz" integrity sha512-2eglIYqrtcUnuI71yweu7rSfCgt6kVvRVf0C72VUqrd0LrV1M0BM0eYN+nitp2CHPSdmMI96pi+dU9U/UqAMSA== "@smithy/shared-ini-file-loader@^1.0.1", "@smithy/shared-ini-file-loader@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.2.tgz#c6e79991d87925bd18e0adae00c97da6c8ecae1e" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.2.tgz" integrity sha512-bdQj95VN+lCXki+P3EsDyrkpeLn8xDYiOISBGnUG/AGPYJXN8dmp4EhRRR7XOoLoSs8anZHR4UcGEOzFv2jwGw== dependencies: "@smithy/types" "^1.1.1" @@ -1158,7 +1163,7 @@ "@smithy/signature-v4@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-1.0.2.tgz#3a7b10ac66c337b404aa061e5f268f0550729680" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.0.2.tgz" integrity sha512-rpKUhmCuPmpV5dloUkOb9w1oBnJatvKQEjIHGmkjRGZnC3437MTdzWej9TxkagcZ8NRRJavYnEUixzxM1amFig== dependencies: "@smithy/eventstream-codec" "^1.0.2" @@ -1172,7 +1177,7 @@ "@smithy/smithy-client@^1.0.3": version "1.0.4" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-1.0.4.tgz#96d03d123d117a637c679a79bb8eae96e3857bd9" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.0.4.tgz" integrity sha512-gpo0Xl5Nyp9sgymEfpt7oa9P2q/GlM3VmQIdm+FeH0QEdYOQx3OtvwVmBYAMv2FIPWxkMZlsPYRTnEiBTK5TYg== dependencies: "@smithy/middleware-stack" "^1.0.2" @@ -1182,14 +1187,14 @@ "@smithy/types@^1.1.0", "@smithy/types@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.1.1.tgz#949394a22e13e7077471bae0d18c146e5f62c456" + resolved "https://registry.npmjs.org/@smithy/types/-/types-1.1.1.tgz" integrity sha512-tMpkreknl2gRrniHeBtdgQwaOlo39df8RxSrwsHVNIGXULy5XP6KqgScUw2m12D15wnJCKWxVhCX+wbrBW/y7g== dependencies: tslib "^2.5.0" "@smithy/url-parser@^1.0.1", "@smithy/url-parser@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-1.0.2.tgz#fb59be6f2283399443d9e7afe08ebf63b3c266bb" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-1.0.2.tgz" integrity sha512-0JRsDMQe53F6EHRWksdcavKDRjyqp8vrjakg8EcCUOa7PaFRRB1SO/xGZdzSlW1RSTWQDEksFMTCEcVEKmAoqA== dependencies: "@smithy/querystring-parser" "^1.0.2" @@ -1198,7 +1203,7 @@ "@smithy/util-base64@^1.0.1", "@smithy/util-base64@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-1.0.2.tgz#6cdd5a9356dafad3c531123c12cd77d674762da0" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.0.2.tgz" integrity sha512-BCm15WILJ3SL93nusoxvJGMVfAMWHZhdeDZPtpAaskozuexd0eF6szdz4kbXaKp38bFCSenA6bkUHqaE3KK0dA== dependencies: "@smithy/util-buffer-from" "^1.0.2" @@ -1206,21 +1211,21 @@ "@smithy/util-body-length-browser@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.2.tgz#4a9a49497634b5f25ab5ff73f1a8498010b0024a" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.2.tgz" integrity sha512-Xh8L06H2anF5BHjSYTg8hx+Itcbf4SQZnVMl4PIkCOsKtneMJoGjPRLy17lEzfoh/GOaa0QxgCP6lRMQWzNl4w== dependencies: tslib "^2.5.0" "@smithy/util-body-length-node@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-1.0.2.tgz#bc4969022f7d9ffcb239d626d80a85138e986df6" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-1.0.2.tgz" integrity sha512-nXHbZsUtvZeyfL4Ceds9nmy2Uh2AhWXohG4vWHyjSdmT8cXZlJdmJgnH6SJKDjyUecbu+BpKeVvSrA4cWPSOPA== dependencies: tslib "^2.5.0" "@smithy/util-buffer-from@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-1.0.2.tgz#27e19573d721962bd2443f23d4edadb8206b2cb5" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.0.2.tgz" integrity sha512-lHAYIyrBO9RANrPvccnPjU03MJnWZ66wWuC5GjWWQVfsmPwU6m00aakZkzHdUT6tGCkGacXSgArP5wgTgA+oCw== dependencies: "@smithy/is-array-buffer" "^1.0.2" @@ -1228,14 +1233,14 @@ "@smithy/util-config-provider@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-1.0.2.tgz#4d2e867df1cc7b4010d1278bd5767ce1b679dae9" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.0.2.tgz" integrity sha512-HOdmDm+3HUbuYPBABLLHtn8ittuRyy+BSjKOA169H+EMc+IozipvXDydf+gKBRAxUa4dtKQkLraypwppzi+PRw== dependencies: tslib "^2.5.0" "@smithy/util-defaults-mode-browser@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.2.tgz#31ad7b9bce7e38fd57f4a370ee416373b4fbd432" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.2.tgz" integrity sha512-J1u2PO235zxY7dg0+ZqaG96tFg4ehJZ7isGK1pCBEA072qxNPwIpDzUVGnLJkHZvjWEGA8rxIauDtXfB0qxeAg== dependencies: "@smithy/property-provider" "^1.0.2" @@ -1245,7 +1250,7 @@ "@smithy/util-defaults-mode-node@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.2.tgz#b295fe2a18568c1e21a85b6557e2b769452b4d95" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.2.tgz" integrity sha512-9/BN63rlIsFStvI+AvljMh873Xw6bbI6b19b+PVYXyycQ2DDQImWcjnzRlHW7eP65CCUNGQ6otDLNdBQCgMXqg== dependencies: "@smithy/config-resolver" "^1.0.2" @@ -1257,21 +1262,21 @@ "@smithy/util-hex-encoding@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.2.tgz#5b9f2162f2a59b2d2aa39992bd2c7f65b6616ab6" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.2.tgz" integrity sha512-Bxydb5rMJorMV6AuDDMOxro3BMDdIwtbQKHpwvQFASkmr52BnpDsWlxgpJi8Iq7nk1Bt4E40oE1Isy/7ubHGzg== dependencies: tslib "^2.5.0" "@smithy/util-middleware@^1.0.1", "@smithy/util-middleware@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-1.0.2.tgz#c3d4c7a6cd31bde33901e54abd7700c8ca73dab3" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.0.2.tgz" integrity sha512-vtXK7GOR2BoseCX8NCGe9SaiZrm9M2lm/RVexFGyPuafTtry9Vyv7hq/vw8ifd/G/pSJ+msByfJVb1642oQHKw== dependencies: tslib "^2.5.0" "@smithy/util-retry@^1.0.3", "@smithy/util-retry@^1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-1.0.4.tgz#9d95df3884981414163d5f780d38e3529384d9ad" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.0.4.tgz" integrity sha512-RnZPVFvRoqdj2EbroDo3OsnnQU8eQ4AlnZTOGusbYKybH3269CFdrZfZJloe60AQjX7di3J6t/79PjwCLO5Khw== dependencies: "@smithy/service-error-classification" "^1.0.3" @@ -1279,7 +1284,7 @@ "@smithy/util-stream@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-1.0.2.tgz#2d33aa5168e51d1dd7937c32a09c8334d2da44d9" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.0.2.tgz" integrity sha512-qyN2M9QFMTz4UCHi6GnBfLOGYKxQZD01Ga6nzaXFFC51HP/QmArU72e4kY50Z/EtW8binPxspP2TAsGbwy9l3A== dependencies: "@smithy/fetch-http-handler" "^1.0.2" @@ -1293,14 +1298,14 @@ "@smithy/util-uri-escape@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-1.0.2.tgz#c69a5423c9baa7a045a79372320bd40a437ac756" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.0.2.tgz" integrity sha512-k8C0BFNS9HpBMHSgUDnWb1JlCQcFG+PPlVBq9keP4Nfwv6a9Q0yAfASWqUCtzjuMj1hXeLhn/5ADP6JxnID1Pg== dependencies: tslib "^2.5.0" "@smithy/util-utf8@^1.0.1", "@smithy/util-utf8@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-1.0.2.tgz#b34c27b4efbe4f0edb6560b6d4f743088302671f" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.0.2.tgz" integrity sha512-V4cyjKfJlARui0dMBfWJMQAmJzoW77i4N3EjkH/bwnE2Ngbl4tqD2Y0C/xzpzY/J1BdxeCKxAebVFk8aFCaSCw== dependencies: "@smithy/util-buffer-from" "^1.0.2" @@ -1379,14 +1384,14 @@ "@types/csurf@^1.11.2": version "1.11.5" - resolved "https://registry.yarnpkg.com/@types/csurf/-/csurf-1.11.5.tgz#16c3502fb534004a04d9cb8a48f031577528573b" + resolved "https://registry.npmjs.org/@types/csurf/-/csurf-1.11.5.tgz" integrity sha512-5rw87+5YGixyL2W8wblSUl5DSZi5YOlXE6Awwn2ofLvqKr/1LruKffrQipeJKUX44VaxKj8m5es3vfhltJTOoA== dependencies: "@types/express-serve-static-core" "*" "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz" integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" @@ -1403,7 +1408,7 @@ "@types/express@*", "@types/express@^4.17.13": version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" @@ -1420,7 +1425,7 @@ "@types/json-schema@^7.0.12": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mime@^1": @@ -1435,7 +1440,7 @@ "@types/mock-req-res@^1.1.3": version "1.1.6" - resolved "https://registry.yarnpkg.com/@types/mock-req-res/-/mock-req-res-1.1.6.tgz#bd5652a51974ffca0a5a1ea993d9a534d632b768" + resolved "https://registry.npmjs.org/@types/mock-req-res/-/mock-req-res-1.1.6.tgz" integrity sha512-g6R3h/PBYo+jv7e3CVhu+GoNsrmm6lh3wfFTtSoONN7JXDngDqrqoo/SxLeMLFob1UNjddm84UyK/av8qhkcBA== dependencies: "@types/express" "*" @@ -1502,12 +1507,12 @@ "@types/semver@^7.5.0": version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" @@ -1553,7 +1558,7 @@ "@typescript-eslint/eslint-plugin@^7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz#22bb999a8d59893c0ea07923e8a21f9d985ad740" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz" integrity sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w== dependencies: "@eslint-community/regexpp" "^4.5.1" @@ -1570,7 +1575,7 @@ "@typescript-eslint/parser@^7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.0.tgz#b89dab90840f7d2a926bf4c23b519576e8c31970" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.0.tgz" integrity sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w== dependencies: "@typescript-eslint/scope-manager" "7.1.0" @@ -1581,7 +1586,7 @@ "@typescript-eslint/scope-manager@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz" integrity sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A== dependencies: "@typescript-eslint/types" "7.1.0" @@ -1589,7 +1594,7 @@ "@typescript-eslint/type-utils@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz" integrity sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew== dependencies: "@typescript-eslint/typescript-estree" "7.1.0" @@ -1599,12 +1604,12 @@ "@typescript-eslint/types@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.0.tgz" integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== "@typescript-eslint/typescript-estree@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz" integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== dependencies: "@typescript-eslint/types" "7.1.0" @@ -1618,7 +1623,7 @@ "@typescript-eslint/utils@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.0.tgz#710ecda62aff4a3c8140edabf3c5292d31111ddd" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.0.tgz" integrity sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -1631,7 +1636,7 @@ "@typescript-eslint/visitor-keys@7.1.0": version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz" integrity sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA== dependencies: "@typescript-eslint/types" "7.1.0" @@ -1639,7 +1644,7 @@ "@ungap/structured-clone@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== a-sync-waterfall@^1.0.0: @@ -1649,7 +1654,7 @@ a-sync-waterfall@^1.0.0: abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1: @@ -1659,7 +1664,7 @@ abbrev@1: abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" @@ -1674,7 +1679,7 @@ accepts@~1.3.8: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: @@ -1689,7 +1694,7 @@ acorn@^8.4.1: acorn@^8.9.0: version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agent-base@6: @@ -1743,7 +1748,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1810,7 +1815,7 @@ atomic-sleep@^1.0.0: available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1356.0: @@ -1862,7 +1867,7 @@ base64-js@^1.0.2, base64-js@^1.3.1: binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== body-parser@1.20.2: @@ -1890,7 +1895,7 @@ boolbase@^1.0.0: bowser@^2.11.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== brace-expansion@^1.1.7: @@ -1942,7 +1947,7 @@ buffer@4.9.2: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1965,7 +1970,7 @@ caching-transform@^4.0.0: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -2040,7 +2045,7 @@ check-error@^1.0.2: cheerio-select@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== dependencies: boolbase "^1.0.0" @@ -2052,7 +2057,7 @@ cheerio-select@^2.1.0: cheerio@^1.0.0-rc.10: version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== dependencies: cheerio-select "^2.1.0" @@ -2112,7 +2117,7 @@ cliui@^8.0.1: cluster-key-slot@1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== color-convert@^1.9.0: @@ -2193,7 +2198,7 @@ concurrently@^8.2.2: connect-redis@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-7.1.1.tgz#b78f91eb6d7509ae9e819bb362b94ba459072a1d" + resolved "https://registry.npmjs.org/connect-redis/-/connect-redis-7.1.1.tgz" integrity sha512-M+z7alnCJiuzKa8/1qAYdGUXHYfDnLolOGAUjOioB07pP39qxjG+X9ibsud7qUBc4jMV5Mcy3ugGv8eFcgamJQ== content-disposition@0.5.4: @@ -2245,7 +2250,7 @@ cookie@0.6.0: cookiejar@^2.1.4: version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== copyfiles@^2.4.1: @@ -2291,7 +2296,7 @@ csrf@3.1.0: css-select@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" @@ -2302,7 +2307,7 @@ css-select@^5.1.0: css-what@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssfilter@0.0.10: @@ -2312,7 +2317,7 @@ cssfilter@0.0.10: cssstyle@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz" integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== dependencies: rrweb-cssom "^0.6.0" @@ -2329,7 +2334,7 @@ csurf@^1.11.0: data-urls@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz" integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== dependencies: abab "^2.0.6" @@ -2381,7 +2386,7 @@ decamelize@^4.0.0: decimal.js@^10.4.3: version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== deep-eql@^3.0.1: @@ -2462,7 +2467,7 @@ doctrine@^3.0.0: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -2471,7 +2476,7 @@ dom-serializer@^2.0.0: domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^4.0.0: @@ -2483,7 +2488,7 @@ domexception@^4.0.0: domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" @@ -2495,7 +2500,7 @@ dompurify@^2.3.4: domutils@^3.0.1: version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" @@ -2509,7 +2514,7 @@ dotenv@^16.4.1: ecdsa-sig-formatter@^1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" @@ -2548,7 +2553,7 @@ end-of-stream@^1.1.0: entities@^4.2.0, entities@^4.4.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== es6-error@^4.0.1: @@ -2588,14 +2593,14 @@ eslint-plugin-no-only-tests@^3.1.0: eslint-plugin-prettier@^4.0.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -2603,12 +2608,12 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.57.0: version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -2652,7 +2657,7 @@ eslint@^8.57.0: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -2666,7 +2671,7 @@ esprima@^4.0.0: esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -2695,7 +2700,7 @@ etag@~1.8.1: event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@1.1.1: @@ -2705,7 +2710,7 @@ events@1.1.1: events@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== express-session@^1.17.2: @@ -2769,7 +2774,7 @@ express@^4.17.2: fast-copy@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" + resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz" integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: @@ -2784,7 +2789,7 @@ fast-diff@^1.1.2: fast-glob@^3.2.9: version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2815,7 +2820,7 @@ fast-safe-stringify@^2.1.1: fast-xml-parser@4.2.5: version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz" integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== dependencies: strnum "^1.0.5" @@ -2836,7 +2841,7 @@ file-entry-cache@^6.0.1: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" @@ -2865,7 +2870,7 @@ find-cache-dir@^3.2.0: find-up@5.0.0, find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2904,7 +2909,7 @@ follow-redirects@^1.15.6: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" @@ -2928,7 +2933,7 @@ form-data@^4.0.0: formidable@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz" integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== dependencies: dezalgo "^1.0.4" @@ -2963,7 +2968,7 @@ fs.realpath@^1.0.0: fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: @@ -2973,7 +2978,7 @@ function-bind@^1.1.1: generic-pool@3.9.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" + resolved "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz" integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== gensync@^1.0.0-beta.2: @@ -2988,7 +2993,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: get-func-name@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== get-intrinsic@^1.0.2: @@ -3002,7 +3007,7 @@ get-intrinsic@^1.0.2: get-intrinsic@^1.1.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" @@ -3023,7 +3028,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" @@ -3047,14 +3052,14 @@ globals@^11.1.0: globals@^13.19.0: version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -3066,14 +3071,14 @@ globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" govuk-frontend@^4.8.0: version "4.8.0" - resolved "https://registry.yarnpkg.com/govuk-frontend/-/govuk-frontend-4.8.0.tgz#df4e56c762e93aae74fed214bb6be08e13783772" + resolved "https://registry.npmjs.org/govuk-frontend/-/govuk-frontend-4.8.0.tgz" integrity sha512-NOmPJxL8IYq1HSNHYKx9XY2LLTxuwb+IFASiGQO4sgJ8K7AG66SlSeqARrcetevV8zOf+i1z+MbJJ2O7//OxAw== graceful-fs@^4.1.15: @@ -3083,7 +3088,7 @@ graceful-fs@^4.1.15: graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-flag@^3.0.0: @@ -3103,12 +3108,12 @@ has-symbols@^1.0.1: has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" @@ -3140,7 +3145,7 @@ helmet@4.6.0: help-me@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" + resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz" integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== hexoid@^1.0.0: @@ -3162,7 +3167,7 @@ html-escaper@^2.0.0: htmlparser2@^8.0.1: version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" @@ -3203,7 +3208,7 @@ http-proxy-agent@^5.0.0: https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3262,12 +3267,12 @@ ignore-by-default@^1.0.1: ignore@^5.2.0, ignore@^5.2.4: version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immutable@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== import-fresh@^3.2.1: @@ -3308,7 +3313,7 @@ ipaddr.js@1.9.1: is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -3316,19 +3321,19 @@ is-arguments@^1.0.4: is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-callable@^1.1.3: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: @@ -3338,26 +3343,26 @@ is-fullwidth-code-point@^3.0.0: is-generator-function@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^2.1.0: @@ -3377,7 +3382,7 @@ is-stream@^2.0.0: is-typed-array@^1.1.10, is-typed-array@^1.1.3: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -3499,7 +3504,7 @@ js-tokens@^4.0.0: js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -3514,7 +3519,7 @@ js-yaml@^3.13.1: jsdom@^22.1.0: version "22.1.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz" integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== dependencies: abab "^2.0.6" @@ -3563,7 +3568,7 @@ json-stringify-safe@^5.0.1: json5@^2.1.2: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== just-extend@^4.0.2: @@ -3711,7 +3716,7 @@ minimatch@5.0.1: minimatch@9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -3762,7 +3767,7 @@ mocha@10.1.0: mock-req-res@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/mock-req-res/-/mock-req-res-1.2.1.tgz#01ec8b1ad103e73ed287701f0904423b7d53480b" + resolved "https://registry.npmjs.org/mock-req-res/-/mock-req-res-1.2.1.tgz" integrity sha512-UCEI1xvq0pnfyTySAWcWeIJhAoHYdt47EWFUZO+qN7lu1dBjZYFUNzuByEGs1NdQ17Isb2LKpt5/dqq8t10gFQ== ms@2.0.0: @@ -3829,7 +3834,7 @@ node-releases@^2.0.1: nodemon@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz" integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== dependencies: chokidar "^3.5.2" @@ -3860,19 +3865,19 @@ nopt@~1.0.10: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" nunjucks@^3.2.3: version "3.2.4" - resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.4.tgz#f0878eef528ce7b0aa35d67cc6898635fd74649e" + resolved "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz" integrity sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ== dependencies: a-sync-waterfall "^1.0.0" @@ -3881,7 +3886,7 @@ nunjucks@^3.2.3: nwsapi@^2.2.4: version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== nyc@^15.1.0: @@ -3924,7 +3929,7 @@ object-inspect@^1.9.0: on-exit-leak-free@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== on-finished@2.4.1: @@ -3948,7 +3953,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: optionator@^0.9.3: version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: "@aashutoshrathi/word-wrap" "^1.2.3" @@ -4026,7 +4031,7 @@ parent-module@^1.0.0: parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== dependencies: domhandler "^5.0.2" @@ -4034,7 +4039,7 @@ parse5-htmlparser2-tree-adapter@^7.0.0: parse5@^7.0.0, parse5@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" @@ -4088,7 +4093,7 @@ picocolors@^1.0.0: picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomatch@^2.2.3: @@ -4098,7 +4103,7 @@ picomatch@^2.2.3: pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== dependencies: readable-stream "^4.0.0" @@ -4124,7 +4129,7 @@ pino-http@^9.0.0: pino-pretty@^10.3.1: version "10.3.1" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.3.1.tgz#e3285a5265211ac6c7cd5988f9e65bf3371a0ca9" + resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz" integrity sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g== dependencies: colorette "^2.0.7" @@ -4229,7 +4234,7 @@ process-warning@^3.0.0: process@^0.11.10: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== propagate@^2.0.0: @@ -4280,7 +4285,7 @@ punycode@^2.1.0, punycode@^2.1.1: punycode@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qrcode@^1.5.0: @@ -4307,7 +4312,7 @@ querystring@0.2.0: querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: @@ -4349,7 +4354,7 @@ raw-body@2.5.2: readable-stream@^4.0.0: version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== dependencies: abort-controller "^3.0.0" @@ -4383,7 +4388,7 @@ readable-stream@~2.3.6: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -4395,7 +4400,7 @@ real-require@^0.2.0: redis@^4.6.13: version "4.6.13" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.13.tgz#e247267c5f3ba35ab8277b57343d3a56acb2f0a6" + resolved "https://registry.npmjs.org/redis/-/redis-4.6.13.tgz" integrity sha512-MHgkS4B+sPjCXpf+HfdetBwbRz6vCtsceTmw1pHNYJAsYxrfpOP6dz+piJWGos8wqG7qb3vj/Rrc5qOlmInUuA== dependencies: "@redis/bloom" "1.2.0" @@ -4434,7 +4439,7 @@ require-main-filename@^2.0.0: requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: @@ -4466,7 +4471,7 @@ rndm@1.2.0: rrweb-cssom@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz" integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== run-parallel@^1.1.9: @@ -4485,7 +4490,7 @@ rxjs@^7.8.1: safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: @@ -4524,7 +4529,7 @@ sax@>=0.6.0: saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" @@ -4536,12 +4541,12 @@ secure-json-parse@^2.4.0: semver@^6.0.0, semver@^6.3.0: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -4630,7 +4635,7 @@ signal-exit@^3.0.2: simple-update-notifier@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: semver "^7.5.3" @@ -4666,7 +4671,7 @@ sonic-boom@^2.1.0: sonic-boom@^3.0.0: version "3.7.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.7.0.tgz#b4b7b8049a912986f4a92c51d4660b721b11f2f2" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.7.0.tgz" integrity sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg== dependencies: atomic-sleep "^1.0.0" @@ -4680,7 +4685,7 @@ sonic-boom@^3.7.0: "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.5.0: @@ -4777,12 +4782,12 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.1: strnum@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== superagent@^8.1.2: version "8.1.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz" integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== dependencies: component-emitter "^1.3.0" @@ -4798,7 +4803,7 @@ superagent@^8.1.2: supertest@^6.3.4: version "6.3.4" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.3.4.tgz#2145c250570c2ea5d337db3552dbfb78a2286218" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz" integrity sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw== dependencies: methods "^1.1.2" @@ -4883,7 +4888,7 @@ to-fast-properties@^2.0.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" @@ -4907,7 +4912,7 @@ touch@^3.1.0: tough-cookie@^4.1.2: version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" @@ -4917,7 +4922,7 @@ tough-cookie@^4.1.2: tr46@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + resolved "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz" integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== dependencies: punycode "^2.3.0" @@ -4929,7 +4934,7 @@ tree-kill@^1.2.2: ts-api-utils@^1.0.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz" integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== ts-node@^10.5.0: @@ -4953,7 +4958,7 @@ ts-node@^10.5.0: tslib@^1.11.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0: @@ -4963,7 +4968,7 @@ tslib@^2.1.0: tslib@^2.3.1, tslib@^2.5.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tsscmp@1.0.6: @@ -5032,7 +5037,7 @@ undefsafe@^2.0.5: universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== unpipe@1.0.0, unpipe@~1.0.0: @@ -5054,7 +5059,7 @@ uri-js@^4.2.2: url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -5075,7 +5080,7 @@ util-deprecate@~1.0.1: util@^0.12.4: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -5091,7 +5096,7 @@ utils-merge@1.0.1: uuid@8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== uuid@^3.3.3: @@ -5121,7 +5126,7 @@ vary@~1.1.2: w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" @@ -5145,7 +5150,7 @@ whatwg-mimetype@^3.0.0: whatwg-url@^12.0.0, whatwg-url@^12.0.1: version "12.0.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz" integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== dependencies: tr46 "^4.1.1" @@ -5158,7 +5163,7 @@ which-module@^2.0.0: which-typed-array@^1.1.2: version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -5215,7 +5220,7 @@ write-file-atomic@^3.0.0: ws@^8.13.0: version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + resolved "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== xml-name-validator@^4.0.0: @@ -5225,7 +5230,7 @@ xml-name-validator@^4.0.0: xml2js@0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz" integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== dependencies: sax ">=0.6.0" @@ -5233,7 +5238,7 @@ xml2js@0.6.2: xmlbuilder@~11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlchars@^2.2.0: @@ -5243,7 +5248,7 @@ xmlchars@^2.2.0: xss@^1.0.10: version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" + resolved "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz" integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== dependencies: commander "^2.20.3" @@ -5271,7 +5276,7 @@ y18n@^5.0.5: yallist@4.0.0, yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@20.2.4: