diff --git a/api/package.json b/api/package.json index 7a3893ea64b..3baede8ecc6 100644 --- a/api/package.json +++ b/api/package.json @@ -5,14 +5,14 @@ }, "dependencies": { "@aws-sdk/client-ses": "3.521.0", - "@fastify/accepts": "4.3.0", - "@fastify/cookie": "9.4.0", - "@fastify/csrf-protection": "6.4.1", - "@fastify/multipart": "^8.3.0", - "@fastify/oauth2": "7.8.1", - "@fastify/swagger": "8.14.0", - "@fastify/swagger-ui": "1.10.2", - "@fastify/type-provider-typebox": "3.6.0", + "@fastify/accepts": "5.0.2", + "@fastify/cookie": "11.0.1", + "@fastify/csrf-protection": "7.1.0", + "@fastify/multipart": "^9.0.3", + "@fastify/oauth2": "8.1.2", + "@fastify/swagger": "9.4.0", + "@fastify/swagger-ui": "5.2.0", + "@fastify/type-provider-typebox": "5.1.0", "@growthbook/growthbook": "1.3.1", "@prisma/client": "5.5.2", "@sentry/node": "9.1.0", @@ -23,8 +23,8 @@ "date-fns": "2.30.0", "dotenv": "16.4.5", "fast-uri": "2.3.0", - "fastify": "4.29.0", - "fastify-plugin": "4.5.1", + "fastify": "5.2.0", + "fastify-plugin": "5.0.1", "joi": "17.12.2", "jsonwebtoken": "9.0.2", "lodash": "4.17.21", diff --git a/api/src/app.ts b/api/src/app.ts index 0ca81a2e3ac..787cac9589a 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -81,7 +81,7 @@ ajv.addFormat('objectid', { }); export const buildOptions = { - logger: getLogger(), + loggerInstance: process.env.NODE_ENV === 'test' ? undefined : getLogger(), genReqId: () => randomBytes(8).toString('hex'), disableRequestLogging: true }; @@ -166,7 +166,6 @@ export const build = async ( // TODO: bounce unauthed requests before checking CSRF token. This will // mean moving csrfProtection into custom plugin and testing separately, // because it's a pain to mess around with other cookies/hook order. - // @ts-expect-error - @fastify/csrf-protection needs to update their types // eslint-disable-next-line @typescript-eslint/unbound-method fastify.addHook('onRequest', fastify.csrfProtection); fastify.addHook('onRequest', fastify.send401IfNoUser); diff --git a/api/src/plugins/csrf.test.ts b/api/src/plugins/csrf.test.ts index a82cde6cb17..803c115135a 100644 --- a/api/src/plugins/csrf.test.ts +++ b/api/src/plugins/csrf.test.ts @@ -15,7 +15,6 @@ async function setupServer() { const fastify = Fastify({ logger: true, disableRequestLogging: true }); await fastify.register(cookies); await fastify.register(csrf); - // @ts-expect-error - @fastify/csrf-protection needs to update their types // eslint-disable-next-line @typescript-eslint/unbound-method fastify.addHook('onRequest', fastify.csrfProtection); diff --git a/api/src/plugins/mailer.test.ts b/api/src/plugins/mailer.test.ts index eab43b9fa1d..5f84891fd0f 100644 --- a/api/src/plugins/mailer.test.ts +++ b/api/src/plugins/mailer.test.ts @@ -3,13 +3,6 @@ import Fastify from 'fastify'; import mailer from './mailer'; describe('mailer', () => { - it('should throw if not given a provider', async () => { - const fastify = Fastify(); - await expect(fastify.register(mailer)).rejects.toThrow( - "The mailer plugin must be passed a provider via register's options." - ); - }); - it('should send an email via the provider', async () => { const fastify = Fastify(); const send = jest.fn(); diff --git a/api/src/plugins/mailer.ts b/api/src/plugins/mailer.ts index 73ff3106f51..52c87e214fb 100644 --- a/api/src/plugins/mailer.ts +++ b/api/src/plugins/mailer.ts @@ -28,13 +28,6 @@ const plugin: FastifyPluginCallback<{ provider: MailProvider }> = ( ) => { const { provider } = options; - if (!provider) - return done( - Error( - "The mailer plugin must be passed a provider via register's options." - ) - ); - fastify.decorate('sendEmail', async (args: SendEmailArgs) => { const logger = fastify.log.child({ args }); logger.info('Sending Email'); diff --git a/api/src/routes/protected/user.test.ts b/api/src/routes/protected/user.test.ts index 32807f41bd3..fd8e4f4a040 100644 --- a/api/src/routes/protected/user.test.ts +++ b/api/src/routes/protected/user.test.ts @@ -420,17 +420,17 @@ describe('userRoutes', () => { test("POST deletes all the user's cookies", async () => { const res = await superPost('/account/delete'); - const setCookie = res.headers['set-cookie']; + const setCookie = res.headers['set-cookie'] as string[]; expect(setCookie).toEqual( expect.arrayContaining([ expect.stringMatching( - /^jwt_access_token=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^_csrf=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ), expect.stringMatching( - /^csrf_token=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^csrf_token=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ), expect.stringMatching( - /^_csrf=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^jwt_access_token=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ) ]) ); diff --git a/api/src/routes/public/signout.test.ts b/api/src/routes/public/signout.test.ts index 6d601c187ee..0079be4593e 100644 --- a/api/src/routes/public/signout.test.ts +++ b/api/src/routes/public/signout.test.ts @@ -15,13 +15,13 @@ describe('GET /signout', () => { expect(setCookie).toEqual( expect.arrayContaining([ expect.stringMatching( - /^jwt_access_token=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^jwt_access_token=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ), expect.stringMatching( - /^csrf_token=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^csrf_token=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ), expect.stringMatching( - /^_csrf=; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ + /^_csrf=; Max-Age=0; Path=\/; Expires=Thu, 01 Jan 1970 00:00:00 GMT/ ) ]) ); diff --git a/api/src/server.test.ts b/api/src/server.test.ts index 372d5e26ed3..8da761ef00a 100644 --- a/api/src/server.test.ts +++ b/api/src/server.test.ts @@ -77,7 +77,6 @@ describe('server', () => { expect(res.headers).toMatchObject({ 'cache-control': 'no-store', 'content-security-policy': "frame-ancestors 'none'", - 'content-type': 'text/html; charset=utf-8', 'x-content-type-options': 'nosniff', 'x-frame-options': 'DENY' }); diff --git a/docker/api/Dockerfile b/docker/api/Dockerfile index bcde521d494..7732a23f064 100644 --- a/docker/api/Dockerfile +++ b/docker/api/Dockerfile @@ -15,8 +15,6 @@ COPY --chown=node:node curriculum/ curriculum/ # TODO: AFAIK it's just the intro translations. Those should be folded into the # curriculum and then we can remove this. COPY --chown=node:node client/ client/ -# TODO: Remove once `@fastify/oauth2` is fixed -COPY --chown=node:node patches/ patches/ RUN pnpm config set dedupe-peer-dependents false # While we want to ignore scripts generally, we do need to generate the prisma @@ -43,8 +41,6 @@ COPY --chown=node:node pnpm*.yaml . COPY --chown=node:node package.json . COPY --chown=node:node api/ api/ COPY --chown=node:node shared/ shared/ -# TODO: Remove once `@fastify/oauth2` is fixed -COPY --chown=node:node patches/ patches/ RUN npm i -g pnpm@10 # Weirdly this config does not seem necessary for the new api (the same number diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index 32960f6a06f..dbb5fe3b466 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -11,8 +11,6 @@ COPY --chown=node:node client/ client/ COPY --chown=node:node shared/ shared/ COPY --chown=node:node tools/ tools/ COPY --chown=node:node curriculum/ curriculum/ -# TODO: Remove once `@fastify/oauth2` is fixed -COPY --chown=node:node patches/ patches/ ARG HOME_LOCATION ARG API_LOCATION diff --git a/package.json b/package.json index dd51a307370..2e21d6df732 100644 --- a/package.json +++ b/package.json @@ -134,10 +134,6 @@ }, "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", "pnpm": { - "patchedDependencies": { - "@fastify/oauth2@7.8.1": "patches/@fastify__oauth2@7.8.1.patch", - "@fastify/csrf-protection@6.4.1": "patches/@fastify__csrf-protection@6.4.1.patch" - }, "peerDependencyRules": { "allowedVersions": { "react-scrollable-anchor>react": "17", diff --git a/patches/@fastify__csrf-protection@6.4.1.patch b/patches/@fastify__csrf-protection@6.4.1.patch deleted file mode 100644 index d42e3e0ecdf..00000000000 --- a/patches/@fastify__csrf-protection@6.4.1.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/index.js b/index.js -index a183decaf9ec2403a483c7b80cee3c41122c3c25..e5f6b046e43879b31d2b149d7e0cebf941e1c09e 100644 ---- a/index.js -+++ b/index.js -@@ -14,7 +14,8 @@ const defaultOptions = { - sessionKey: '_csrf', - getToken: getTokenDefault, - getUserInfo: getUserInfoDefault, -- sessionPlugin: '@fastify/cookie' -+ sessionPlugin: '@fastify/cookie', -+ logLevel: 'warn' - } - - async function fastifyCsrfProtection (fastify, opts) { -@@ -24,7 +25,8 @@ async function fastifyCsrfProtection (fastify, opts) { - sessionKey, - getToken, - getUserInfo, -- sessionPlugin -+ sessionPlugin, -+ logLevel - } = Object.assign({}, defaultOptions, opts) - - const csrfOpts = opts && opts.csrfOpts ? opts.csrfOpts : {} -@@ -34,6 +36,7 @@ async function fastifyCsrfProtection (fastify, opts) { - assert(typeof getToken === 'function', 'getToken should be a function') - assert(typeof getUserInfo === 'function', 'getUserInfo should be a function') - assert(typeof cookieOpts === 'object', 'cookieOpts should be a object') -+ assert(typeof logLevel === 'string', 'logLevel should be a string') - assert( - ['@fastify/cookie', '@fastify/session', '@fastify/secure-session'].includes(sessionPlugin), - "sessionPlugin should be one of the following: '@fastify/cookie', '@fastify/session', '@fastify/secure-session'" -@@ -113,11 +116,11 @@ async function fastifyCsrfProtection (fastify, opts) { - function csrfProtection (req, reply, next) { - const secret = getSecret(req, reply) - if (!secret) { -- req.log.warn('Missing csrf secret') -+ req.log[logLevel]('Missing csrf secret') - return reply.send(new MissingCSRFSecretError()) - } - if (!tokens.verify(secret, getToken(req), getUserInfo(req))) { -- req.log.warn('Invalid csrf token') -+ req.log[logLevel]('Invalid csrf token') - return reply.send(new InvalidCSRFTokenError()) - } - next() diff --git a/patches/@fastify__oauth2@7.8.1.patch b/patches/@fastify__oauth2@7.8.1.patch deleted file mode 100644 index d907f5cc441..00000000000 --- a/patches/@fastify__oauth2@7.8.1.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/index.js b/index.js -index ca254d0c9761c8c02070eaf51675627a6d80ff46..efb522616b586f3c8692d5bafd4f2da7aa9b0e20 100644 ---- a/index.js -+++ b/index.js -@@ -483,7 +483,7 @@ function fastifyOauth2 (fastify, options, next) { - - function onUserinfoResponse (res) { - let rawData = '' -- res.on('data', (chunk) => { rawData = chunk }) -+ res.on('data', (chunk) => { rawData += chunk }) - res.on('end', () => { - try { - cb(null, JSON.parse(rawData)) // should always be JSON since we don't do jwt auth response diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fab3414e6b6..4be7eab257f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,14 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - '@fastify/csrf-protection@6.4.1': - hash: 4749bbb206ff56e794bd0d79806b74c530a6aee7ae7047c56b984a8a0a0fcb07 - path: patches/@fastify__csrf-protection@6.4.1.patch - '@fastify/oauth2@7.8.1': - hash: b66c426494fa0b8b631bfaecba9d45b7f41b9dd25f2a78d92891921ae6fb84b2 - path: patches/@fastify__oauth2@7.8.1.patch - importers: .: @@ -162,29 +154,29 @@ importers: specifier: 3.521.0 version: 3.521.0 '@fastify/accepts': - specifier: 4.3.0 - version: 4.3.0 + specifier: 5.0.2 + version: 5.0.2 '@fastify/cookie': + specifier: 11.0.1 + version: 11.0.1 + '@fastify/csrf-protection': + specifier: 7.1.0 + version: 7.1.0 + '@fastify/multipart': + specifier: ^9.0.3 + version: 9.0.3 + '@fastify/oauth2': + specifier: 8.1.2 + version: 8.1.2 + '@fastify/swagger': specifier: 9.4.0 version: 9.4.0 - '@fastify/csrf-protection': - specifier: 6.4.1 - version: 6.4.1(patch_hash=4749bbb206ff56e794bd0d79806b74c530a6aee7ae7047c56b984a8a0a0fcb07) - '@fastify/multipart': - specifier: ^8.3.0 - version: 8.3.1 - '@fastify/oauth2': - specifier: 7.8.1 - version: 7.8.1(patch_hash=b66c426494fa0b8b631bfaecba9d45b7f41b9dd25f2a78d92891921ae6fb84b2) - '@fastify/swagger': - specifier: 8.14.0 - version: 8.14.0 '@fastify/swagger-ui': - specifier: 1.10.2 - version: 1.10.2 + specifier: 5.2.0 + version: 5.2.0 '@fastify/type-provider-typebox': - specifier: 3.6.0 - version: 3.6.0(@sinclair/typebox@0.34.33) + specifier: 5.1.0 + version: 5.1.0(@sinclair/typebox@0.34.33) '@growthbook/growthbook': specifier: 1.3.1 version: 1.3.1 @@ -216,11 +208,11 @@ importers: specifier: 2.3.0 version: 2.3.0 fastify: - specifier: 4.29.0 - version: 4.29.0 + specifier: 5.2.0 + version: 5.2.0 fastify-plugin: - specifier: 4.5.1 - version: 4.5.1 + specifier: 5.0.1 + version: 5.0.1 joi: specifier: 17.12.2 version: 17.12.2 @@ -2794,65 +2786,61 @@ packages: resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/accept-negotiator@1.1.0': - resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} - engines: {node: '>=14'} + '@fastify/accept-negotiator@2.0.1': + resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@fastify/accepts@4.3.0': - resolution: {integrity: sha512-QK4FoqXdwwPmaPOLL6NrxsyaXVvdviYVoS6ltHyOLdFlUyREIaMykHQIp+x0aJz9hB3B3n/Ht6QRdvBeGkptGQ==} + '@fastify/accepts@5.0.2': + resolution: {integrity: sha512-pX0OrioMz3C2cuYFOGRCNMdP3sR6daTFjeSNFrWlZVutawpPIGI5opK5h4Qa6x6C9oavdDkAjA16orneE2jAFQ==} - '@fastify/ajv-compiler@3.5.0': - resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + '@fastify/ajv-compiler@4.0.2': + resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==} '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - '@fastify/cookie@9.4.0': - resolution: {integrity: sha512-Th+pt3kEkh4MQD/Q2q1bMuJIB5NX/D5SwSpOKu3G/tjoGbwfpurIMJsWSPS0SJJ4eyjtmQ8OipDQspf8RbUOlg==} + '@fastify/cookie@11.0.1': + resolution: {integrity: sha512-n1Ooz4bgQ5LcOlJQboWPfsMNxIrGV0SgU85UkctdpTlCQE0mtA3rlspOPUdqk9ubiiZn053ucnia4DjTquI4/g==} - '@fastify/csrf-protection@6.4.1': - resolution: {integrity: sha512-nP1xjruddvWMvqjxTVzpLqWVLAX7P/XWkeTaARg3bXVrVmpDWjDMN7KfV3swIT/XexjDooMo+QG/n0n6ynZaiw==} + '@fastify/csrf-protection@7.1.0': + resolution: {integrity: sha512-I2TDd4SRRYQivKCMHdB/8py+CPO9DT0e63lh4DO8MDCJh8NROq8HD/iO0IjYtwhsD3bZhr0cBXsFdfPvyTmzNw==} - '@fastify/csrf@6.2.0': - resolution: {integrity: sha512-DvBvhhAjTh4JxH7u/HAaXY6uawrEA3lGrJNTDF2R0sojwXdmFF50an2nnnHMBIsABRyNh9TueZjzgznRCe74yA==} - - '@fastify/deepmerge@1.3.0': - resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} + '@fastify/csrf@8.0.1': + resolution: {integrity: sha512-dAmCrdfJ3CV/A/hHHK/rRBjjLRRSIltgJB0BxiVfbhr/31G6fgF8l2I8evtH8mjS5kTIvd0JOh7MOA3HA6eYDw==} '@fastify/deepmerge@2.0.2': resolution: {integrity: sha512-3wuLdX5iiiYeZWP6bQrjqhrcvBIf0NHbQH1Ur1WbHvoiuTYUEItgygea3zs8aHpiitn0lOB8gX20u1qO+FDm7Q==} - '@fastify/error@3.4.1': - resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} - '@fastify/error@4.0.0': resolution: {integrity: sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==} - '@fastify/fast-json-stringify-compiler@4.3.0': - resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + '@fastify/fast-json-stringify-compiler@5.0.3': + resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==} - '@fastify/multipart@8.3.1': - resolution: {integrity: sha512-pncbnG28S6MIskFSVRtzTKE9dK+GrKAJl0NbaQ/CG8ded80okWFsYKzSlP9haaLNQhNRDOoHqmGQNvgbiPVpWQ==} + '@fastify/merge-json-schemas@0.2.1': + resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} - '@fastify/oauth2@7.8.1': - resolution: {integrity: sha512-PBIMizzgEOcUcttyfX1hC6CR9vESoI1lfNucBywgcqrxvknVg+zvBCgH2+oU8NvrpSDMtlY6nyuEYYZtVhDT7Q==} + '@fastify/multipart@9.0.3': + resolution: {integrity: sha512-pJogxQCrT12/6I5Fh6jr3narwcymA0pv4B0jbC7c6Bl9wnrxomEUnV0d26w6gUls7gSXmhG8JGRMmHFIPsxt1g==} - '@fastify/send@2.1.0': - resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==} + '@fastify/oauth2@8.1.2': + resolution: {integrity: sha512-XZWFRWTZE2fkZ2pjuHNGtpFn1tOFgcJbU0205kHbfd16dn9xRc/6HmG0gHtN/g/BNkEL3EsQ54+pYEdh8dnBgA==} - '@fastify/static@6.11.2': - resolution: {integrity: sha512-EH7mh7q4MfNdT7N07ZVlwsX/ObngMvQ7KBP0FXAuPov99Fjn80KSJMdxQhhYKAKWW1jXiFdrk8X7d6uGWdZFxg==} + '@fastify/send@4.0.0': + resolution: {integrity: sha512-eJjKDxyBnZ1iMHcmwYWG5wSA/yzVY/yrBy3Upd2+hc0omcK13tWeXRcbF28zEcbl+Z2kXEgMzJ5Rb/gXGWx9Rg==} - '@fastify/swagger-ui@1.10.2': - resolution: {integrity: sha512-f2mRqtblm6eRAFQ3e8zSngxVNEtiYY7rISKQVjPA++ZsWc5WYlPVTb6Bx0G/zy0BIoucNqDr/Q2Vb/kTYkOq1A==} + '@fastify/static@8.2.0': + resolution: {integrity: sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==} - '@fastify/swagger@8.14.0': - resolution: {integrity: sha512-sGiznEb3rl6pKGGUZ+JmfI7ct5cwbTQGo+IjewaTvtzfrshnryu4dZwEsjw0YHABpBA+kCz3kpRaHB7qpa67jg==} + '@fastify/swagger-ui@5.2.0': + resolution: {integrity: sha512-oxL9bcL/ad8J1zXAvG2kMmj9d9mHQSM7Mx92yUk90IhvsTns9xy+GK2wXaNyv8/DFg6HpJOL2NrBAzuUt80j8g==} - '@fastify/type-provider-typebox@3.6.0': - resolution: {integrity: sha512-HTeOLvirfGg0u1KGao3iXn5rZpYNqlrOmyDnXSXAbWVPa+mDQTTBNs/x5uZzOB6vFAqr0Xcf7x1lxOamNSYKjw==} + '@fastify/swagger@9.4.0': + resolution: {integrity: sha512-3hF7asqyNfu41aeDA/ATlIG0RY4XizgaDqPR0nc1Unt3EiXWjkVMiELLaH5WZKNvB4BA/5Wovxdin7N4ii7YHw==} + + '@fastify/type-provider-typebox@5.1.0': + resolution: {integrity: sha512-F1AQHeLiKp1hu6GMWm5W6fZ6zXQ0mTV+qHOzrptAie9AYewvFr5Q3blfy8Qmx9gUgwA3Yj+CWvQQJeTwDgTnIg==} peerDependencies: - '@sinclair/typebox': '>=0.26 <=0.32' + '@sinclair/typebox': '>=0.26 <=0.34' '@fortawesome/fontawesome-common-types@6.7.1': resolution: {integrity: sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ==} @@ -3098,6 +3086,10 @@ packages: '@types/node': optional: true + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -5103,6 +5095,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -5203,9 +5203,6 @@ packages: arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -5400,8 +5397,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avvio@8.3.0: - resolution: {integrity: sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==} + avvio@9.1.0: + resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} axe-core@4.10.3: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} @@ -6208,6 +6205,10 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -7439,9 +7440,6 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true - fast-content-type-parse@1.1.0: - resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} - fast-copy@2.1.7: resolution: {integrity: sha512-ozrGwyuCTAy7YgFCua8rmqmytECYk/JYAMXcswOcm0qvGoE3tPb7ivBeIHTOK2DiapBhDZgacIhzhQIKU5TCfA==} @@ -7472,8 +7470,8 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-json-stringify@5.8.0: - resolution: {integrity: sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ==} + fast-json-stringify@6.0.1: + resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -7491,6 +7489,9 @@ packages: fast-uri@2.3.0: resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} @@ -7506,11 +7507,11 @@ packages: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastify-plugin@4.5.1: - resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + fastify-plugin@5.0.1: + resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} - fastify@4.29.0: - resolution: {integrity: sha512-MaaUHUGcCgC8fXQDsDtioaCcag1fmPJ9j64vAKunqZF4aSub040ZGi/ag8NGE2714yREPOKZuHCfpPzuUD3UQQ==} + fastify@5.2.0: + resolution: {integrity: sha512-3s+Qt5S14Eq5dCpnE0FxTp3z4xKChI83ZnMv+k0FwX+VUoZrgCFoLAxpfdi/vT4y6Mk+g7aAMt9pgXDoZmkefQ==} fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -7599,9 +7600,9 @@ packages: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} - find-my-way@8.1.0: - resolution: {integrity: sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==} - engines: {node: '>=14'} + find-my-way@9.3.0: + resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==} + engines: {node: '>=20'} find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} @@ -7656,6 +7657,10 @@ packages: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + fork-ts-checker-webpack-plugin@4.1.6: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} @@ -7988,6 +7993,11 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -9061,6 +9071,10 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9313,6 +9327,9 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-ref-resolver@2.0.1: + resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==} + json-schema-resolver@2.0.0: resolution: {integrity: sha512-pJ4XLQP4Q9HTxl6RVDLJ8Cyh1uitSs0CzDBAz1uoJ4sRD/Bk7cFSXL1FUXDW3zJ7YnfliJx6eu8Jn283bpZ4Yg==} engines: {node: '>=10'} @@ -9427,8 +9444,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - light-my-request@5.11.0: - resolution: {integrity: sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA==} + light-my-request@6.6.0: + resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} lilconfig@2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} @@ -9623,6 +9640,10 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} + lru-cache@4.0.0: resolution: {integrity: sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==} @@ -10143,6 +10164,10 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} @@ -10164,6 +10189,10 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + mitt@1.2.0: resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} @@ -10682,6 +10711,9 @@ packages: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@6.5.0: resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} engines: {node: '>=8'} @@ -10793,6 +10825,10 @@ packages: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -11249,12 +11285,6 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-warning@2.2.0: - resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} - - process-warning@3.0.0: - resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - process-warning@4.0.1: resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} @@ -11947,9 +11977,9 @@ packages: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} - ret@0.2.2: - resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} - engines: {node: '>=4'} + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} retext-english@3.0.4: resolution: {integrity: sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw==} @@ -11965,6 +11995,9 @@ packages: rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -12037,8 +12070,8 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safe-regex2@2.0.0: - resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + safe-regex2@5.0.0: + resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} @@ -12091,6 +12124,9 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + secure-json-parse@3.0.2: + resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==} + semver-diff@3.1.1: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} engines: {node: '>=8'} @@ -12506,10 +12542,6 @@ packages: stream-splicer@2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} - stream-wormhole@1.1.0: - resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==} - engines: {node: '>=4.0.0'} - streamsearch@0.1.2: resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==} engines: {node: '>=0.8.0'} @@ -12912,8 +12944,8 @@ packages: to-vfile@5.0.3: resolution: {integrity: sha512-z1Lfx60yAMDMmr+f426Y4yECsHdl8GVEAE+LymjRF5oOIZ7T4N20IxWNAxXLMRzP9jSSll38Z0fKVAhVLsdLOw==} - toad-cache@3.3.0: - resolution: {integrity: sha512-3oDzcogWGHZdkwrHyvJVpPjA7oNzY6ENOV3PsWJY9XYPZ6INo94Yd47s5may1U+nleBPwDhrRiTPMIvKaa3MQg==} + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} engines: {node: '>=12'} toidentifier@1.0.0: @@ -13734,6 +13766,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -13879,6 +13915,11 @@ packages: resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -17079,64 +17120,63 @@ snapshots: '@eslint/core': 0.12.0 levn: 0.4.1 - '@fastify/accept-negotiator@1.1.0': {} + '@fastify/accept-negotiator@2.0.1': {} - '@fastify/accepts@4.3.0': + '@fastify/accepts@5.0.2': dependencies: accepts: 1.3.8 - fastify-plugin: 4.5.1 + fastify-plugin: 5.0.1 - '@fastify/ajv-compiler@3.5.0': + '@fastify/ajv-compiler@4.0.2': dependencies: ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-uri: 2.3.0 + ajv-formats: 3.0.1(ajv@8.12.0) + fast-uri: 3.0.6 '@fastify/busboy@3.1.1': {} - '@fastify/cookie@9.4.0': + '@fastify/cookie@11.0.1': dependencies: - cookie-signature: 1.2.1 - fastify-plugin: 4.5.1 + cookie: 1.0.2 + fastify-plugin: 5.0.1 - '@fastify/csrf-protection@6.4.1(patch_hash=4749bbb206ff56e794bd0d79806b74c530a6aee7ae7047c56b984a8a0a0fcb07)': + '@fastify/csrf-protection@7.1.0': dependencies: - '@fastify/csrf': 6.2.0 - '@fastify/error': 3.4.1 - fastify-plugin: 4.5.1 + '@fastify/csrf': 8.0.1 + '@fastify/error': 4.0.0 + fastify-plugin: 5.0.1 - '@fastify/csrf@6.2.0': {} - - '@fastify/deepmerge@1.3.0': {} + '@fastify/csrf@8.0.1': {} '@fastify/deepmerge@2.0.2': {} - '@fastify/error@3.4.1': {} - '@fastify/error@4.0.0': {} - '@fastify/fast-json-stringify-compiler@4.3.0': + '@fastify/fast-json-stringify-compiler@5.0.3': dependencies: - fast-json-stringify: 5.8.0 + fast-json-stringify: 6.0.1 - '@fastify/multipart@8.3.1': + '@fastify/merge-json-schemas@0.2.1': + dependencies: + dequal: 2.0.3 + + '@fastify/multipart@9.0.3': dependencies: '@fastify/busboy': 3.1.1 '@fastify/deepmerge': 2.0.2 '@fastify/error': 4.0.0 - fastify-plugin: 4.5.1 - secure-json-parse: 2.7.0 - stream-wormhole: 1.1.0 + fastify-plugin: 5.0.1 + secure-json-parse: 3.0.2 - '@fastify/oauth2@7.8.1(patch_hash=b66c426494fa0b8b631bfaecba9d45b7f41b9dd25f2a78d92891921ae6fb84b2)': + '@fastify/oauth2@8.1.2': dependencies: - '@fastify/cookie': 9.4.0 - fastify-plugin: 4.5.1 + '@fastify/cookie': 11.0.1 + fastify-plugin: 5.0.1 simple-oauth2: 5.1.0 transitivePeerDependencies: - supports-color - '@fastify/send@2.1.0': + '@fastify/send@4.0.0': dependencies: '@lukeed/ms': 2.0.2 escape-html: 1.0.3 @@ -17144,34 +17184,34 @@ snapshots: http-errors: 2.0.0 mime: 3.0.0 - '@fastify/static@6.11.2': + '@fastify/static@8.2.0': dependencies: - '@fastify/accept-negotiator': 1.1.0 - '@fastify/send': 2.1.0 + '@fastify/accept-negotiator': 2.0.1 + '@fastify/send': 4.0.0 content-disposition: 0.5.4 - fastify-plugin: 4.5.1 - glob: 8.1.0 - p-limit: 3.1.0 + fastify-plugin: 5.0.1 + fastq: 1.17.1 + glob: 11.0.2 - '@fastify/swagger-ui@1.10.2': + '@fastify/swagger-ui@5.2.0': dependencies: - '@fastify/static': 6.11.2 - fastify-plugin: 4.5.1 + '@fastify/static': 8.2.0 + fastify-plugin: 5.0.1 openapi-types: 12.1.3 - rfdc: 1.3.0 - yaml: 2.3.2 + rfdc: 1.4.1 + yaml: 2.8.0 - '@fastify/swagger@8.14.0': + '@fastify/swagger@9.4.0': dependencies: - fastify-plugin: 4.5.1 + fastify-plugin: 5.0.1 json-schema-resolver: 2.0.0 openapi-types: 12.1.3 - rfdc: 1.3.0 - yaml: 2.3.2 + rfdc: 1.4.1 + yaml: 2.8.0 transitivePeerDependencies: - supports-color - '@fastify/type-provider-typebox@3.6.0(@sinclair/typebox@0.34.33)': + '@fastify/type-provider-typebox@5.1.0(@sinclair/typebox@0.34.33)': dependencies: '@sinclair/typebox': 0.34.33 @@ -17474,6 +17514,15 @@ snapshots: optionalDependencies: '@types/node': 20.12.8 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -20129,6 +20178,10 @@ snapshots: optionalDependencies: ajv: 8.12.0 + ajv-formats@3.0.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -20224,8 +20277,6 @@ snapshots: arch@2.2.0: {} - archy@1.0.0: {} - are-docs-informative@0.0.2: {} arg@2.0.0: {} @@ -20463,14 +20514,10 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - avvio@8.3.0: + avvio@9.1.0: dependencies: - '@fastify/error': 3.4.1 - archy: 1.0.0 - debug: 4.3.4(supports-color@8.1.1) + '@fastify/error': 4.0.0 fastq: 1.17.1 - transitivePeerDependencies: - - supports-color axe-core@4.10.3: {} @@ -21597,6 +21644,8 @@ snapshots: cookie@0.7.2: {} + cookie@1.0.2: {} + cookiejar@2.1.4: {} copy-descriptor@0.1.1: {} @@ -23459,8 +23508,6 @@ snapshots: transitivePeerDependencies: - supports-color - fast-content-type-parse@1.1.0: {} - fast-copy@2.1.7: {} fast-copy@3.0.1: {} @@ -23497,14 +23544,14 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-json-stringify@5.8.0: + fast-json-stringify@6.0.1: dependencies: - '@fastify/deepmerge': 1.3.0 + '@fastify/merge-json-schemas': 0.2.1 ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 - rfdc: 1.3.0 + ajv-formats: 3.0.1(ajv@8.12.0) + fast-uri: 3.0.6 + json-schema-ref-resolver: 2.0.1 + rfdc: 1.4.1 fast-levenshtein@2.0.6: {} @@ -23518,6 +23565,8 @@ snapshots: fast-uri@2.3.0: {} + fast-uri@3.0.6: {} + fast-url-parser@1.1.3: dependencies: punycode: 1.4.1 @@ -23532,28 +23581,25 @@ snapshots: fastest-levenshtein@1.0.16: {} - fastify-plugin@4.5.1: {} + fastify-plugin@5.0.1: {} - fastify@4.29.0: + fastify@5.2.0: dependencies: - '@fastify/ajv-compiler': 3.5.0 - '@fastify/error': 3.4.1 - '@fastify/fast-json-stringify-compiler': 4.3.0 + '@fastify/ajv-compiler': 4.0.2 + '@fastify/error': 4.0.0 + '@fastify/fast-json-stringify-compiler': 5.0.3 abstract-logging: 2.0.1 - avvio: 8.3.0 - fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.8.0 - find-my-way: 8.1.0 - light-my-request: 5.11.0 + avvio: 9.1.0 + fast-json-stringify: 6.0.1 + find-my-way: 9.3.0 + light-my-request: 6.6.0 pino: 9.6.0 - process-warning: 3.0.0 + process-warning: 4.0.1 proxy-addr: 2.0.7 - rfdc: 1.3.0 - secure-json-parse: 2.7.0 + rfdc: 1.4.1 + secure-json-parse: 3.0.2 semver: 7.6.0 - toad-cache: 3.3.0 - transitivePeerDependencies: - - supports-color + toad-cache: 3.7.0 fastq@1.15.0: dependencies: @@ -23675,11 +23721,11 @@ snapshots: make-dir: 3.1.0 pkg-dir: 4.2.0 - find-my-way@8.1.0: + find-my-way@9.3.0: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 - safe-regex2: 2.0.0 + safe-regex2: 5.0.0 find-up@3.0.0: dependencies: @@ -23736,6 +23782,11 @@ snapshots: for-in@1.0.2: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + fork-ts-checker-webpack-plugin@4.1.6(eslint@7.32.0)(typescript@5.2.2)(webpack@5.90.3): dependencies: '@babel/code-frame': 7.24.7 @@ -24461,6 +24512,15 @@ snapshots: glob-to-regexp@0.4.1: {} + glob@11.0.2: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -25652,6 +25712,10 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -26199,10 +26263,14 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-ref-resolver@2.0.1: + dependencies: + dequal: 2.0.3 + json-schema-resolver@2.0.0: dependencies: debug: 4.3.4(supports-color@8.1.1) - rfdc: 1.3.0 + rfdc: 1.4.1 uri-js: 4.4.1 transitivePeerDependencies: - supports-color @@ -26320,10 +26388,10 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - light-my-request@5.11.0: + light-my-request@6.6.0: dependencies: - cookie: 0.5.0 - process-warning: 2.2.0 + cookie: 1.0.2 + process-warning: 4.0.1 set-cookie-parser: 2.6.0 lilconfig@2.0.6: {} @@ -26514,6 +26582,8 @@ snapshots: lowercase-keys@2.0.0: {} + lru-cache@11.1.0: {} + lru-cache@4.0.0: dependencies: pseudomap: 1.0.2 @@ -27356,6 +27426,10 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.0.4: dependencies: brace-expansion: 1.1.11 @@ -27378,6 +27452,8 @@ snapshots: minimist@1.2.8: {} + minipass@7.1.2: {} + mitt@1.2.0: {} mitt@3.0.1: {} @@ -27935,6 +28011,8 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 + package-json-from-dist@1.0.1: {} + package-json@6.5.0: dependencies: got: 9.6.0 @@ -28074,6 +28152,11 @@ snapshots: path-platform@0.11.15: {} + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + path-to-regexp@0.1.7: {} path-to-regexp@2.2.1: {} @@ -28510,10 +28593,6 @@ snapshots: process-nextick-args@2.0.1: {} - process-warning@2.2.0: {} - - process-warning@3.0.0: {} - process-warning@4.0.1: {} process@0.11.10: {} @@ -29399,7 +29478,7 @@ snapshots: ret@0.1.15: {} - ret@0.2.2: {} + ret@0.5.0: {} retext-english@3.0.4: dependencies: @@ -29412,6 +29491,8 @@ snapshots: rfdc@1.3.0: {} + rfdc@1.4.1: {} + rimraf@2.7.1: dependencies: glob: 7.2.3 @@ -29502,9 +29583,9 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safe-regex2@2.0.0: + safe-regex2@5.0.0: dependencies: - ret: 0.2.2 + ret: 0.5.0 safe-regex@1.1.0: dependencies: @@ -29571,6 +29652,8 @@ snapshots: secure-json-parse@2.7.0: {} + secure-json-parse@3.0.2: {} + semver-diff@3.1.1: dependencies: semver: 6.3.1 @@ -30126,8 +30209,6 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - stream-wormhole@1.1.0: {} - streamsearch@0.1.2: {} streamx@2.18.0: @@ -30645,7 +30726,7 @@ snapshots: is-buffer: 2.0.5 vfile: 3.0.1 - toad-cache@3.3.0: {} + toad-cache@3.7.0: {} toidentifier@1.0.0: {} @@ -31644,6 +31725,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} write-file-atomic@3.0.3: @@ -31719,6 +31806,8 @@ snapshots: yaml@2.3.2: {} + yaml@2.8.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1