chore(api): migrate to fastify v5 (#57576)

This commit is contained in:
Oliver Eyton-Williams
2025-06-02 04:37:57 +02:00
committed by GitHub
parent 690d05c7b9
commit 89402caa9d
14 changed files with 301 additions and 298 deletions

View File

@@ -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",

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();

View File

@@ -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');

View File

@@ -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/
)
])
);

View File

@@ -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/
)
])
);

View File

@@ -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'
});

View File

@@ -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

View File

@@ -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

View File

@@ -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",

View File

@@ -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()

View File

@@ -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

477
pnpm-lock.yaml generated
View File

@@ -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