From 7e2f2f7453a50d0fbf483b17d3aa4e758b49489d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Tue, 7 Feb 2023 15:49:35 +0100 Subject: [PATCH] refactor(core): Add unit tests for all external auth middlewares (no-changelog) (#5386) --- package.json | 5 +- packages/cli/package.json | 9 +- packages/cli/src/Server.ts | 153 +----- packages/cli/src/api/workflowStats.api.ts | 2 +- packages/cli/src/middlewares/basicAuth.ts | 57 +++ .../cli/src/middlewares/externalJWTAuth.ts | 89 ++++ .../test/unit/middlewares/basicAuth.test.ts | 42 ++ .../unit/middlewares/externalJWTAuth.test.ts | 47 ++ packages/nodes-base/package.json | 4 +- pnpm-lock.yaml | 482 +++++++++--------- 10 files changed, 492 insertions(+), 398 deletions(-) create mode 100644 packages/cli/src/middlewares/basicAuth.ts create mode 100644 packages/cli/src/middlewares/externalJWTAuth.ts create mode 100644 packages/cli/test/unit/middlewares/basicAuth.test.ts create mode 100644 packages/cli/test/unit/middlewares/externalJWTAuth.test.ts diff --git a/package.json b/package.json index b859df9a60..c1cf9d3c29 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@n8n_io/eslint-config": "*", "@ngneat/falso": "^6.1.0", "@types/jest": "^29.2.2", - "@types/node": "^16.11.22", + "@types/supertest": "^2.0.12", "cross-env": "^7.0.3", "cypress": "^10.0.3", "cypress-real-events": "^1.7.6", @@ -53,7 +53,7 @@ "rimraf": "^3.0.2", "run-script-os": "^1.0.7", "start-server-and-test": "^1.14.0", - "supertest": "^6.2.2", + "supertest": "^6.3.3", "ts-jest": "^29.0.3", "tsc-watch": "^5.0.3", "turbo": "1.6.3", @@ -65,6 +65,7 @@ "vue-demi" ], "overrides": { + "@types/node": "^16.18.12", "browserslist": "^4.21.4", "ejs": "^3.1.8", "fork-ts-checker-webpack-plugin": "^6.0.4", diff --git a/packages/cli/package.json b/packages/cli/package.json index 450b42c475..f159277ed7 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -63,7 +63,7 @@ "devDependencies": { "@apidevtools/swagger-cli": "4.0.0", "@oclif/dev-cli": "^1.22.2", - "@types/basic-auth": "^1.1.2", + "@types/basic-auth": "^1.1.3", "@types/bcryptjs": "^2.4.2", "@types/body-parser-xml": "^2.0.2", "@types/compression": "1.0.1", @@ -72,7 +72,7 @@ "@types/cookie-parser": "^1.4.2", "@types/express": "^4.17.6", "@types/json-diff": "^0.5.1", - "@types/jsonwebtoken": "^9.0.0", + "@types/jsonwebtoken": "^9.0.1", "@types/localtunnel": "^1.9.0", "@types/lodash.get": "^4.4.6", "@types/lodash.intersection": "^4.4.7", @@ -94,16 +94,15 @@ "@types/send": "^0.17.1", "@types/shelljs": "^0.8.11", "@types/superagent": "4.1.13", - "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "@types/syslog-client": "^1.1.2", "@types/uuid": "^8.3.2", "@types/validator": "^13.7.0", "@types/yamljs": "^0.2.31", "concurrently": "^5.1.0", + "mock-jwks": "^1.0.9", "nodemon": "^2.0.2", "run-script-os": "^1.0.7", - "supertest": "^6.2.2", "ts-node": "^9.1.1", "tsc-alias": "^1.7.0", "tsconfig-paths": "^3.14.1" @@ -147,7 +146,7 @@ "json-diff": "^0.5.4", "jsonschema": "^1.4.1", "jsonwebtoken": "^9.0.0", - "jwks-rsa": "~1.12.1", + "jwks-rsa": "^3.0.1", "ldapts": "^4.2.2", "localtunnel": "^2.0.0", "lodash.get": "^4.4.2", diff --git a/packages/cli/src/Server.ts b/packages/cli/src/Server.ts index 6cc6fe24ae..f9382fba1a 100644 --- a/packages/cli/src/Server.ts +++ b/packages/cli/src/Server.ts @@ -42,9 +42,6 @@ import type { AxiosRequestConfig } from 'axios'; import axios from 'axios'; import type { RequestOptions } from 'oauth-1.0a'; import clientOAuth1 from 'oauth-1.0a'; -// IMPORTANT! Do not switch to anther bcrypt library unless really necessary and -// tested with all possible systems like Windows, Alpine on ARM, FreeBSD, ... -import { compare } from 'bcryptjs'; import { BinaryDataManager, @@ -68,9 +65,6 @@ import type { } from 'n8n-workflow'; import { LoggerProxy, jsonParse } from 'n8n-workflow'; -import basicAuth from 'basic-auth'; -import jwt from 'jsonwebtoken'; -import jwks from 'jwks-rsa'; // @ts-ignore import timezones from 'google-timezones-json'; import history from 'connect-history-api-fallback'; @@ -166,6 +160,8 @@ import { ldapController } from './Ldap/routes/ldap.controller.ee'; import { getLdapLoginLabel, isLdapEnabled, isLdapLoginEnabled } from './Ldap/helpers'; import { AbstractServer } from './AbstractServer'; import { configureMetrics } from './metrics'; +import { setupBasicAuth } from './middlewares/basicAuth'; +import { setupExternalJWTAuth } from './middlewares/externalJWTAuth'; const exec = promisify(callbackExec); @@ -408,150 +404,13 @@ class Server extends AbstractServer { const authIgnoreRegex = new RegExp(`^\/(${ignoredEndpoints.join('|')})\/?.*$`); // Check for basic auth credentials if activated - const basicAuthActive = config.getEnv('security.basicAuth.active'); - if (basicAuthActive) { - const basicAuthUser = config.getEnv('security.basicAuth.user'); - if (basicAuthUser === '') { - throw new Error('Basic auth is activated but no user got defined. Please set one!'); - } - - const basicAuthPassword = config.getEnv('security.basicAuth.password'); - if (basicAuthPassword === '') { - throw new Error('Basic auth is activated but no password got defined. Please set one!'); - } - - const basicAuthHashEnabled = config.getEnv('security.basicAuth.hash') as boolean; - - let validPassword: null | string = null; - - this.app.use( - async (req: express.Request, res: express.Response, next: express.NextFunction) => { - // Skip basic auth for a few listed endpoints or when instance owner has been setup - if ( - authIgnoreRegex.exec(req.url) || - config.getEnv('userManagement.isInstanceOwnerSetUp') - ) { - return next(); - } - const realm = 'n8n - Editor UI'; - const basicAuthData = basicAuth(req); - - if (basicAuthData === undefined) { - // Authorization data is missing - return ResponseHelper.basicAuthAuthorizationError( - res, - realm, - 'Authorization is required!', - ); - } - - if (basicAuthData.name === basicAuthUser) { - if (basicAuthHashEnabled) { - if ( - validPassword === null && - (await compare(basicAuthData.pass, basicAuthPassword)) - ) { - // Password is valid so save for future requests - validPassword = basicAuthData.pass; - } - - if (validPassword === basicAuthData.pass && validPassword !== null) { - // Provided hash is correct - return next(); - } - } else if (basicAuthData.pass === basicAuthPassword) { - // Provided password is correct - return next(); - } - } - - // Provided authentication data is wrong - return ResponseHelper.basicAuthAuthorizationError( - res, - realm, - 'Authorization data is wrong!', - ); - }, - ); + if (config.getEnv('security.basicAuth.active')) { + await setupBasicAuth(this.app, config, authIgnoreRegex); } // Check for and validate JWT if configured - const jwtAuthActive = config.getEnv('security.jwtAuth.active'); - if (jwtAuthActive) { - const jwtAuthHeader = config.getEnv('security.jwtAuth.jwtHeader'); - if (jwtAuthHeader === '') { - throw new Error('JWT auth is activated but no request header was defined. Please set one!'); - } - const jwksUri = config.getEnv('security.jwtAuth.jwksUri'); - if (jwksUri === '') { - throw new Error('JWT auth is activated but no JWK Set URI was defined. Please set one!'); - } - const jwtHeaderValuePrefix = config.getEnv('security.jwtAuth.jwtHeaderValuePrefix'); - const jwtIssuer = config.getEnv('security.jwtAuth.jwtIssuer'); - const jwtNamespace = config.getEnv('security.jwtAuth.jwtNamespace'); - const jwtAllowedTenantKey = config.getEnv('security.jwtAuth.jwtAllowedTenantKey'); - const jwtAllowedTenant = config.getEnv('security.jwtAuth.jwtAllowedTenant'); - - // eslint-disable-next-line no-inner-declarations - function isTenantAllowed(decodedToken: object): boolean { - if (jwtNamespace === '' || jwtAllowedTenantKey === '' || jwtAllowedTenant === '') { - return true; - } - - for (const [k, v] of Object.entries(decodedToken)) { - if (k === jwtNamespace) { - for (const [kn, kv] of Object.entries(v)) { - if (kn === jwtAllowedTenantKey && kv === jwtAllowedTenant) { - return true; - } - } - } - } - - return false; - } - - // eslint-disable-next-line consistent-return - this.app.use((req: express.Request, res: express.Response, next: express.NextFunction) => { - if (authIgnoreRegex.exec(req.url)) { - return next(); - } - - let token = req.header(jwtAuthHeader) as string; - if (token === undefined || token === '') { - return ResponseHelper.jwtAuthAuthorizationError(res, 'Missing token'); - } - if (jwtHeaderValuePrefix !== '' && token.startsWith(jwtHeaderValuePrefix)) { - token = token.replace(`${jwtHeaderValuePrefix} `, '').trimLeft(); - } - - const jwkClient = jwks({ cache: true, jwksUri }); - // eslint-disable-next-line @typescript-eslint/ban-types - function getKey(header: any, callback: Function) { - jwkClient.getSigningKey(header.kid, (err: Error, key: any) => { - // eslint-disable-next-line @typescript-eslint/no-throw-literal - if (err) throw ResponseHelper.jwtAuthAuthorizationError(res, err.message); - - const signingKey = key.publicKey || key.rsaPublicKey; - callback(null, signingKey); - }); - } - - const jwtVerifyOptions: jwt.VerifyOptions = { - issuer: jwtIssuer !== '' ? jwtIssuer : undefined, - ignoreExpiration: false, - }; - - jwt.verify(token, getKey, jwtVerifyOptions, (err: jwt.VerifyErrors, decoded: object) => { - if (err) { - ResponseHelper.jwtAuthAuthorizationError(res, 'Invalid token'); - } else if (!isTenantAllowed(decoded)) { - ResponseHelper.jwtAuthAuthorizationError(res, 'Tenant not allowed'); - } else { - next(); - } - }); - }); + if (config.getEnv('security.jwtAuth.active')) { + await setupExternalJWTAuth(this.app, config, authIgnoreRegex); } // ---------------------------------------- diff --git a/packages/cli/src/api/workflowStats.api.ts b/packages/cli/src/api/workflowStats.api.ts index 9831621742..b8b23a9803 100644 --- a/packages/cli/src/api/workflowStats.api.ts +++ b/packages/cli/src/api/workflowStats.api.ts @@ -38,7 +38,7 @@ async function checkWorkflowId(workflowId: string, user: User): Promise } /** - * Initialise Logger if needed + * Initialize Logger if needed */ workflowStatsController.use((req, res, next) => { try { diff --git a/packages/cli/src/middlewares/basicAuth.ts b/packages/cli/src/middlewares/basicAuth.ts new file mode 100644 index 0000000000..7e41972fed --- /dev/null +++ b/packages/cli/src/middlewares/basicAuth.ts @@ -0,0 +1,57 @@ +import type { Application } from 'express'; +import basicAuth from 'basic-auth'; +// IMPORTANT! Do not switch to anther bcrypt library unless really necessary and +// tested with all possible systems like Windows, Alpine on ARM, FreeBSD, ... +import { compare } from 'bcryptjs'; +import type { Config } from '@/config'; +import { basicAuthAuthorizationError } from '@/ResponseHelper'; + +export const setupBasicAuth = async (app: Application, config: Config, authIgnoreRegex: RegExp) => { + const basicAuthUser = config.getEnv('security.basicAuth.user'); + if (basicAuthUser === '') { + throw new Error('Basic auth is activated but no user got defined. Please set one!'); + } + + const basicAuthPassword = config.getEnv('security.basicAuth.password'); + if (basicAuthPassword === '') { + throw new Error('Basic auth is activated but no password got defined. Please set one!'); + } + + const basicAuthHashEnabled = config.getEnv('security.basicAuth.hash'); + + let validPassword: null | string = null; + + app.use(async (req, res, next) => { + // Skip basic auth for a few listed endpoints or when instance owner has been setup + if (authIgnoreRegex.exec(req.url) || config.getEnv('userManagement.isInstanceOwnerSetUp')) { + return next(); + } + const realm = 'n8n - Editor UI'; + const basicAuthData = basicAuth(req); + + if (basicAuthData === undefined) { + // Authorization data is missing + return basicAuthAuthorizationError(res, realm, 'Authorization is required!'); + } + + if (basicAuthData.name === basicAuthUser) { + if (basicAuthHashEnabled) { + if (validPassword === null && (await compare(basicAuthData.pass, basicAuthPassword))) { + // Password is valid so save for future requests + validPassword = basicAuthData.pass; + } + + if (validPassword === basicAuthData.pass && validPassword !== null) { + // Provided hash is correct + return next(); + } + } else if (basicAuthData.pass === basicAuthPassword) { + // Provided password is correct + return next(); + } + } + + // Provided authentication data is wrong + return basicAuthAuthorizationError(res, realm, 'Authorization data is wrong!'); + }); +}; diff --git a/packages/cli/src/middlewares/externalJWTAuth.ts b/packages/cli/src/middlewares/externalJWTAuth.ts new file mode 100644 index 0000000000..91f622312d --- /dev/null +++ b/packages/cli/src/middlewares/externalJWTAuth.ts @@ -0,0 +1,89 @@ +import type { Application } from 'express'; +import jwt from 'jsonwebtoken'; +import jwks from 'jwks-rsa'; +import type { Config } from '@/config'; +import { jwtAuthAuthorizationError } from '@/ResponseHelper'; + +export const setupExternalJWTAuth = async ( + app: Application, + config: Config, + authIgnoreRegex: RegExp, +) => { + const jwtAuthHeader = config.getEnv('security.jwtAuth.jwtHeader'); + if (jwtAuthHeader === '') { + throw new Error('JWT auth is activated but no request header was defined. Please set one!'); + } + + const jwksUri = config.getEnv('security.jwtAuth.jwksUri'); + if (jwksUri === '') { + throw new Error('JWT auth is activated but no JWK Set URI was defined. Please set one!'); + } + + const jwtHeaderValuePrefix = config.getEnv('security.jwtAuth.jwtHeaderValuePrefix'); + const jwtIssuer = config.getEnv('security.jwtAuth.jwtIssuer'); + const jwtNamespace = config.getEnv('security.jwtAuth.jwtNamespace'); + const jwtAllowedTenantKey = config.getEnv('security.jwtAuth.jwtAllowedTenantKey'); + const jwtAllowedTenant = config.getEnv('security.jwtAuth.jwtAllowedTenant'); + + // eslint-disable-next-line no-inner-declarations + function isTenantAllowed(decodedToken: object): boolean { + if (jwtNamespace === '' || jwtAllowedTenantKey === '' || jwtAllowedTenant === '') { + return true; + } + + for (const [k, v] of Object.entries(decodedToken)) { + if (k === jwtNamespace) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + for (const [kn, kv] of Object.entries(v)) { + if (kn === jwtAllowedTenantKey && kv === jwtAllowedTenant) { + return true; + } + } + } + } + + return false; + } + + // eslint-disable-next-line consistent-return + app.use((req, res, next) => { + if (authIgnoreRegex.exec(req.url)) { + return next(); + } + + let token = req.header(jwtAuthHeader) as string; + if (token === undefined || token === '') { + return jwtAuthAuthorizationError(res, 'Missing token'); + } + + if (jwtHeaderValuePrefix !== '' && token.startsWith(jwtHeaderValuePrefix)) { + token = token.replace(`${jwtHeaderValuePrefix} `, '').trimStart(); + } + + const jwkClient = jwks({ cache: true, jwksUri }); + const getKey: jwt.GetPublicKeyOrSecret = (header, callbackFn) => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal + if (!header.kid) throw jwtAuthAuthorizationError(res, 'No JWT key found'); + jwkClient.getSigningKey(header.kid, (error, key) => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal + if (error) throw jwtAuthAuthorizationError(res, error.message); + callbackFn(null, key?.getPublicKey()); + }); + }; + + const jwtVerifyOptions: jwt.VerifyOptions = { + issuer: jwtIssuer !== '' ? jwtIssuer : undefined, + ignoreExpiration: false, + }; + + jwt.verify(token, getKey, jwtVerifyOptions, (error: jwt.VerifyErrors, decoded: object) => { + if (error) { + jwtAuthAuthorizationError(res, 'Invalid token'); + } else if (!isTenantAllowed(decoded)) { + jwtAuthAuthorizationError(res, 'Tenant not allowed'); + } else { + next(); + } + }); + }); +}; diff --git a/packages/cli/test/unit/middlewares/basicAuth.test.ts b/packages/cli/test/unit/middlewares/basicAuth.test.ts new file mode 100644 index 0000000000..d4d952c7cd --- /dev/null +++ b/packages/cli/test/unit/middlewares/basicAuth.test.ts @@ -0,0 +1,42 @@ +import express from 'express'; +import request from 'supertest'; +import config from '@/config'; +import { setupBasicAuth } from '@/middlewares/basicAuth'; + +describe('Basic Auth Middleware', () => { + let app: express.Application; + + beforeAll(() => { + app = express(); + config.set('security.basicAuth', { user: 'jim', password: 'n8n', hash: false }); + setupBasicAuth(app, config, new RegExp('^/skip-auth')); + app.get('/test', (req, res) => res.send({ auth: true })); + app.get('/skip-auth', (req, res) => res.send({ auth: false })); + }); + + it('should not block calls to /skip-auth', async () => { + const response = await request(app).get('/skip-auth'); + expect(response.statusCode).toEqual(200); + expect(response.headers).not.toHaveProperty('www-authenticate'); + expect(response.body).toEqual({ auth: false }); + }); + + it('should block calls to /test if auth is absent', async () => { + const response = await request(app).get('/test'); + expect(response.statusCode).toEqual(401); + expect(response.headers).toHaveProperty('www-authenticate'); + }); + + it('should block calls to /test if auth is invalid', async () => { + const response = await request(app).get('/test').auth('user', 'invalid'); + expect(response.statusCode).toEqual(401); + expect(response.headers).toHaveProperty('www-authenticate'); + }); + + it('should allow access to /test if basic auth header is valid', async () => { + const response = await request(app).get('/test').auth('jim', 'n8n'); + expect(response.statusCode).toEqual(200); + expect(response.headers).not.toHaveProperty('www-authenticate'); + expect(response.body).toEqual({ auth: true }); + }); +}); diff --git a/packages/cli/test/unit/middlewares/externalJWTAuth.test.ts b/packages/cli/test/unit/middlewares/externalJWTAuth.test.ts new file mode 100644 index 0000000000..42b2b19af4 --- /dev/null +++ b/packages/cli/test/unit/middlewares/externalJWTAuth.test.ts @@ -0,0 +1,47 @@ +import express from 'express'; +import request from 'supertest'; +import createJWKSMock from 'mock-jwks'; +import config from '@/config'; +import { setupExternalJWTAuth } from '@/middlewares/externalJWTAuth'; + +const testJWKUri = 'https://n8n.test/'; +const jwksMock = createJWKSMock(testJWKUri); + +describe('External JWT Auth Middleware', () => { + let app: express.Application; + + beforeAll(() => { + app = express(); + config.set('security.jwtAuth.jwtHeader', 'Authorization'); + config.set('security.jwtAuth.jwtHeaderValuePrefix', 'Bearer'); + config.set('security.jwtAuth.jwtIssuer', 'n8n'); + config.set('security.jwtAuth.jwksUri', `${testJWKUri}.well-known/jwks.json`); + setupExternalJWTAuth(app, config, new RegExp('^/skip-auth')); + app.get('/test', (req, res) => res.send({ auth: true })); + app.get('/skip-auth', (req, res) => res.send({ auth: false })); + + jwksMock.start(); + }); + + it('should not block calls to /skip-auth', async () => { + const response = await request(app).get('/skip-auth'); + expect(response.statusCode).toEqual(200); + expect(response.body).toEqual({ auth: false }); + }); + + it('should block calls to /test if auth is absent', async () => + request(app).get('/test').expect(403)); + + it('should block calls to /test if auth is invalid', async () => { + const token = jwksMock.token({ iss: 'invalid' }); + const response = await request(app).get('/test').set('Authorization', `Bearer ${token}`); + expect(response.statusCode).toEqual(403); + }); + + it('should allow access to /test if JWT auth header is valid', async () => { + const token = jwksMock.token({ iss: 'n8n' }); + const response = await request(app).get('/test').set('Authorization', `Bearer ${token}`); + expect(response.statusCode).toEqual(200); + expect(response.body).toEqual({ auth: true }); + }); +}); diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index e50d1f27d3..43db4411d4 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -730,7 +730,7 @@ "devDependencies": { "@types/amqplib": "^0.10.1", "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.2", + "@types/basic-auth": "^1.1.3", "@types/cheerio": "^0.22.15", "@types/cron": "~1.7.1", "@types/eventsource": "^1.1.2", @@ -738,7 +738,7 @@ "@types/formidable": "^1.0.31", "@types/gm": "^1.18.2", "@types/imap-simple": "^4.2.0", - "@types/jsonwebtoken": "^9.0.0", + "@types/jsonwebtoken": "^9.0.1", "@types/lodash.set": "^4.3.6", "@types/lossless-json": "^1.0.0", "@types/mailparser": "^2.7.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d01f240c21..69ca8293f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ onlyBuiltDependencies: - vue-demi overrides: + '@types/node': ^16.18.12 browserslist: ^4.21.4 ejs: ^3.1.8 fork-ts-checker-webpack-plugin: ^6.0.4 @@ -25,7 +26,7 @@ importers: '@n8n_io/eslint-config': '*' '@ngneat/falso': ^6.1.0 '@types/jest': ^29.2.2 - '@types/node': ^16.11.22 + '@types/supertest': ^2.0.12 cross-env: ^7.0.3 cypress: ^10.0.3 cypress-real-events: ^1.7.6 @@ -39,7 +40,7 @@ importers: rimraf: ^3.0.2 run-script-os: ^1.0.7 start-server-and-test: ^1.14.0 - supertest: ^6.2.2 + supertest: ^6.3.3 ts-jest: ^29.0.3 tsc-watch: ^5.0.3 turbo: 1.6.3 @@ -50,11 +51,11 @@ importers: '@n8n_io/eslint-config': link:packages/@n8n_io/eslint-config '@ngneat/falso': 6.1.0 '@types/jest': 29.2.2 - '@types/node': 16.11.65 + '@types/supertest': 2.0.12 cross-env: 7.0.3 cypress: 10.11.0 cypress-real-events: 1.7.6_cypress@10.11.0 - jest: 29.3.1_@types+node@16.11.65 + jest: 29.3.1 jest-environment-jsdom: 29.3.1 jest-mock: 29.3.1 nock: 13.2.9 @@ -63,7 +64,7 @@ importers: rimraf: 3.0.2 run-script-os: 1.1.6 start-server-and-test: 1.14.0 - supertest: 6.3.0 + supertest: 6.3.3 ts-jest: 29.0.3_s73gpqhbuwbfokcbq32jn3f4zi tsc-watch: 5.0.3_typescript@4.8.4 turbo: 1.6.3 @@ -110,7 +111,7 @@ importers: '@rudderstack/rudder-sdk-node': 1.0.6 '@sentry/integrations': ^7.28.1 '@sentry/node': ^7.28.1 - '@types/basic-auth': ^1.1.2 + '@types/basic-auth': ^1.1.3 '@types/bcryptjs': ^2.4.2 '@types/body-parser-xml': ^2.0.2 '@types/compression': 1.0.1 @@ -119,7 +120,7 @@ importers: '@types/cookie-parser': ^1.4.2 '@types/express': ^4.17.6 '@types/json-diff': ^0.5.1 - '@types/jsonwebtoken': ^9.0.0 + '@types/jsonwebtoken': ^9.0.1 '@types/localtunnel': ^1.9.0 '@types/lodash.get': ^4.4.6 '@types/lodash.intersection': ^4.4.7 @@ -141,7 +142,6 @@ importers: '@types/send': ^0.17.1 '@types/shelljs': ^0.8.11 '@types/superagent': 4.1.13 - '@types/supertest': ^2.0.11 '@types/swagger-ui-express': ^4.1.3 '@types/syslog-client': ^1.1.2 '@types/uuid': ^8.3.2 @@ -179,7 +179,7 @@ importers: json-diff: ^0.5.4 jsonschema: ^1.4.1 jsonwebtoken: 9.0.0 - jwks-rsa: ~1.12.1 + jwks-rsa: ^3.0.1 ldapts: ^4.2.2 localtunnel: ^2.0.0 lodash.get: ^4.4.2 @@ -196,6 +196,7 @@ importers: lodash.uniqby: ^4.7.0 lodash.unset: ^4.5.2 luxon: ^3.1.0 + mock-jwks: ^1.0.9 mysql2: ~2.3.3 n8n-core: ~0.153.0 n8n-editor-ui: ~0.180.2 @@ -223,7 +224,6 @@ importers: source-map-support: ^0.5.21 sqlite3: ^5.1.4 sse-channel: ^4.0.0 - supertest: ^6.2.2 swagger-ui-express: ^4.3.0 syslog-client: ^1.1.1 ts-node: ^9.1.1 @@ -274,7 +274,7 @@ importers: json-diff: 0.5.5 jsonschema: 1.4.1 jsonwebtoken: 9.0.0 - jwks-rsa: 1.12.3 + jwks-rsa: 3.0.1 ldapts: 4.2.2 localtunnel: 2.0.2 lodash.get: 4.4.2 @@ -336,7 +336,7 @@ importers: '@types/cookie-parser': 1.4.3 '@types/express': 4.17.14 '@types/json-diff': 0.5.2 - '@types/jsonwebtoken': 9.0.0 + '@types/jsonwebtoken': 9.0.1 '@types/localtunnel': 1.9.0 '@types/lodash.get': 4.4.7 '@types/lodash.intersection': 4.4.7 @@ -358,16 +358,15 @@ importers: '@types/send': 0.17.1 '@types/shelljs': 0.8.11 '@types/superagent': 4.1.13 - '@types/supertest': 2.0.12 '@types/swagger-ui-express': 4.1.3 '@types/syslog-client': 1.1.2 '@types/uuid': 8.3.4 '@types/validator': 13.7.7 '@types/yamljs': 0.2.31 concurrently: 5.3.0 + mock-jwks: 1.0.9_nock@13.2.9 nodemon: 2.0.20 run-script-os: 1.1.6 - supertest: 6.3.0 ts-node: 9.1.1_typescript@4.9.4 tsc-alias: 1.7.1 tsconfig-paths: 3.14.1 @@ -737,7 +736,7 @@ importers: '@kafkajs/confluent-schema-registry': 1.0.6 '@types/amqplib': ^0.10.1 '@types/aws4': ^1.5.1 - '@types/basic-auth': ^1.1.2 + '@types/basic-auth': ^1.1.3 '@types/cheerio': ^0.22.15 '@types/cron': ~1.7.1 '@types/eventsource': ^1.1.2 @@ -746,7 +745,7 @@ importers: '@types/gm': ^1.18.2 '@types/imap-simple': ^4.2.0 '@types/js-nacl': ^1.3.0 - '@types/jsonwebtoken': ^9.0.0 + '@types/jsonwebtoken': ^9.0.1 '@types/lodash.set': ^4.3.6 '@types/lossless-json': ^1.0.0 '@types/mailparser': ^2.7.3 @@ -893,7 +892,7 @@ importers: '@types/formidable': 1.2.5 '@types/gm': 1.18.12 '@types/imap-simple': 4.2.5 - '@types/jsonwebtoken': 9.0.0 + '@types/jsonwebtoken': 9.0.1 '@types/lodash.set': 4.3.7 '@types/lossless-json': 1.0.1 '@types/mailparser': 2.7.4 @@ -3422,7 +3421,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 chalk: 4.1.2 jest-message-util: 29.3.1 jest-util: 29.3.1 @@ -3443,14 +3442,14 @@ packages: '@jest/test-result': 29.3.1 '@jest/transform': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.5.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.2.0 - jest-config: 29.3.1_@types+node@16.11.65 + jest-config: 29.3.1_@types+node@16.18.12 jest-haste-map: 29.3.1 jest-message-util: 29.3.1 jest-regex-util: 29.2.0 @@ -3477,7 +3476,7 @@ packages: dependencies: '@jest/fake-timers': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-mock: 29.3.1 dev: true @@ -3504,7 +3503,7 @@ packages: dependencies: '@jest/types': 29.3.1 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-message-util: 29.3.1 jest-mock: 29.3.1 jest-util: 29.3.1 @@ -3537,7 +3536,7 @@ packages: '@jest/transform': 29.3.1 '@jest/types': 29.3.1 '@jridgewell/trace-mapping': 0.3.16 - '@types/node': 16.11.65 + '@types/node': 16.18.12 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3647,7 +3646,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 16.18.12 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -3659,7 +3658,7 @@ packages: '@jest/schemas': 29.0.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 16.18.12 '@types/yargs': 17.0.19 chalk: 4.1.2 dev: true @@ -4865,7 +4864,7 @@ packages: '@storybook/store': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty '@storybook/theming': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty '@storybook/ui': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/webpack': 4.41.33 autoprefixer: 9.8.8 babel-loader: 8.3.0_nwtvwtk5tmh22l2urnqucz7kqu @@ -5081,7 +5080,7 @@ packages: '@babel/register': 7.18.9_@babel+core@7.20.12 '@storybook/node-logger': 6.5.15 '@storybook/semver': 7.3.2 - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/pretty-hrtime': 1.0.1 babel-loader: 8.3.0_nwtvwtk5tmh22l2urnqucz7kqu babel-plugin-macros: 3.1.0 @@ -5152,7 +5151,7 @@ packages: '@babel/register': 7.18.9_@babel+core@7.20.12 '@storybook/node-logger': 6.5.15 '@storybook/semver': 7.3.2 - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/pretty-hrtime': 1.0.1 babel-loader: 8.3.0_nwtvwtk5tmh22l2urnqucz7kqu babel-plugin-macros: 3.1.0 @@ -5223,7 +5222,7 @@ packages: '@storybook/semver': 7.3.2 '@storybook/store': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty '@storybook/telemetry': 6.5.15_osrebwaanaolfmicoqxqxv5ftu - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/node-fetch': 2.6.2 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.33 @@ -5391,7 +5390,7 @@ packages: '@storybook/node-logger': 6.5.15 '@storybook/theming': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty '@storybook/ui': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/webpack': 4.41.33 babel-loader: 8.3.0_nwtvwtk5tmh22l2urnqucz7kqu case-sensitive-paths-webpack-plugin: 2.4.0 @@ -5725,7 +5724,7 @@ packages: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty '@storybook/store': 6.5.15_wcqkhtmu7mswc6yz4uyexck3ty - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/webpack-env': 1.18.0 babel-loader: 8.3.0_nwtvwtk5tmh22l2urnqucz7kqu core-js: 3.27.1 @@ -5832,7 +5831,7 @@ packages: /@types/amqplib/0.10.1: resolution: {integrity: sha512-j6ANKT79ncUDnAs/+9r9eDujxbeJoTjoVu33gHHcaPfmLQaMhvfbH2GqSe8KUM444epAp1Vl3peVOQfZk3UIqA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/aria-query/4.2.2: @@ -5842,13 +5841,13 @@ packages: /@types/asn1/0.2.0: resolution: {integrity: sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: false /@types/aws4/1.11.2: resolution: {integrity: sha512-x0f96eBPrCCJzJxdPbUvDFRva4yPpINJzTuXXpmS2j9qLUpF2nyGzvXPlRziuGbCsPukwY4JfuO+8xwsoZLzGw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/babel__core/7.1.19: @@ -5883,7 +5882,7 @@ packages: /@types/basic-auth/1.1.3: resolution: {integrity: sha512-W3rv6J0IGlxqgE2eQ2pTb0gBjaGtejQpJ6uaCjz3UQ65+TFTPC5/lAE+POfx1YLdjtxvejJzsIAfd3MxWiVmfg==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/bcryptjs/2.4.2: @@ -5900,7 +5899,7 @@ packages: '@types/body-parser': 1.19.2 '@types/connect': 3.4.35 '@types/express-serve-static-core': 4.17.31 - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/xml2js': 0.4.11 dev: true @@ -5908,7 +5907,7 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 16.11.65 + '@types/node': 16.18.12 /@types/caseless/0.12.2: resolution: {integrity: sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==} @@ -5927,7 +5926,7 @@ packages: /@types/cheerio/0.22.31: resolution: {integrity: sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/compression/1.0.1: @@ -5939,20 +5938,20 @@ packages: /@types/concat-stream/2.0.0: resolution: {integrity: sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/connect-history-api-fallback/1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.31 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 /@types/convict/4.2.1: resolution: {integrity: sha512-2cd51m3i0yeY1i3dKxcqJKeS5Q4jZnjP37OseoNeIX1OM0AhmGPuuYmwJ9OqtsU35YrREQxdb2VeX5sM3cwGMQ==} @@ -5971,7 +5970,7 @@ packages: /@types/cron/1.7.3: resolution: {integrity: sha512-iPmUXyIJG1Js+ldPYhOQcYU3kCAQ2FWrSkm1FJPoii2eYSn6wEW6onPukNTT0bfiflexNSRPl6KWmAIqS+36YA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 moment: 2.29.4 dev: true @@ -5986,7 +5985,7 @@ packages: /@types/es-aggregate-error/1.0.2: resolution: {integrity: sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: false /@types/eslint-scope/3.7.4: @@ -6015,26 +6014,13 @@ packages: resolution: {integrity: sha512-F3K4oyM12o8W9jxuJmW+1sc8kdw0Hj0t+26urwkcolPJTgkfppEfIdftdcXmUU2QPBIwcrYO6diqgIqgCDf1FA==} dev: true - /@types/express-jwt/0.0.42: - resolution: {integrity: sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==} - dependencies: - '@types/express': 4.17.14 - '@types/express-unless': 0.5.3 - dev: false - /@types/express-serve-static-core/4.17.31: resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - /@types/express-unless/0.5.3: - resolution: {integrity: sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==} - dependencies: - '@types/express': 4.17.14 - dev: false - /@types/express/4.17.14: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: @@ -6050,44 +6036,44 @@ packages: /@types/formidable/1.2.5: resolution: {integrity: sha512-zu3mQJa4hDNubEMViSj937602XdDGzK7Q5pJ5QmLUbNxclbo9tZGt5jtwM352ssZ+pqo5V4H14TBvT/ALqQQcA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/ftp/0.3.33: resolution: {integrity: sha512-L7wFlX3t9GsGgNS0oxLt6zbAZZGgsdptMmciL4cdxHmbL3Hz4Lysh8YqAR34eHsJ1uacJITcZBBDl5XpQlxPpQ==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/generic-pool/3.1.11: resolution: {integrity: sha512-3mcD3ewmaKPbiAZglGj8We4ohlSMfw/xS+bbYUhTv/ALgqrrtJjyL4Ju9IgapXooBCTFEew5LAKQqzZV6/43xg==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/glob/8.0.0: resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 16.18.11 + '@types/node': 16.18.12 dev: true /@types/gm/1.18.12: resolution: {integrity: sha512-k3Gd15Ywy75FiFQUsrqpKD42rhMdHaETyw2zjK9u3xbrH1c7nS+npSb19yjPCqR8KxeL7vw2zJF4Kl2bAca0aQ==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 16.18.12 dev: true /@types/hast/2.3.4: @@ -6108,13 +6094,13 @@ packages: resolution: {integrity: sha512-Sfu70sdFXzVIhivsflpanlED8gZr4VRzz2AVU9i1ARU8gskr9nDd4tVGkqYtxfwajQfZDklkXbeHSOZYEeJmTQ==} dependencies: '@types/imap': 0.8.35 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/imap/0.8.35: resolution: {integrity: sha512-4Tk8lGFvRFYCEaHxb2BZFZPs2XiYBSboEbb1Kq1oBqA2aRqPV0pjzyXGpMKi9jILsDPlrG7s0EFnnh8qb3h3ww==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/inquirer/6.5.0: @@ -6169,7 +6155,7 @@ packages: /@types/jsdom/20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/tough-cookie': 4.0.2 parse5: 7.1.1 dev: true @@ -6189,11 +6175,10 @@ packages: resolution: {integrity: sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==} dev: true - /@types/jsonwebtoken/9.0.0: - resolution: {integrity: sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==} + /@types/jsonwebtoken/9.0.1: + resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 16.11.65 - dev: true + '@types/node': 16.18.12 /@types/linkify-it/3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} @@ -6317,7 +6302,7 @@ packages: /@types/mailparser/2.7.4: resolution: {integrity: sha512-JGIV4RtcjBO1jsD0RTDoXOmm1zzHr07rWPmNREBBM1oAjjfy99Ne4Y7s/akVSZoksm/JWQMcFQ42LbsufHRVfg==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/markdown-it-emoji/2.0.2: @@ -6367,7 +6352,7 @@ packages: /@types/mssql/6.0.8: resolution: {integrity: sha512-N3dr3o1c6EXhHhhNRaKpLTdAoXT/s6qDEJET5FID2gFCj58vIV9q/7RtkvYdE6ntpkJF5F9hpURhxT/oC62yLw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/tedious': 4.0.9 dev: true @@ -6380,35 +6365,24 @@ packages: /@types/node-fetch/2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 16.18.11 + '@types/node': 16.18.12 form-data: 3.0.1 /@types/node-ssh/7.0.1: resolution: {integrity: sha512-98EuH7UQl/WWwwDxpbANQ76HwBdzcSnC9zLSdrtVW7jjYeOTQ6TxBygbGwzZR4ho1agbd941UnHCdrXz2sS8JQ==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/ssh2': 1.11.6 '@types/ssh2-streams': 0.1.9 dev: true - /@types/node/14.18.33: - resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==} - dev: true - - /@types/node/16.11.65: - resolution: {integrity: sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==} - - /@types/node/16.18.11: - resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} - - /@types/node/18.11.18: - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - dev: true + /@types/node/16.18.12: + resolution: {integrity: sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==} /@types/nodemailer/6.4.6: resolution: {integrity: sha512-pD6fL5GQtUKvD2WnPmg5bC2e8kWCAPDwMPmHe/ohQbW+Dy0EcHgZ2oCSuPlWNqk74LS5BVMig1SymQbFMPPK3w==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/normalize-package-data/2.4.1: @@ -6430,14 +6404,14 @@ packages: /@types/parseurl/1.3.1: resolution: {integrity: sha512-sAfjGAYgJ/MZsk95f3ByThfJgasZk1hWJROghBwfKnLLNANEAG/WHckAcT6HNqx2sHwVlci7OAX7k1KYpOcgMw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/passport-jwt/3.0.7: resolution: {integrity: sha512-qRQ4qlww1Yhs3IaioDKrsDNmKy6gLDLgFsGwpCnc2YqWovO2Oxu9yCQdWHMJafQ7UIuOba4C4/TNXcGkQfEjlQ==} dependencies: '@types/express': 4.17.14 - '@types/jsonwebtoken': 9.0.0 + '@types/jsonwebtoken': 9.0.1 '@types/passport-strategy': 0.2.35 dev: true @@ -6475,7 +6449,7 @@ packages: dependencies: '@types/bluebird': 3.5.37 '@types/ftp': 0.3.33 - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/promise-ftp-common': 1.1.0 dev: true @@ -6492,7 +6466,7 @@ packages: /@types/redis/2.8.32: resolution: {integrity: sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/replacestream/4.0.1: @@ -6509,7 +6483,7 @@ packages: resolution: {integrity: sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==} dependencies: '@types/caseless': 0.12.2 - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/tough-cookie': 4.0.2 form-data: 2.5.1 dev: true @@ -6528,20 +6502,20 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/serve-static/1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 /@types/shelljs/0.8.11: resolution: {integrity: sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw==} dependencies: '@types/glob': 8.0.0 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/showdown/1.9.4: @@ -6560,7 +6534,7 @@ packages: resolution: {integrity: sha512-hf7YoxKjdk22VtKBR7/vCSYSv/YyHhbkTiZ+Dk/UnC83GMYOFaXbZktt0cIP98rmhk4V8nGpbpEivV4y6GUFNw==} dependencies: '@types/generic-pool': 3.1.11 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/source-list-map/0.1.2: @@ -6576,13 +6550,13 @@ packages: /@types/ssh2-streams/0.1.9: resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/ssh2/1.11.6: resolution: {integrity: sha512-8Mf6bhzYYBLEB/G6COux7DS/F5bCWwojv/qFo2yH/e4cLzAavJnxvFXrYW59iKfXdhG6OmzJcXDasgOb/s0rxw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/stack-utils/2.0.1: @@ -6593,7 +6567,7 @@ packages: resolution: {integrity: sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/supertest/2.0.12: @@ -6612,7 +6586,7 @@ packages: /@types/syslog-client/1.1.2: resolution: {integrity: sha512-X8MwGedXYNmYltPDaZQCM9X6cSdfFbJZWhrU81gWKsg+Q6mSgRWs/12Mq9nHaUV4wqMYDNrnytbwbMUiVnWegw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/tapable/1.0.8: @@ -6622,7 +6596,7 @@ packages: /@types/tedious/4.0.9: resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/testing-library__jest-dom/5.14.5: @@ -6634,7 +6608,7 @@ packages: /@types/through/0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/tmp/0.2.3: @@ -6656,7 +6630,7 @@ packages: /@types/tunnel/0.0.3: resolution: {integrity: sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: false /@types/uglify-js/3.17.1: @@ -6700,7 +6674,7 @@ packages: /@types/webpack-sources/3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/source-list-map': 0.1.2 source-map: 0.7.4 dev: true @@ -6708,7 +6682,7 @@ packages: /@types/webpack/4.41.33: resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} dependencies: - '@types/node': 16.18.11 + '@types/node': 16.18.12 '@types/tapable': 1.0.8 '@types/uglify-js': 3.17.1 '@types/webpack-sources': 3.2.0 @@ -6719,14 +6693,14 @@ packages: /@types/whatwg-url/8.2.2: resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/webidl-conversions': 7.0.0 dev: false /@types/xml2js/0.4.11: resolution: {integrity: sha512-JdigeAKmCyoJUiQljjr7tQG3if9NkqGUgwEUqBvV0N7LM4HyQk7UXCnusRa1lnvXAEYJ8mw8GtZWioagNztOwA==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true /@types/yamljs/0.2.31: @@ -6752,7 +6726,7 @@ packages: /@types/yauzl/2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 dev: true optional: true @@ -8147,14 +8121,6 @@ packages: transitivePeerDependencies: - debug - /axios/0.21.4_debug@4.3.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - dependencies: - follow-redirects: 1.15.2_debug@4.3.4 - transitivePeerDependencies: - - debug - dev: false - /axios/0.27.2: resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} dependencies: @@ -8407,6 +8373,11 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + /base64-url/2.3.3: + resolution: {integrity: sha512-dLMhIsK7OplcDauDH/tZLvK7JmUZK3A7KiQpjNzsBrM6Etw7hzNI1tLEywqJk9NnwkgWuFKSlx/IUO7vF6Mo8Q==} + engines: {node: '>=6'} + dev: true + /basic-auth/2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} @@ -8686,7 +8657,6 @@ packages: /buffer-equal-constant-time/1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: false /buffer-equal/1.0.1: resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} @@ -9931,8 +9901,8 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookiejar/2.1.3: - resolution: {integrity: sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==} + /cookiejar/2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} dev: true /copy-concurrently/1.0.5: @@ -10308,7 +10278,7 @@ packages: dependencies: '@cypress/request': 2.88.10 '@cypress/xvfb': 1.2.4_supports-color@8.1.1 - '@types/node': 14.18.33 + '@types/node': 16.18.12 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 arch: 2.2.0 @@ -10700,8 +10670,8 @@ packages: - supports-color dev: true - /dezalgo/1.0.3: - resolution: {integrity: sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==} + /dezalgo/1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} dependencies: asap: 2.0.6 wrappy: 1.0.2 @@ -10936,7 +10906,6 @@ packages: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 - dev: false /editorconfig/0.15.3: resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} @@ -11116,7 +11085,7 @@ packages: is-shared-array-buffer: 1.0.2 is-string: 1.0.7 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 @@ -12333,18 +12302,6 @@ packages: dependencies: debug: 4.3.2 - /follow-redirects/1.15.2_debug@4.3.4: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: - debug: 4.3.4 - dev: false - /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -12443,13 +12400,13 @@ packages: deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' dev: false - /formidable/2.0.1: - resolution: {integrity: sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==} + /formidable/2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} dependencies: - dezalgo: 1.0.3 + dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.9.3 + qs: 6.11.0 dev: true /formstream/1.1.1: @@ -14329,7 +14286,7 @@ packages: '@jest/expect': 29.3.1 '@jest/test-result': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -14348,7 +14305,7 @@ packages: - supports-color dev: true - /jest-cli/29.3.1_@types+node@16.11.65: + /jest-cli/29.3.1: resolution: {integrity: sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14365,7 +14322,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.3.1_@types+node@16.11.65 + jest-config: 29.3.1 jest-util: 29.3.1 jest-validate: 29.3.1 prompts: 2.4.2 @@ -14376,7 +14333,7 @@ packages: - ts-node dev: true - /jest-config/29.3.1_@types+node@16.11.65: + /jest-config/29.3.1: resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -14391,7 +14348,45 @@ packages: '@babel/core': 7.19.3 '@jest/test-sequencer': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + babel-jest: 29.3.1_@babel+core@7.19.3 + chalk: 4.1.2 + ci-info: 3.5.0 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 29.3.1 + jest-environment-node: 29.3.1 + jest-get-type: 29.2.0 + jest-regex-util: 29.2.0 + jest-resolve: 29.3.1 + jest-runner: 29.3.1 + jest-util: 29.3.1 + jest-validate: 29.3.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.3.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-config/29.3.1_@types+node@16.18.12: + resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.19.3 + '@jest/test-sequencer': 29.3.1 + '@jest/types': 29.3.1 + '@types/node': 16.18.12 babel-jest: 29.3.1_@babel+core@7.19.3 chalk: 4.1.2 ci-info: 3.5.0 @@ -14456,7 +14451,7 @@ packages: '@jest/fake-timers': 29.3.1 '@jest/types': 29.3.1 '@types/jsdom': 20.0.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-mock: 29.3.1 jest-util: 29.3.1 jsdom: 20.0.2 @@ -14473,7 +14468,7 @@ packages: '@jest/environment': 29.3.1 '@jest/fake-timers': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-mock: 29.3.1 jest-util: 29.3.1 dev: true @@ -14489,7 +14484,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 16.18.12 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -14512,7 +14507,7 @@ packages: dependencies: '@jest/types': 29.3.1 '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.65 + '@types/node': 16.18.12 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -14563,7 +14558,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-util: 29.3.1 dev: true @@ -14623,7 +14618,7 @@ packages: '@jest/test-result': 29.3.1 '@jest/transform': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -14654,7 +14649,7 @@ packages: '@jest/test-result': 29.3.1 '@jest/transform': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -14677,7 +14672,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 18.11.18 + '@types/node': 16.18.12 graceful-fs: 4.2.10 dev: true @@ -14718,7 +14713,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 16.18.12 chalk: 4.1.2 graceful-fs: 4.2.10 is-ci: 2.0.0 @@ -14730,7 +14725,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 18.11.18 + '@types/node': 16.18.12 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 @@ -14755,7 +14750,7 @@ packages: dependencies: '@jest/test-result': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 16.11.65 + '@types/node': 16.18.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -14767,7 +14762,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 16.18.12 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -14776,7 +14771,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 16.18.12 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -14785,13 +14780,13 @@ packages: resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.12 jest-util: 29.3.1 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.3.1_@types+node@16.11.65: + /jest/29.3.1: resolution: {integrity: sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14804,7 +14799,7 @@ packages: '@jest/core': 29.3.1 '@jest/types': 29.3.1 import-local: 3.1.0 - jest-cli: 29.3.1_@types+node@16.11.65 + jest-cli: 29.3.1 transitivePeerDependencies: - '@types/node' - supports-color @@ -14830,6 +14825,10 @@ packages: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} dev: false + /jose/4.11.2: + resolution: {integrity: sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==} + dev: false + /jquery/3.6.1: resolution: {integrity: sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==} dev: false @@ -15134,7 +15133,6 @@ packages: lodash: 4.17.21 ms: 2.1.3 semver: 7.3.8 - dev: false /jsprim/1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} @@ -15178,7 +15176,6 @@ packages: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: false /jwa/2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} @@ -15188,19 +15185,16 @@ packages: safe-buffer: 5.2.1 dev: false - /jwks-rsa/1.12.3: - resolution: {integrity: sha512-cFipFDeYYaO9FhhYJcZWX/IyZgc0+g316rcHnDpT2dNRNIE/lMOmWKKqp09TkJoYlNFzrEVODsR4GgXJMgWhnA==} + /jwks-rsa/3.0.1: + resolution: {integrity: sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==} + engines: {node: '>=14'} dependencies: - '@types/express-jwt': 0.0.42 - axios: 0.21.4_debug@4.3.4 + '@types/express': 4.17.14 + '@types/jsonwebtoken': 9.0.1 debug: 4.3.4 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - jsonwebtoken: 9.0.0 + jose: 4.11.2 limiter: 1.1.5 lru-memoizer: 2.1.4 - ms: 2.1.3 - proxy-from-env: 1.1.0 transitivePeerDependencies: - supports-color dev: false @@ -15210,7 +15204,6 @@ packages: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: false /jws/4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} @@ -15310,7 +15303,7 @@ packages: engines: {node: '>=14'} dependencies: '@types/asn1': 0.2.0 - '@types/node': 16.11.65 + '@types/node': 16.18.12 '@types/uuid': 9.0.0 asn1: 0.2.6 debug: 4.3.4 @@ -16290,6 +16283,18 @@ packages: ufo: 1.0.1 dev: true + /mock-jwks/1.0.9_nock@13.2.9: + resolution: {integrity: sha512-kshOXv5h5hA5bGR0Mb2S24GFdKkFvrWoRTv3phLRKH/HRu/UoPUx0zJLAorOE8SmFtGsfOTPFD7jfQD5Y9ZlZA==} + peerDependencies: + nock: ^11 || ^12 || ^13 + dependencies: + base64-url: 2.3.3 + jsonwebtoken: 9.0.0 + nock: 13.2.9 + node-forge: 1.3.1 + node-rsa: 1.1.1 + dev: true + /mock-require/3.0.3: resolution: {integrity: sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==} engines: {node: '>=4.3.0'} @@ -16632,6 +16637,11 @@ packages: whatwg-url: 5.0.0 dev: true + /node-forge/1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: true + /node-gyp-build-optional-packages/5.0.3: resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} hasBin: true @@ -16728,7 +16738,6 @@ packages: resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} dependencies: asn1: 0.2.6 - dev: false /node-ssh/12.0.5: resolution: {integrity: sha512-uN2GTGdBRUUKkZmcNBr9OM+xKL6zq74emnkSyb1TshBdVWegj3boue6QallQeqZzo7YGVheP5gAovUL+8hZSig==} @@ -16935,9 +16944,6 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - /object-inspect/1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -18479,11 +18485,6 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - /qs/6.9.3: - resolution: {integrity: sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==} - engines: {node: '>=0.6'} - dev: true - /query-string/7.1.1: resolution: {integrity: sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==} engines: {node: '>=6'} @@ -20557,17 +20558,16 @@ packages: inline-style-parser: 0.1.1 dev: true - /superagent/8.0.2: - resolution: {integrity: sha512-QtYZ9uaNAMexI7XWl2vAXAh0j4q9H7T0WVEI/y5qaUB3QLwxo+voUgCQ217AokJzUTIVOp0RTo7fhZrwhD7A2Q==} + /superagent/8.0.9: + resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please use v8.0.0 until https://github.com/visionmedia/superagent/issues/1743 is resolved dependencies: component-emitter: 1.3.0 - cookiejar: 2.1.3 + cookiejar: 2.1.4 debug: 4.3.4 fast-safe-stringify: 2.1.1 form-data: 4.0.0 - formidable: 2.0.1 + formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 qs: 6.11.0 @@ -20576,12 +20576,12 @@ packages: - supports-color dev: true - /supertest/6.3.0: - resolution: {integrity: sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==} + /supertest/6.3.3: + resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} engines: {node: '>=6.4.0'} dependencies: methods: 1.1.2 - superagent: 8.0.2 + superagent: 8.0.9 transitivePeerDependencies: - supports-color dev: true @@ -21196,7 +21196,7 @@ packages: '@babel/core': 7.19.3 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.3.1_@types+node@16.11.65 + jest: 29.3.1 jest-util: 29.3.1 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -22114,7 +22114,7 @@ packages: replace-ext: 1.0.1 dev: true - /vite-node/0.27.2_7rfoeown37vwv4fneiebr6nt2u: + /vite-node/0.27.2_lydj4ordo26cwwlynpu7uqrnl4: resolution: {integrity: sha512-IDwuVhslF10qCnWOGJui7/2KksAOBHi+UbVo6Pqt4f5lgn+kS2sVvYDsETRG5PSuslisGB5CFGvb9I6FQgymBQ==} engines: {node: '>=v14.16.0'} hasBin: true @@ -22126,7 +22126,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.0.4_7rfoeown37vwv4fneiebr6nt2u + vite: 4.0.4_lydj4ordo26cwwlynpu7uqrnl4 transitivePeerDependencies: - '@types/node' - less @@ -22137,7 +22137,7 @@ packages: - terser dev: true - /vite-node/0.27.2_ovmyjmuuyckt3r3gpaexj2onji: + /vite-node/0.27.2_uuaiuqsfc4gpri2fkjqkscjfse: resolution: {integrity: sha512-IDwuVhslF10qCnWOGJui7/2KksAOBHi+UbVo6Pqt4f5lgn+kS2sVvYDsETRG5PSuslisGB5CFGvb9I6FQgymBQ==} engines: {node: '>=v14.16.0'} hasBin: true @@ -22149,7 +22149,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji + vite: 4.0.4_uuaiuqsfc4gpri2fkjqkscjfse transitivePeerDependencies: - '@types/node' - less @@ -22168,7 +22168,7 @@ packages: monaco-editor: 0.33.0 dev: true - /vite/4.0.4_7rfoeown37vwv4fneiebr6nt2u: + /vite/4.0.4_lydj4ordo26cwwlynpu7uqrnl4: resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -22193,7 +22193,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.11.18 + '@types/node': 16.18.12 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 @@ -22204,41 +22204,6 @@ packages: fsevents: 2.3.2 dev: true - /vite/4.0.4_ovmyjmuuyckt3r3gpaexj2onji: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.11.18 - esbuild: 0.16.17 - postcss: 8.4.21 - resolve: 1.22.1 - rollup: 3.10.0 - sass: 1.57.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite/4.0.4_sass@1.55.0+terser@5.16.1: resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -22308,6 +22273,41 @@ packages: fsevents: 2.3.2 dev: true + /vite/4.0.4_uuaiuqsfc4gpri2fkjqkscjfse: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 16.18.12 + esbuild: 0.16.17 + postcss: 8.4.21 + resolve: 1.22.1 + rollup: 3.10.0 + sass: 1.57.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vitest/0.27.2_jsdom@21.0.0+sass@1.57.1: resolution: {integrity: sha512-y7tdsL2uaQy+KF18AlmNHZe29ukyFytlxrpSTwwmgLE2XHR/aPucJP9FLjWoqjgqFlXzRAjHlFJLU+HDyI/OsA==} engines: {node: '>=v14.16.0'} @@ -22332,7 +22332,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.18 + '@types/node': 16.18.12 acorn: 8.8.1 acorn-walk: 8.2.0 cac: 6.7.14 @@ -22346,8 +22346,8 @@ packages: tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji - vite-node: 0.27.2_ovmyjmuuyckt3r3gpaexj2onji + vite: 4.0.4_uuaiuqsfc4gpri2fkjqkscjfse + vite-node: 0.27.2_uuaiuqsfc4gpri2fkjqkscjfse why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -22382,7 +22382,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.18 + '@types/node': 16.18.12 acorn: 8.8.1 acorn-walk: 8.2.0 cac: 6.7.14 @@ -22395,8 +22395,8 @@ packages: tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.0.4_7rfoeown37vwv4fneiebr6nt2u - vite-node: 0.27.2_7rfoeown37vwv4fneiebr6nt2u + vite: 4.0.4_lydj4ordo26cwwlynpu7uqrnl4 + vite-node: 0.27.2_lydj4ordo26cwwlynpu7uqrnl4 why-is-node-running: 2.2.2 transitivePeerDependencies: - less