diff --git a/.github/workflows/pr_check_workflow.yml b/.github/workflows/pr_check_workflow.yml index 82b83877272..34db23d69ee 100644 --- a/.github/workflows/pr_check_workflow.yml +++ b/.github/workflows/pr_check_workflow.yml @@ -111,7 +111,7 @@ jobs: - name: Run integration tests if: steps.integration_tests_results.outputs.integration_tests_results != 'success' id: integration-tests - run: node --no-deprecation scripts/jest_integration --ci --colors --max-old-space-size=5120 + run: node scripts/jest_integration --ci --colors --max-old-space-size=5120 # Set cache if linter, unit tests, and integration tests were successful then the job will be marked successful # Sets individual results to empower re-runs of the same build without re-running successful steps. diff --git a/package.json b/package.json index c82849ab1af..84de1193c2a 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "test": "grunt test", "test:bwc": "./scripts/bwctest-osd.sh", "test:jest": "node scripts/jest", - "test:jest_integration": "node --no-deprecation scripts/jest_integration", + "test:jest_integration": "node scripts/jest_integration", "test:mocha": "node scripts/mocha", "test:mocha:coverage": "grunt test:mochaCoverage", "test:ftr": "node scripts/functional_tests", @@ -123,8 +123,18 @@ "@elastic/numeral": "^2.5.0", "@elastic/request-crypto": "1.1.4", "@elastic/safer-lodash-set": "0.0.0", - "@hapi/good-squeeze": "5.2.1", - "@hapi/wreck": "^15.0.2", + "@hapi/accept": "^5.0.2", + "@hapi/boom": "^9.1.4", + "@hapi/cookie": "^11.0.2", + "@hapi/good-squeeze": "^6.0.0", + "@hapi/h2o2": "^9.1.0", + "@hapi/hapi": "^20.2.1", + "@hapi/hoek": "^9.2.1", + "@hapi/inert": "^6.0.4", + "@hapi/podium": "^4.1.3", + "@hapi/vision": "^6.1.0", + "@hapi/wreck": "^17.1.0", + "@osd/ace": "1.0.0", "@osd/analytics": "1.0.0", "@osd/apm-config-loader": "1.0.0", "@osd/config": "1.0.0", @@ -132,20 +142,17 @@ "@osd/i18n": "1.0.0", "@osd/interpreter": "1.0.0", "@osd/logging": "1.0.0", + "@osd/monaco": "1.0.0", "@osd/std": "1.0.0", "@osd/ui-framework": "1.0.0", - "@osd/ace": "1.0.0", - "@osd/monaco": "1.0.0", "@osd/ui-shared-deps": "1.0.0", "@types/yauzl": "^2.9.1", "JSONStream": "1.3.5", "abortcontroller-polyfill": "^1.4.0", - "accept": "3.0.2", "angular": "^1.8.0", "angular-elastic": "^2.5.1", "angular-sanitize": "^1.8.0", "bluebird": "3.5.5", - "boom": "^7.2.0", "chalk": "^4.1.0", "chokidar": "^3.4.2", "color": "1.0.3", @@ -164,15 +171,10 @@ "glob": "^7.1.7", "glob-all": "^3.2.1", "globby": "^8.0.1", - "h2o2": "^8.1.2", "handlebars": "4.7.7", - "hapi": "^17.5.3", - "hapi-auth-cookie": "^9.0.0", "hjson": "3.2.1", - "hoek": "^5.0.4", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^5.0.0", - "inert": "^5.1.0", "inline-style": "^2.0.0", "ip-cidr": "^2.1.0", "joi": "^13.5.2", @@ -213,7 +215,6 @@ "tslib": "^2.0.0", "type-detect": "^4.0.8", "uuid": "3.3.2", - "vision": "^5.3.3", "whatwg-fetch": "^3.0.0", "yauzl": "^2.10.0" }, @@ -230,13 +231,15 @@ "@elastic/filesaver": "1.1.2", "@elastic/github-checks-reporter": "0.0.20b3", "@elastic/makelogs": "^6.0.0", + "@microsoft/api-documenter": "^7.13.78", + "@microsoft/api-extractor": "^7.19.3", "@osd/babel-preset": "1.0.0", "@osd/dev-utils": "1.0.0", - "@osd/opensearch": "1.0.0", - "@osd/opensearch-archiver": "1.0.0", "@osd/eslint-import-resolver-opensearch-dashboards": "2.0.0", "@osd/eslint-plugin-eslint": "1.0.0", "@osd/expect": "1.0.0", + "@osd/opensearch": "1.0.0", + "@osd/opensearch-archiver": "1.0.0", "@osd/optimizer": "1.0.0", "@osd/plugin-generator": "1.0.0", "@osd/pm": "1.0.0", @@ -245,20 +248,16 @@ "@osd/test": "1.0.0", "@osd/test-subj-selector": "0.2.1", "@osd/utility-types": "1.0.0", - "@microsoft/api-documenter": "^7.13.78", - "@microsoft/api-extractor": "^7.19.3", "@percy/agent": "^0.28.6", "@testing-library/dom": "^7.24.2", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.0.4", "@testing-library/react-hooks": "^3.4.1", - "@types/accept": "3.1.1", "@types/angular": "^1.6.56", "@types/angular-mocks": "^1.7.0", "@types/archiver": "^3.1.0", "@types/babel__core": "^7.1.17", "@types/bluebird": "^3.1.1", - "@types/boom": "^7.2.0", "@types/chance": "^1.0.0", "@types/cheerio": "^0.22.10", "@types/chromedriver": "^81.0.0", @@ -278,14 +277,13 @@ "@types/glob": "^7.1.3", "@types/globby": "^8.0.0", "@types/graphql": "^0.13.2", - "@types/h2o2": "^8.1.1", - "@types/hapi": "^17.0.18", - "@types/hapi-auth-cookie": "^9.1.0", + "@types/hapi__cookie": "^10.1.4", + "@types/hapi__h2o2": "^8.3.3", + "@types/hapi__hapi": "^20.0.10", + "@types/hapi__inert": "^5.2.3", "@types/has-ansi": "^3.0.0", "@types/history": "^4.7.3", "@types/hjson": "^2.4.2", - "@types/hoek": "^4.1.3", - "@types/inert": "^5.1.2", "@types/jest": "^26.0.14", "@types/joi": "^13.4.2", "@types/jquery": "^3.3.31", @@ -307,7 +305,6 @@ "@types/normalize-path": "^3.0.0", "@types/pegjs": "^0.10.1", "@types/pngjs": "^3.4.0", - "@types/podium": "^1.0.0", "@types/prop-types": "^15.7.3", "@types/reach__router": "^1.2.6", "@types/react": "^16.9.36", diff --git a/packages/osd-ace/package.json b/packages/osd-ace/package.json index 4de5dd58ced..5a2f3141ddd 100644 --- a/packages/osd-ace/package.json +++ b/packages/osd-ace/package.json @@ -14,7 +14,8 @@ "devDependencies": { "@osd/dev-utils": "1.0.0", "@osd/babel-preset": "1.0.0", - "raw-loader": "^3.1.0", - "typescript": "4.0.2" + "raw-loader": "^4.0.2", + "typescript": "4.0.2", + "webpack": "^4.41.5" } } diff --git a/packages/osd-monaco/package.json b/packages/osd-monaco/package.json index bcf54f95df0..c51bc27efa7 100644 --- a/packages/osd-monaco/package.json +++ b/packages/osd-monaco/package.json @@ -18,7 +18,7 @@ "babel-loader": "^8.2.3", "css-loader": "^5.2.7", "del": "^5.1.0", - "raw-loader": "^3.1.0", + "raw-loader": "^4.0.2", "supports-color": "^7.0.0", "typescript": "4.0.2", "webpack": "^4.41.5", diff --git a/packages/osd-optimizer/package.json b/packages/osd-optimizer/package.json index eed44712dac..7304111570e 100644 --- a/packages/osd-optimizer/package.json +++ b/packages/osd-optimizer/package.json @@ -37,7 +37,7 @@ "pirates": "^4.0.1", "postcss": "^8.4.5", "postcss-loader": "^4.2.0", - "raw-loader": "^3.1.0", + "raw-loader": "^4.0.2", "rxjs": "^6.5.5", "sass-loader": "^10.2.0", "source-map-support": "^0.5.19", diff --git a/packages/osd-ui-framework/package.json b/packages/osd-ui-framework/package.json index c00abb29522..bdb155fbe98 100644 --- a/packages/osd-ui-framework/package.json +++ b/packages/osd-ui-framework/package.json @@ -56,7 +56,7 @@ "node-sass": "^6.0.1", "postcss": "^8.4.5", "postcss-loader": "^4.2.0", - "raw-loader": "^3.1.0", + "raw-loader": "^4.0.2", "react-dom": "^16.12.0", "react-redux": "^7.2.0", "react-router": "^5.2.1", diff --git a/src/core/public/public.api.md b/src/core/public/public.api.md index c2360d6e0b5..e8e7a32669a 100644 --- a/src/core/public/public.api.md +++ b/src/core/public/public.api.md @@ -6,7 +6,7 @@ import { Action } from 'history'; import { ApiResponse } from '@elastic/elasticsearch/lib/Transport'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { ConfigPath } from '@osd/config'; import { EnvironmentMode } from '@osd/config'; import { EuiBreadcrumb } from '@elastic/eui'; diff --git a/src/core/server/http/base_path_proxy_server.ts b/src/core/server/http/base_path_proxy_server.ts index c90cfbd57d5..054a9dcceea 100644 --- a/src/core/server/http/base_path_proxy_server.ts +++ b/src/core/server/http/base_path_proxy_server.ts @@ -35,8 +35,8 @@ import { Agent as HttpsAgent, ServerOptions as TlsOptions } from 'https'; import apm from 'elastic-apm-node'; import { ByteSizeValue } from '@osd/config-schema'; -import { Server, Request } from 'hapi'; -import HapiProxy from 'h2o2'; +import { Server, Request } from '@hapi/hapi'; +import HapiProxy from '@hapi/h2o2'; import { sampleSize } from 'lodash'; import * as Rx from 'rxjs'; import { take } from 'rxjs/operators'; diff --git a/src/core/server/http/cookie_session_storage.ts b/src/core/server/http/cookie_session_storage.ts index 6732e021f3a..98990a89a8e 100644 --- a/src/core/server/http/cookie_session_storage.ts +++ b/src/core/server/http/cookie_session_storage.ts @@ -30,10 +30,8 @@ * GitHub history for details. */ -import { Request, Server } from 'hapi'; -import hapiAuthCookie from 'hapi-auth-cookie'; -// @ts-expect-error no TS definitions -import Statehood from 'statehood'; +import { Request, Server } from '@hapi/hapi'; +import hapiAuthCookie from '@hapi/cookie'; import { OpenSearchDashboardsRequest, ensureRawRequest } from './router'; import { SessionStorageFactory, SessionStorage } from './session_storage'; @@ -93,7 +91,7 @@ class ScopedCookieSessionStorage> implements Sessi const session = await this.server.auth.test('security-cookie', this.request); // A browser can send several cookies, if it's not an array, just return the session value if (!Array.isArray(session)) { - return session as T; + return session.credentials as T; } // If we have an array with one value, we're good also @@ -154,39 +152,24 @@ export async function createCookieSessionStorageFactory( await server.register({ plugin: hapiAuthCookie }); server.auth.strategy('security-cookie', 'cookie', { - cookie: cookieOptions.name, - password: cookieOptions.encryptionKey, - validateFunc: async (req, session: T | T[]) => { + cookie: { + name: cookieOptions.name, + password: cookieOptions.encryptionKey, + isSecure: cookieOptions.isSecure, + path: basePath === undefined ? '/' : basePath, + clearInvalid: false, + isHttpOnly: true, + isSameSite: cookieOptions.sameSite ?? false, + }, + validateFunc: async (req: Request, session: T | T[]) => { const result = cookieOptions.validate(session); if (!result.isValid) { clearInvalidCookie(req, result.path); } return { valid: result.isValid }; }, - isSecure: cookieOptions.isSecure, - path: basePath, - clearInvalid: false, - isHttpOnly: true, - isSameSite: cookieOptions.sameSite === 'None' ? false : cookieOptions.sameSite ?? false, }); - // A hack to support SameSite: 'None'. - // Remove it after update Hapi to v19 that supports SameSite: 'None' out of the box. - if (cookieOptions.sameSite === 'None') { - log.debug('Patching Statehood.prepareValue'); - const originalPrepareValue = Statehood.prepareValue; - Statehood.prepareValue = function opensearchDashboardsStatehoodPrepareValueWrapper( - name: string, - value: unknown, - options: any - ) { - if (name === cookieOptions.name) { - options.isSameSite = cookieOptions.sameSite; - } - return originalPrepareValue(name, value, options); - }; - } - return { asScoped(request: OpenSearchDashboardsRequest) { return new ScopedCookieSessionStorage(log, server, ensureRawRequest(request)); diff --git a/src/core/server/http/http_server.mocks.ts b/src/core/server/http/http_server.mocks.ts index 0242d277bbe..c0453db8c7b 100644 --- a/src/core/server/http/http_server.mocks.ts +++ b/src/core/server/http/http_server.mocks.ts @@ -29,7 +29,9 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -import { Request } from 'hapi'; + +import { URL, format as formatUrl } from 'url'; +import { Request } from '@hapi/hapi'; import { merge } from 'lodash'; import { Socket } from 'net'; import { stringify } from 'query-string'; @@ -88,6 +90,7 @@ function createOpenSearchDashboardsRequestMock

({ auth = { isAuthenticated: true }, }: RequestFixtureOptions = {}) { const queryString = stringify(query, { sort: false }); + const url = new URL(`${path}${queryString ? `?${queryString}` : ''}`, 'http://localhost'); return OpenSearchDashboardsRequest.from( createRawRequestMock({ @@ -99,15 +102,11 @@ function createOpenSearchDashboardsRequestMock

({ payload: body, path, method, - url: { - path, - pathname: path, - query: queryString, - search: queryString ? `?${queryString}` : queryString, - }, + url, route: { settings: { tags: routeTags, + // @ts-expect-error According to types/hapi__hapi `auth` can't be a boolean, but it can according to the @hapi/hapi source (https://github.com/hapijs/hapi/blob/v20.2.1/lib/route.js#L134) auth: routeAuthRequired, app: opensearchDashboardsRouteOptions, }, @@ -141,6 +140,13 @@ interface DeepPartialArray extends Array> {} type DeepPartialObject = { [P in keyof T]+?: DeepPartial }; function createRawRequestMock(customization: DeepPartial = {}) { + const pathname = customization.url?.pathname || '/'; + const path = `${pathname}${customization.url?.search || ''}`; + const url = new URL( + formatUrl(Object.assign({ pathname, path, href: path }, customization.url)), + 'http://localhost' + ); + return merge( {}, { @@ -149,14 +155,12 @@ function createRawRequestMock(customization: DeepPartial = {}) { isAuthenticated: true, }, headers: {}, - path: '/', + path, route: { settings: {} }, - url: { - href: '/', - }, + url, raw: { req: { - url: '/', + url: path, socket: {}, }, }, diff --git a/src/core/server/http/http_server.test.ts b/src/core/server/http/http_server.test.ts index a40893ad732..43f2842dcf1 100644 --- a/src/core/server/http/http_server.test.ts +++ b/src/core/server/http/http_server.test.ts @@ -695,8 +695,8 @@ describe('with `basepath: /bar` and `rewriteBasePath: false`', () => { }); describe('with `basepath: /bar` and `rewriteBasePath: true`', () => { - let innerServerListener: Server; let configWithBasePath: HttpConfig; + let innerServerListener: Server; beforeEach(async () => { configWithBasePath = { @@ -1224,7 +1224,7 @@ describe('timeout options', () => { router.get( { path: '/', - validate: { body: schema.any() }, + validate: { body: schema.maybe(schema.any()) }, }, (context, req, res) => { return res.ok({ @@ -1257,7 +1257,7 @@ describe('timeout options', () => { router.get( { path: '/', - validate: { body: schema.any() }, + validate: { body: schema.maybe(schema.any()) }, options: { timeout: { idleSocket: 12000 } }, }, (context, req, res) => { diff --git a/src/core/server/http/http_server.ts b/src/core/server/http/http_server.ts index 7b13e5f9da0..061d9d73964 100644 --- a/src/core/server/http/http_server.ts +++ b/src/core/server/http/http_server.ts @@ -29,9 +29,9 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -import { Server } from 'hapi'; -import Boom from 'boom'; -import HapiStaticFiles from 'inert'; + +import { Server } from '@hapi/hapi'; +import HapiStaticFiles from '@hapi/inert'; import url from 'url'; import uuid from 'uuid'; @@ -84,10 +84,6 @@ export interface HttpServerSetup { getServerInfo: () => HttpServerInfo; } -function isBoom(input: unknown): input is Boom { - return input instanceof Boom; -} - /** @internal */ export type LifecycleRegistrar = Pick< HttpServerSetup, @@ -141,7 +137,6 @@ export class HttpServer { this.setupBasePathRewrite(config, basePathService); this.setupConditionalCompression(config); this.setupRequestStateAssignment(config); - this.setupKeepAliveTimeout(config); return { registerRouter: this.registerRouter.bind(this), @@ -195,12 +190,6 @@ export class HttpServer { xsrfRequired: route.options.xsrfRequired ?? !isSafeMethod(route.method), }; - // To work around https://github.com/hapijs/hapi/issues/4122 until v20, set the socket - // timeout on the route to a fake timeout only when the payload timeout is specified. - // Within the onPreAuth lifecycle of the route itself, we'll override the timeout with the - // real socket timeout. - const fakeSocketTimeout = timeout?.payload ? timeout.payload + 1 : undefined; - this.server.route({ handler: route.handler, method: route.method, @@ -208,41 +197,25 @@ export class HttpServer { options: { auth: this.getAuthOption(authRequired), app: opensearchDashboardsRouteOptions, - ext: { - onPreAuth: { - method: (request, h) => { - // At this point, the socket timeout has only been set to work-around the HapiJS bug. - // We need to either set the real per-route timeout or use the default idle socket timeout - if (timeout?.idleSocket) { - request.raw.req.socket.setTimeout(timeout.idleSocket); - } else if (fakeSocketTimeout) { - // NodeJS uses a socket timeout of `0` to denote "no timeout" - request.raw.req.socket.setTimeout(this.config!.socketTimeout ?? 0); - } - - return h.continue; - }, - }, - }, tags: tags ? Array.from(tags) : undefined, // TODO: This 'validate' section can be removed once the legacy platform is completely removed. // We are telling Hapi that NP routes can accept any payload, so that it can bypass the default // validation applied in ./http_tools#getServerOptions // (All NP routes are already required to specify their own validation in order to access the payload) validate, - payload: [allow, maxBytes, output, parse, timeout?.payload].some( - (v) => typeof v !== 'undefined' - ) + // @ts-expect-error Types are outdated and doesn't allow `payload.multipart` to be `true` + payload: [allow, maxBytes, output, parse, timeout?.payload].some((x) => x !== undefined) ? { allow, maxBytes, output, parse, timeout: timeout?.payload, + multipart: true, } : undefined, timeout: { - socket: fakeSocketTimeout, + socket: timeout?.idleSocket ?? this.config!.socketTimeout, }, }, }); @@ -264,8 +237,11 @@ export class HttpServer { return; } - this.log.debug('stopping http server'); - await this.server.stop(); + const hasStarted = this.server.info.started > 0; + if (hasStarted) { + this.log.debug('stopping http server'); + await this.server.stop(); + } } private getAuthOption( @@ -290,7 +266,7 @@ export class HttpServer { } this.registerOnPreRouting((request, response, toolkit) => { - const oldUrl = request.url.href!; + const oldUrl = request.url.pathname + request.url.search; const newURL = basePathService.remove(oldUrl); const shouldRedirect = newURL !== oldUrl; if (shouldRedirect) { @@ -341,24 +317,6 @@ export class HttpServer { }); } - private setupKeepAliveTimeout(config: HttpConfig) { - const keepAliveTimeout = `timeout=${String(config.keepaliveTimeout / 1000)}`; - this.server!.ext('onPreResponse', (request, responseToolkit) => { - const response = request.response; - if (response && request.headers.connection?.includes('keep-alive')) { - if (isBoom(response)) { - response.output.headers = { - ...response.output.headers, - 'keep-alive': keepAliveTimeout, - }; - } else { - response.header('keep-alive', keepAliveTimeout); - } - } - return responseToolkit.continue; - }); - } - private registerOnPreAuth(fn: OnPreAuthHandler) { if (this.server === undefined) { throw new Error('Server is not created yet'); diff --git a/src/core/server/http/http_service.mock.ts b/src/core/server/http/http_service.mock.ts index ee7f1121a35..29b3b493c8c 100644 --- a/src/core/server/http/http_service.mock.ts +++ b/src/core/server/http/http_service.mock.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import type { PublicMethodsOf } from '@osd/utility-types'; import { CspConfig } from '../csp'; @@ -101,6 +101,7 @@ const createInternalSetupContractMock = () => { start: jest.fn(), stop: jest.fn(), config: jest.fn().mockReturnValue(configMock.create()), + // @ts-expect-error it thinks that `Server` isn't a `Construtable` } as unknown) as jest.MockedClass, createCookieSessionStorageFactory: jest.fn(), registerOnPreRouting: jest.fn(), diff --git a/src/core/server/http/http_service.ts b/src/core/server/http/http_service.ts index 6d5ef7c6818..a119396cf6e 100644 --- a/src/core/server/http/http_service.ts +++ b/src/core/server/http/http_service.ts @@ -32,7 +32,7 @@ import { Observable, Subscription, combineLatest } from 'rxjs'; import { first, map } from 'rxjs/operators'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { pick } from '@osd/std'; import { CoreService } from '../../types'; diff --git a/src/core/server/http/http_tools.test.ts b/src/core/server/http/http_tools.test.ts index 5a35d31a365..5ce6eb80b75 100644 --- a/src/core/server/http/http_tools.test.ts +++ b/src/core/server/http/http_tools.test.ts @@ -44,7 +44,7 @@ jest.mock('uuid', () => ({ })); import supertest from 'supertest'; -import { Request, ResponseToolkit } from 'hapi'; +import { Request, ResponseToolkit } from '@hapi/hapi'; import Joi from 'joi'; import { diff --git a/src/core/server/http/http_tools.ts b/src/core/server/http/http_tools.ts index 9eee692328b..732e5579749 100644 --- a/src/core/server/http/http_tools.ts +++ b/src/core/server/http/http_tools.ts @@ -30,8 +30,8 @@ * GitHub history for details. */ -import { Lifecycle, Request, ResponseToolkit, Server, ServerOptions, Util } from 'hapi'; -import Hoek from 'hoek'; +import { Lifecycle, Request, ResponseToolkit, Server, ServerOptions, Util } from '@hapi/hapi'; +import Hoek from '@hapi/hoek'; import { ServerOptions as TLSOptions } from 'https'; import { ValidationError } from 'joi'; import uuid from 'uuid'; diff --git a/src/core/server/http/https_redirect_server.ts b/src/core/server/http/https_redirect_server.ts index e84721c8d97..895daecd72e 100644 --- a/src/core/server/http/https_redirect_server.ts +++ b/src/core/server/http/https_redirect_server.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Request, ResponseToolkit, Server } from 'hapi'; +import { Request, ResponseToolkit, Server } from '@hapi/hapi'; import { format as formatUrl } from 'url'; import { Logger } from '../logging'; diff --git a/src/core/server/http/integration_tests/core_services.test.ts b/src/core/server/http/integration_tests/core_services.test.ts index c57c4f2c288..8d6d92571e9 100644 --- a/src/core/server/http/integration_tests/core_services.test.ts +++ b/src/core/server/http/integration_tests/core_services.test.ts @@ -36,8 +36,8 @@ import { legacyClusterClientInstanceMock, } from './core_service.test.mocks'; -import Boom from 'boom'; -import { Request } from 'hapi'; +import Boom from '@hapi/boom'; +import { Request } from '@hapi/hapi'; import { errors as opensearchErrors } from 'elasticsearch'; import { LegacyOpenSearchErrorHelpers } from '../../opensearch/legacy'; diff --git a/src/core/server/http/integration_tests/request.test.ts b/src/core/server/http/integration_tests/request.test.ts index bf6f01ee70b..4486b52d14d 100644 --- a/src/core/server/http/integration_tests/request.test.ts +++ b/src/core/server/http/integration_tests/request.test.ts @@ -74,7 +74,6 @@ describe('OpenSearchDashboardsRequest', () => { (context, req, res) => res.ok({ body: { isAuthenticated: req.auth.isAuthenticated } }) ); await server.start(); - await supertest(innerServer.listener).get('/').expect(200, { isAuthenticated: false, }); @@ -102,7 +101,6 @@ describe('OpenSearchDashboardsRequest', () => { (context, req, res) => res.ok({ body: { isAuthenticated: req.auth.isAuthenticated } }) ); await server.start(); - await supertest(innerServer.listener).get('/').expect(200, { isAuthenticated: false, }); @@ -116,7 +114,6 @@ describe('OpenSearchDashboardsRequest', () => { (context, req, res) => res.ok({ body: { isAuthenticated: req.auth.isAuthenticated } }) ); await server.start(); - await supertest(innerServer.listener).get('/').expect(200, { isAuthenticated: true, }); @@ -130,13 +127,57 @@ describe('OpenSearchDashboardsRequest', () => { (context, req, res) => res.ok({ body: { isAuthenticated: req.auth.isAuthenticated } }) ); await server.start(); - await supertest(innerServer.listener).get('/').expect(200, { isAuthenticated: true, }); }); }); }); + + describe('route options', () => { + describe('authRequired', () => { + it('returns false if a route configured with "authRequired": false', async () => { + const { server: innerServer, createRouter, registerAuth } = await server.setup(setupDeps); + registerAuth((req, res, t) => t.authenticated()); + const router = createRouter('/'); + router.get( + { path: '/', validate: false, options: { authRequired: false } }, + (context, req, res) => res.ok({ body: { authRequired: req.route.options.authRequired } }) + ); + await server.start(); + await supertest(innerServer.listener).get('/').expect(200, { + authRequired: false, + }); + }); + it('returns "optional" if a route configured with "authRequired": optional', async () => { + const { server: innerServer, createRouter, registerAuth } = await server.setup(setupDeps); + registerAuth((req, res, t) => t.authenticated()); + const router = createRouter('/'); + router.get( + { path: '/', validate: false, options: { authRequired: 'optional' } }, + (context, req, res) => res.ok({ body: { authRequired: req.route.options.authRequired } }) + ); + await server.start(); + await supertest(innerServer.listener).get('/').expect(200, { + authRequired: 'optional', + }); + }); + it('returns true if a route configured with "authRequired": true', async () => { + const { server: innerServer, createRouter, registerAuth } = await server.setup(setupDeps); + registerAuth((req, res, t) => t.authenticated()); + const router = createRouter('/'); + router.get( + { path: '/', validate: false, options: { authRequired: true } }, + (context, req, res) => res.ok({ body: { authRequired: req.route.options.authRequired } }) + ); + await server.start(); + await supertest(innerServer.listener).get('/').expect(200, { + authRequired: true, + }); + }); + }); + }); + describe('events', () => { describe('aborted$', () => { it('emits once and completes when request aborted', async (done) => { diff --git a/src/core/server/http/integration_tests/router.test.ts b/src/core/server/http/integration_tests/router.test.ts index 1441a9ed08e..caac880474c 100644 --- a/src/core/server/http/integration_tests/router.test.ts +++ b/src/core/server/http/integration_tests/router.test.ts @@ -29,8 +29,9 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ + import { Stream } from 'stream'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import supertest from 'supertest'; import { schema } from '@osd/config-schema'; @@ -782,7 +783,7 @@ describe('Response factory', () => { await supertest(innerServer.listener).get('/').expect(200); }); - it('supports answering with Stream', async () => { + it('supports answering with Stream (without custom Content-Type)', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); @@ -803,14 +804,40 @@ describe('Response factory', () => { const result = await supertest(innerServer.listener).get('/').expect(200); + expect(result.text).toBe(undefined); + expect(result.body.toString()).toBe('abc'); + expect(result.header['content-type']).toBe('application/octet-stream'); + }); + + it('supports answering with Stream (with custom Content-Type)', async () => { + const { server: innerServer, createRouter } = await server.setup(setupDeps); + const router = createRouter('/'); + router.get({ path: '/', validate: false }, (context, req, res) => { + const stream = new Stream.Readable({ + read() { + this.push('a'); + this.push('b'); + this.push('c'); + this.push(null); + }, + }); + return res.ok({ + body: stream, + headers: { + 'Content-Type': 'text/plain', + }, + }); + }); + await server.start(); + const result = await supertest(innerServer.listener).get('/').expect(200); + expect(result.text).toBe('abc'); - expect(result.header['content-type']).toBe(undefined); + expect(result.header['content-type']).toBe('text/plain; charset=utf-8'); }); it('supports answering with chunked Stream', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { const stream = new Stream.PassThrough(); stream.write('a'); @@ -819,12 +846,14 @@ describe('Response factory', () => { stream.write('c'); stream.end(); }, 100); - - return res.ok({ body: stream }); + return res.ok({ + body: stream, + headers: { + 'Content-Type': 'text/plain', + }, + }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.text).toBe('abc'); @@ -834,7 +863,6 @@ describe('Response factory', () => { it('supports answering with Buffer', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { const buffer = Buffer.alloc(1028, '.'); @@ -845,9 +873,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200).buffer(true); expect(result.header['content-encoding']).toBe('binary'); @@ -858,10 +884,8 @@ describe('Response factory', () => { it('supports answering with Buffer text', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { const buffer = Buffer.from('abc'); - return res.ok({ body: buffer, headers: { @@ -869,9 +893,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200).buffer(true); expect(result.text).toBe('abc'); @@ -882,7 +904,6 @@ describe('Response factory', () => { it('supports configuring standard headers', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.ok({ body: 'value', @@ -891,9 +912,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.text).toEqual('value'); @@ -903,7 +922,6 @@ describe('Response factory', () => { it('supports configuring non-standard headers', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.ok({ body: 'value', @@ -913,9 +931,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.text).toEqual('value'); @@ -926,7 +942,6 @@ describe('Response factory', () => { it('accepted headers are case-insensitive.', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.ok({ body: 'value', @@ -935,9 +950,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.header.etag).toBe('1234'); @@ -946,7 +959,6 @@ describe('Response factory', () => { it('accept array of headers', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.ok({ body: 'value', @@ -955,9 +967,7 @@ describe('Response factory', () => { }, }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.header['set-cookie']).toEqual(['foo', 'bar']); @@ -966,15 +976,12 @@ describe('Response factory', () => { it('throws if given invalid json object as response payload', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { const payload: any = { key: {} }; payload.key.payload = payload; return res.ok({ body: payload }); }); - await server.start(); - await supertest(innerServer.listener).get('/').expect(500); // error happens within hapi when route handler already finished execution. @@ -984,13 +991,10 @@ describe('Response factory', () => { it('200 OK with body', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.ok({ body: { key: 'value' } }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(200); expect(result.body).toEqual({ key: 'value' }); @@ -1000,13 +1004,10 @@ describe('Response factory', () => { it('202 Accepted with body', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.accepted({ body: { location: 'somewhere' } }); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(202); expect(result.body).toEqual({ location: 'somewhere' }); @@ -1016,13 +1017,10 @@ describe('Response factory', () => { it('204 No content', async () => { const { server: innerServer, createRouter } = await server.setup(setupDeps); const router = createRouter('/'); - router.get({ path: '/', validate: false }, (context, req, res) => { return res.noContent(); }); - await server.start(); - const result = await supertest(innerServer.listener).get('/').expect(204); expect(result.noContent).toBe(true); diff --git a/src/core/server/http/lifecycle/auth.ts b/src/core/server/http/lifecycle/auth.ts index 3990a66a385..24977ee7cfd 100644 --- a/src/core/server/http/lifecycle/auth.ts +++ b/src/core/server/http/lifecycle/auth.ts @@ -29,7 +29,7 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -import { Lifecycle, Request, ResponseToolkit } from 'hapi'; +import { Lifecycle, Request, ResponseToolkit } from '@hapi/hapi'; import { Logger } from '../../logging'; import { HapiResponseAdapter, @@ -213,8 +213,7 @@ export function adoptToHapiAuthFormat( return hapiResponseAdapter.handle( lifecycleResponseFactory.redirected({ - // hapi doesn't accept string[] as a valid header - headers: result.headers as any, + headers: result.headers, }) ); } diff --git a/src/core/server/http/lifecycle/on_post_auth.ts b/src/core/server/http/lifecycle/on_post_auth.ts index aad807fa689..aeef8a77f1b 100644 --- a/src/core/server/http/lifecycle/on_post_auth.ts +++ b/src/core/server/http/lifecycle/on_post_auth.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from 'hapi'; +import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from '@hapi/hapi'; import { Logger } from '../../logging'; import { HapiResponseAdapter, diff --git a/src/core/server/http/lifecycle/on_pre_auth.ts b/src/core/server/http/lifecycle/on_pre_auth.ts index 1a4d93c7da7..955593b2f28 100644 --- a/src/core/server/http/lifecycle/on_pre_auth.ts +++ b/src/core/server/http/lifecycle/on_pre_auth.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from 'hapi'; +import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from '@hapi/hapi'; import { Logger } from '../../logging'; import { HapiResponseAdapter, diff --git a/src/core/server/http/lifecycle/on_pre_response.ts b/src/core/server/http/lifecycle/on_pre_response.ts index f1ba753f397..882cd2e8cd4 100644 --- a/src/core/server/http/lifecycle/on_pre_response.ts +++ b/src/core/server/http/lifecycle/on_pre_response.ts @@ -30,8 +30,13 @@ * GitHub history for details. */ -import { Lifecycle, Request, ResponseObject, ResponseToolkit as HapiResponseToolkit } from 'hapi'; -import Boom from 'boom'; +import { + Lifecycle, + Request, + ResponseObject, + ResponseToolkit as HapiResponseToolkit, +} from '@hapi/hapi'; +import Boom from '@hapi/boom'; import { Logger } from '../../logging'; import { HapiResponseAdapter, OpenSearchDashboardsRequest, ResponseHeaders } from '../router'; @@ -150,11 +155,15 @@ export function adoptToHapiOnPreResponseFormat(fn: OnPreResponseHandler, log: Lo if (preResponseResult.isNext(result)) { if (result.headers) { if (isBoom(response)) { - findHeadersIntersection(response.output.headers, result.headers, log); + findHeadersIntersection( + response.output.headers as { [key: string]: string }, + result.headers, + log + ); // hapi wraps all error response in Boom object internally response.output.headers = { ...response.output.headers, - ...(result.headers as any), // hapi types don't specify string[] as valid value + ...result.headers, }; } else { findHeadersIntersection(response.headers, result.headers, log); @@ -165,7 +174,7 @@ export function adoptToHapiOnPreResponseFormat(fn: OnPreResponseHandler, log: Lo const overriddenResponse = responseToolkit.response(result.body).code(statusCode); const originalHeaders = isBoom(response) ? response.output.headers : response.headers; - setHeaders(overriddenResponse, originalHeaders); + setHeaders(overriddenResponse, originalHeaders as { [key: string]: string }); if (result.headers) { setHeaders(overriddenResponse, result.headers); } @@ -186,8 +195,8 @@ export function adoptToHapiOnPreResponseFormat(fn: OnPreResponseHandler, log: Lo }; } -function isBoom(response: any): response is Boom { - return response instanceof Boom; +function isBoom(response: any): response is Boom.Boom { + return response instanceof Boom.Boom; } function setHeaders(response: ResponseObject, headers: ResponseHeaders) { diff --git a/src/core/server/http/lifecycle/on_pre_routing.ts b/src/core/server/http/lifecycle/on_pre_routing.ts index f5a2c79c54c..bee7f6793e2 100644 --- a/src/core/server/http/lifecycle/on_pre_routing.ts +++ b/src/core/server/http/lifecycle/on_pre_routing.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from 'hapi'; +import { Lifecycle, Request, ResponseToolkit as HapiResponseToolkit } from '@hapi/hapi'; import { Logger } from '../../logging'; import { HapiResponseAdapter, diff --git a/src/core/server/http/router/error_wrapper.test.ts b/src/core/server/http/router/error_wrapper.test.ts index dda101e77d8..c165331df1f 100644 --- a/src/core/server/http/router/error_wrapper.test.ts +++ b/src/core/server/http/router/error_wrapper.test.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { OpenSearchDashboardsResponse, OpenSearchDashboardsResponseFactory, diff --git a/src/core/server/http/router/error_wrapper.ts b/src/core/server/http/router/error_wrapper.ts index b1e34b312d3..97c9cd49350 100644 --- a/src/core/server/http/router/error_wrapper.ts +++ b/src/core/server/http/router/error_wrapper.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { RequestHandlerWrapper } from './router'; export const wrapErrors: RequestHandlerWrapper = (handler) => { @@ -42,7 +42,7 @@ export const wrapErrors: RequestHandlerWrapper = (handler) => { return response.customError({ body: e.output.payload, statusCode: e.output.statusCode, - headers: e.output.headers, + headers: e.output.headers as { [key: string]: string }, }); } throw e; diff --git a/src/core/server/http/router/request.test.ts b/src/core/server/http/router/request.test.ts index 4cb96c867d1..0ef2ba06411 100644 --- a/src/core/server/http/router/request.test.ts +++ b/src/core/server/http/router/request.test.ts @@ -34,7 +34,7 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'), })); -import { RouteOptions } from 'hapi'; +import { RouteOptions } from '@hapi/hapi'; import { OpenSearchDashboardsRequest } from './request'; import { httpServerMock } from '../http_server.mocks'; import { schema } from '@osd/config-schema'; @@ -218,6 +218,7 @@ describe('OpenSearchDashboardsRequest', () => { const request = httpServerMock.createRawRequest({ route: { settings: { + // @ts-expect-error According to types/hapi__hapi, `auth` can't be a boolean, but it can according to the @hapi/hapi source (https://github.com/hapijs/hapi/blob/v20.2.1/lib/route.js#L134) auth, }, }, @@ -227,11 +228,10 @@ describe('OpenSearchDashboardsRequest', () => { expect(opensearchDashboardsRequest.route.options.authRequired).toBe(false); }); it('handles required auth: { mode: "required" }', () => { - const auth: RouteOptions['auth'] = { mode: 'required' }; const request = httpServerMock.createRawRequest({ route: { settings: { - auth, + auth: { mode: 'required' }, }, }, }); @@ -241,11 +241,10 @@ describe('OpenSearchDashboardsRequest', () => { }); it('handles required auth: { mode: "optional" }', () => { - const auth: RouteOptions['auth'] = { mode: 'optional' }; const request = httpServerMock.createRawRequest({ route: { settings: { - auth, + auth: { mode: 'optional' }, }, }, }); @@ -255,11 +254,10 @@ describe('OpenSearchDashboardsRequest', () => { }); it('handles required auth: { mode: "try" } as "optional"', () => { - const auth: RouteOptions['auth'] = { mode: 'try' }; const request = httpServerMock.createRawRequest({ route: { settings: { - auth, + auth: { mode: 'try' }, }, }, }); @@ -269,26 +267,24 @@ describe('OpenSearchDashboardsRequest', () => { }); it('throws on auth: strategy name', () => { - const auth: RouteOptions['auth'] = 'session'; const request = httpServerMock.createRawRequest({ route: { settings: { - auth, + auth: { strategies: ['session'] }, }, }, }); expect(() => OpenSearchDashboardsRequest.from(request)).toThrowErrorMatchingInlineSnapshot( - `"unexpected authentication options: \\"session\\" for route: /"` + `"unexpected authentication options: {\\"strategies\\":[\\"session\\"]} for route: /"` ); }); it('throws on auth: { mode: unexpected mode }', () => { - const auth: RouteOptions['auth'] = { mode: undefined }; const request = httpServerMock.createRawRequest({ route: { settings: { - auth, + auth: { mode: undefined }, }, }, }); diff --git a/src/core/server/http/router/request.ts b/src/core/server/http/router/request.ts index e8c4fbec3d2..7601964038a 100644 --- a/src/core/server/http/router/request.ts +++ b/src/core/server/http/router/request.ts @@ -30,9 +30,9 @@ * GitHub history for details. */ -import { Url } from 'url'; +import { URL } from 'url'; import uuid from 'uuid'; -import { Request, RouteOptionsApp, ApplicationState } from 'hapi'; +import { Request, RouteOptionsApp, RequestApplicationState } from '@hapi/hapi'; import { Observable, fromEvent, merge } from 'rxjs'; import { shareReplay, first, takeUntil } from 'rxjs/operators'; import { RecursiveReadonly } from '@osd/utility-types'; @@ -55,7 +55,7 @@ export interface OpenSearchDashboardsRouteOptions extends RouteOptionsApp { /** * @internal */ -export interface OpenSearchDashboardsRequestState extends ApplicationState { +export interface OpenSearchDashboardsRequestState extends RequestApplicationState { requestId: string; requestUuid: string; } @@ -177,7 +177,7 @@ export class OpenSearchDashboardsRequest< */ public readonly uuid: string; /** a WHATWG URL standard object. */ - public readonly url: Url; + public readonly url: URL; /** matched route details */ public readonly route: RecursiveReadonly>; /** @@ -310,11 +310,12 @@ export class OpenSearchDashboardsRequest< return true; } + // @ts-expect-error According to @types/hapi__hapi, `route.settings` should be of type `RouteSettings`, but it's actually `RouteOptions` (https://github.com/hapijs/hapi/blob/v20.2.1/lib/route.js#L134) if (authOptions === false) return false; throw new Error( `unexpected authentication options: ${JSON.stringify(authOptions)} for route: ${ - this.url.href - }` + this.url.pathname + }${this.url.search}` ); } } diff --git a/src/core/server/http/router/response_adapter.ts b/src/core/server/http/router/response_adapter.ts index 43190797d76..8506c187064 100644 --- a/src/core/server/http/router/response_adapter.ts +++ b/src/core/server/http/router/response_adapter.ts @@ -29,9 +29,13 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -import { ResponseObject as HapiResponseObject, ResponseToolkit as HapiResponseToolkit } from 'hapi'; + +import { + ResponseObject as HapiResponseObject, + ResponseToolkit as HapiResponseToolkit, +} from '@hapi/hapi'; import typeDetect from 'type-detect'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import * as stream from 'stream'; import { @@ -66,7 +70,7 @@ export class HapiResponseAdapter { } public toInternalError() { - const error = new Boom('', { + const error = new Boom.Boom('', { statusCode: 500, }); @@ -147,7 +151,7 @@ export class HapiResponseAdapter { } // we use for BWC with Boom payload for error responses - {error: string, message: string, statusCode: string} - const error = new Boom('', { + const error = new Boom.Boom('', { statusCode: opensearchDashboardsResponse.status, }); @@ -160,8 +164,7 @@ export class HapiResponseAdapter { const headers = opensearchDashboardsResponse.options.headers; if (headers) { - // Hapi typings for header accept only strings, although string[] is a valid value - error.output.headers = headers as any; + error.output.headers = headers; } return error; diff --git a/src/core/server/http/router/router.ts b/src/core/server/http/router/router.ts index 1ad324dedc6..5901093ba44 100644 --- a/src/core/server/http/router/router.ts +++ b/src/core/server/http/router/router.ts @@ -30,8 +30,8 @@ * GitHub history for details. */ -import { Request, ResponseObject, ResponseToolkit } from 'hapi'; -import Boom from 'boom'; +import { Request, ResponseObject, ResponseToolkit } from '@hapi/hapi'; +import Boom from '@hapi/boom'; import { isConfigSchema } from '@osd/config-schema'; import { Logger } from '../../logging'; @@ -57,7 +57,10 @@ interface RouterRoute { method: RouteMethod; path: string; options: RouteConfigOptions; - handler: (req: Request, responseToolkit: ResponseToolkit) => Promise>; + handler: ( + req: Request, + responseToolkit: ResponseToolkit + ) => Promise>; } /** diff --git a/src/core/server/legacy/logging/legacy_logging_server.ts b/src/core/server/legacy/logging/legacy_logging_server.ts index d9aaf0ae9a3..7fdb528be23 100644 --- a/src/core/server/legacy/logging/legacy_logging_server.ts +++ b/src/core/server/legacy/logging/legacy_logging_server.ts @@ -30,8 +30,8 @@ * GitHub history for details. */ -import { ServerExtType } from 'hapi'; -import Podium from 'podium'; +import { ServerExtType } from '@hapi/hapi'; +import Podium from '@hapi/podium'; // @ts-expect-error: implicit any for JS file import { Config } from '../../../../legacy/server/config'; // @ts-expect-error: implicit any for JS file diff --git a/src/core/server/metrics/collectors/process.ts b/src/core/server/metrics/collectors/process.ts index f635a6f57c8..fed71316a93 100644 --- a/src/core/server/metrics/collectors/process.ts +++ b/src/core/server/metrics/collectors/process.ts @@ -26,7 +26,7 @@ */ import v8 from 'v8'; -import { Bench } from 'hoek'; +import { Bench } from '@hapi/hoek'; import { OpsProcessMetrics, MetricsCollector } from './types'; export class ProcessMetricsCollector implements MetricsCollector { diff --git a/src/core/server/metrics/collectors/server.ts b/src/core/server/metrics/collectors/server.ts index d6283c103d0..13da30a5a6e 100644 --- a/src/core/server/metrics/collectors/server.ts +++ b/src/core/server/metrics/collectors/server.ts @@ -29,7 +29,7 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -import { ResponseObject, Server as HapiServer } from 'hapi'; +import { ResponseObject, Server as HapiServer } from '@hapi/hapi'; import { OpsServerMetrics, MetricsCollector } from './types'; interface ServerResponseTime { diff --git a/src/core/server/metrics/integration_tests/server_collector.test.ts b/src/core/server/metrics/integration_tests/server_collector.test.ts index 3c816b42a6d..90caf10b26f 100644 --- a/src/core/server/metrics/integration_tests/server_collector.test.ts +++ b/src/core/server/metrics/integration_tests/server_collector.test.ts @@ -33,7 +33,7 @@ import { BehaviorSubject, Subject } from 'rxjs'; import { take, filter } from 'rxjs/operators'; import supertest from 'supertest'; -import { Server as HapiServer } from 'hapi'; +import { Server as HapiServer } from '@hapi/hapi'; import { createHttpServer } from '../../http/test_utils'; import { HttpService, IRouter } from '../../http'; import { contextServiceMock } from '../../context/context_service.mock'; @@ -41,8 +41,7 @@ import { ServerMetricsCollector } from '../collectors/server'; const requestWaitDelay = 25; -// TODO: Re-enable these tests after upgrading Hapi -describe.skip('ServerMetricsCollector', () => { +describe('ServerMetricsCollector', () => { let server: HttpService; let collector: ServerMetricsCollector; let hapiServer: HapiServer; @@ -109,8 +108,8 @@ describe.skip('ServerMetricsCollector', () => { await server.start(); await sendGet('/'); - const discoReq1 = sendGet('/disconnect').end(); - const discoReq2 = sendGet('/disconnect').end(); + const discoReq1 = sendGet('/disconnect').end(() => null); + const discoReq2 = sendGet('/disconnect').end(() => null); await hitSubject .pipe( @@ -215,6 +214,7 @@ describe.skip('ServerMetricsCollector', () => { waitSubject.next('go'); await Promise.all([res1, res2]); + await delay(requestWaitDelay); metrics = await collector.collect(); expect(metrics.concurrent_connections).toEqual(0); }); diff --git a/src/core/server/metrics/ops_metrics_collector.ts b/src/core/server/metrics/ops_metrics_collector.ts index a48669f7977..a63959d3ae0 100644 --- a/src/core/server/metrics/ops_metrics_collector.ts +++ b/src/core/server/metrics/ops_metrics_collector.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Server as HapiServer } from 'hapi'; +import { Server as HapiServer } from '@hapi/hapi'; import { ProcessMetricsCollector, OsMetricsCollector, diff --git a/src/core/server/opensearch/legacy/errors.test.ts b/src/core/server/opensearch/legacy/errors.test.ts index 4056c94e906..d0a6e7a0fa5 100644 --- a/src/core/server/opensearch/legacy/errors.test.ts +++ b/src/core/server/opensearch/legacy/errors.test.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { LegacyOpenSearchErrorHelpers } from './errors'; diff --git a/src/core/server/opensearch/legacy/errors.ts b/src/core/server/opensearch/legacy/errors.ts index 04b47cf319d..099c86dbb3c 100644 --- a/src/core/server/opensearch/legacy/errors.ts +++ b/src/core/server/opensearch/legacy/errors.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { get } from 'lodash'; const code = Symbol('OpenSearchError'); @@ -43,7 +43,7 @@ enum ErrorCode { * @deprecated. The new opensearch client doesn't wrap errors anymore. * @public * */ -export interface LegacyOpenSearchError extends Boom { +export interface LegacyOpenSearchError extends Boom.Boom { [code]?: string; } @@ -99,7 +99,7 @@ export class LegacyOpenSearchErrorHelpers { const decoratedError = decorate(error, ErrorCode.NOT_AUTHORIZED, 401, reason); const wwwAuthHeader = get(error, 'body.error.header[WWW-Authenticate]') as string; - decoratedError.output.headers['WWW-Authenticate'] = + (decoratedError.output.headers as { [key: string]: string })['WWW-Authenticate'] = wwwAuthHeader || 'Basic realm="Authorization Required"'; return decoratedError; diff --git a/src/core/server/saved_objects/export/get_sorted_objects_for_export.ts b/src/core/server/saved_objects/export/get_sorted_objects_for_export.ts index 6bfc3cd5a69..6afb7a06771 100644 --- a/src/core/server/saved_objects/export/get_sorted_objects_for_export.ts +++ b/src/core/server/saved_objects/export/get_sorted_objects_for_export.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { createListStream } from '../../utils/streams'; import { SavedObjectsClientContract, SavedObject } from '../types'; import { fetchNestedDependencies } from './inject_nested_depdendencies'; diff --git a/src/core/server/saved_objects/export/sort_objects.ts b/src/core/server/saved_objects/export/sort_objects.ts index 1223f0b1f85..0288fff40ae 100644 --- a/src/core/server/saved_objects/export/sort_objects.ts +++ b/src/core/server/saved_objects/export/sort_objects.ts @@ -25,7 +25,7 @@ * under the License. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { SavedObject } from '../types'; export function sortObjects(savedObjects: SavedObject[]): SavedObject[] { diff --git a/src/core/server/saved_objects/import/create_limit_stream.ts b/src/core/server/saved_objects/import/create_limit_stream.ts index 91616042efa..2a19d836678 100644 --- a/src/core/server/saved_objects/import/create_limit_stream.ts +++ b/src/core/server/saved_objects/import/create_limit_stream.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { Transform } from 'stream'; export function createLimitStream(limit: number) { diff --git a/src/core/server/saved_objects/import/validate_references.ts b/src/core/server/saved_objects/import/validate_references.ts index f25752016e4..296990f6332 100644 --- a/src/core/server/saved_objects/import/validate_references.ts +++ b/src/core/server/saved_objects/import/validate_references.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { SavedObject, SavedObjectsClientContract } from '../types'; import { SavedObjectsImportError, SavedObjectsImportRetry } from './types'; diff --git a/src/core/server/saved_objects/migrations/core/document_migrator.ts b/src/core/server/saved_objects/migrations/core/document_migrator.ts index 8173c3dfdb2..8a4171da4a2 100644 --- a/src/core/server/saved_objects/migrations/core/document_migrator.ts +++ b/src/core/server/saved_objects/migrations/core/document_migrator.ts @@ -68,7 +68,7 @@ * given an empty migrationVersion property {} if no such property exists. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { set } from '@elastic/safer-lodash-set'; import _ from 'lodash'; import Semver from 'semver'; diff --git a/src/core/server/saved_objects/service/lib/errors.test.ts b/src/core/server/saved_objects/service/lib/errors.test.ts index b5ead0a65f0..8926b783f4c 100644 --- a/src/core/server/saved_objects/service/lib/errors.test.ts +++ b/src/core/server/saved_objects/service/lib/errors.test.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { SavedObjectsErrorHelpers } from './errors'; diff --git a/src/core/server/saved_objects/service/lib/errors.ts b/src/core/server/saved_objects/service/lib/errors.ts index 385871a2fd8..3226140df09 100644 --- a/src/core/server/saved_objects/service/lib/errors.ts +++ b/src/core/server/saved_objects/service/lib/errors.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; // 400 - badRequest const CODE_BAD_REQUEST = 'SavedObjectsClient/badRequest'; @@ -57,7 +57,7 @@ const CODE_GENERAL_ERROR = 'SavedObjectsClient/generalError'; const code = Symbol('SavedObjectsClientErrorCode'); -export interface DecoratedError extends Boom { +export interface DecoratedError extends Boom.Boom { [code]?: string; } diff --git a/src/core/server/saved_objects/service/lib/search_dsl/search_dsl.ts b/src/core/server/saved_objects/service/lib/search_dsl/search_dsl.ts index 7baee0effc8..2479aec9003 100644 --- a/src/core/server/saved_objects/service/lib/search_dsl/search_dsl.ts +++ b/src/core/server/saved_objects/service/lib/search_dsl/search_dsl.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { IndexMapping } from '../../../mappings'; import { getQueryParams } from './query_params'; diff --git a/src/core/server/saved_objects/service/lib/search_dsl/sorting_params.ts b/src/core/server/saved_objects/service/lib/search_dsl/sorting_params.ts index ce124adc7f8..db1d33c8751 100644 --- a/src/core/server/saved_objects/service/lib/search_dsl/sorting_params.ts +++ b/src/core/server/saved_objects/service/lib/search_dsl/sorting_params.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { getProperty, IndexMapping } from '../../../mappings'; const TOP_LEVEL_FIELDS = ['_id', '_score']; diff --git a/src/core/server/saved_objects/version/decode_version.test.ts b/src/core/server/saved_objects/version/decode_version.test.ts index dfb02947a02..c780f14cac3 100644 --- a/src/core/server/saved_objects/version/decode_version.test.ts +++ b/src/core/server/saved_objects/version/decode_version.test.ts @@ -25,7 +25,7 @@ * under the License. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { decodeVersion } from './decode_version'; diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index f4da7bb7bd1..918b116ee2c 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -5,7 +5,7 @@ ```ts import { ApiResponse } from '@elastic/elasticsearch/lib/Transport'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { BulkIndexDocumentsParams } from 'elasticsearch'; import { CatAliasesParams } from 'elasticsearch'; import { CatAllocationParams } from 'elasticsearch'; @@ -129,16 +129,16 @@ import { RecursiveReadonly } from '@osd/utility-types'; import { ReindexParams } from 'elasticsearch'; import { ReindexRethrottleParams } from 'elasticsearch'; import { RenderSearchTemplateParams } from 'elasticsearch'; -import { Request } from 'hapi'; -import { ResponseObject } from 'hapi'; -import { ResponseToolkit } from 'hapi'; +import { Request } from '@hapi/hapi'; +import { ResponseObject } from '@hapi/hapi'; +import { ResponseToolkit } from '@hapi/hapi'; import { SchemaTypeError } from '@osd/config-schema'; import { ScrollParams } from 'elasticsearch'; import { SearchParams } from 'elasticsearch'; import { SearchResponse as SearchResponse_2 } from 'elasticsearch'; import { SearchShardsParams } from 'elasticsearch'; import { SearchTemplateParams } from 'elasticsearch'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { ShallowPromise } from '@osd/utility-types'; import { SnapshotCreateParams } from 'elasticsearch'; import { SnapshotCreateRepositoryParams } from 'elasticsearch'; @@ -162,7 +162,7 @@ import { Type } from '@osd/config-schema'; import { TypeOf } from '@osd/config-schema'; import { UpdateDocumentByQueryParams } from 'elasticsearch'; import { UpdateDocumentParams } from 'elasticsearch'; -import { Url } from 'url'; +import { URL } from 'url'; // @public export interface AppCategory { @@ -1236,7 +1236,7 @@ export type LegacyOpenSearchClientConfig = Pick>; // (undocumented) readonly socket: IOpenSearchDashboardsSocket; - readonly url: Url; + readonly url: URL; readonly uuid: string; } diff --git a/src/legacy/server/core/index.ts b/src/legacy/server/core/index.ts index dbfb6a4c611..1fcb99aaafb 100644 --- a/src/legacy/server/core/index.ts +++ b/src/legacy/server/core/index.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import OsdServer from '../osd_server'; /** diff --git a/src/legacy/server/http/index.js b/src/legacy/server/http/index.js index fc0f849d139..dd063b48252 100644 --- a/src/legacy/server/http/index.js +++ b/src/legacy/server/http/index.js @@ -31,7 +31,7 @@ */ import { format } from 'url'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { registerHapiPlugins } from './register_hapi_plugins'; import { setupBasePathProvider } from './setup_base_path_provider'; diff --git a/src/legacy/server/http/register_hapi_plugins.js b/src/legacy/server/http/register_hapi_plugins.js index 6e113e5a713..9965c72265c 100644 --- a/src/legacy/server/http/register_hapi_plugins.js +++ b/src/legacy/server/http/register_hapi_plugins.js @@ -30,9 +30,9 @@ * GitHub history for details. */ -import HapiTemplates from 'vision'; -import HapiStaticFiles from 'inert'; -import HapiProxy from 'h2o2'; +import HapiTemplates from '@hapi/vision'; +import HapiStaticFiles from '@hapi/inert'; +import HapiProxy from '@hapi/h2o2'; const plugins = [HapiTemplates, HapiStaticFiles, HapiProxy]; diff --git a/src/legacy/server/i18n/index.ts b/src/legacy/server/i18n/index.ts index 5097008842e..c44adb8cbe4 100644 --- a/src/legacy/server/i18n/index.ts +++ b/src/legacy/server/i18n/index.ts @@ -32,7 +32,7 @@ import { i18n, i18nLoader } from '@osd/i18n'; import { basename } from 'path'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { fromRoot } from '../../../core/server/utils'; import type { UsageCollectionSetup } from '../../../plugins/usage_collection/server'; import { getTranslationPaths } from './get_translations_path'; diff --git a/src/legacy/server/logging/rotate/index.ts b/src/legacy/server/logging/rotate/index.ts index e79fc9eb284..8ba120f158d 100644 --- a/src/legacy/server/logging/rotate/index.ts +++ b/src/legacy/server/logging/rotate/index.ts @@ -31,7 +31,7 @@ */ import { isMaster, isWorker } from 'cluster'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { LogRotator } from './log_rotator'; import { OpenSearchDashboardsConfig } from '../../osd_server'; diff --git a/src/legacy/server/logging/rotate/log_rotator.ts b/src/legacy/server/logging/rotate/log_rotator.ts index b9cd6eed8ee..a31e419531d 100644 --- a/src/legacy/server/logging/rotate/log_rotator.ts +++ b/src/legacy/server/logging/rotate/log_rotator.ts @@ -33,7 +33,7 @@ import * as chokidar from 'chokidar'; import { isMaster } from 'cluster'; import fs from 'fs'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { throttle } from 'lodash'; import { tmpdir } from 'os'; import { basename, dirname, join, sep } from 'path'; diff --git a/src/legacy/server/osd_server.d.ts b/src/legacy/server/osd_server.d.ts index 4df002f996c..efd40b218ea 100644 --- a/src/legacy/server/osd_server.d.ts +++ b/src/legacy/server/osd_server.d.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { CoreSetup, @@ -121,4 +121,4 @@ export default class OsdServer { } // Re-export commonly used hapi types. -export { Server, Request, ResponseToolkit } from 'hapi'; +export { Server, Request, ResponseToolkit } from '@hapi/hapi'; diff --git a/src/legacy/ui/ui_render/ui_render_mixin.js b/src/legacy/ui/ui_render/ui_render_mixin.js index 347b3cbcdc1..e6c96a76cdb 100644 --- a/src/legacy/ui/ui_render/ui_render_mixin.js +++ b/src/legacy/ui/ui_render/ui_render_mixin.js @@ -31,7 +31,7 @@ */ import { createHash } from 'crypto'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { i18n } from '@osd/i18n'; import * as UiSharedDeps from '@osd/ui-shared-deps'; import { OpenSearchDashboardsRequest } from '../../../core/server'; diff --git a/src/optimize/bundles_route/bundles_route.test.ts b/src/optimize/bundles_route/bundles_route.test.ts index e73cc33fb5c..3a560d43c6e 100644 --- a/src/optimize/bundles_route/bundles_route.test.ts +++ b/src/optimize/bundles_route/bundles_route.test.ts @@ -35,8 +35,8 @@ import { readFileSync } from 'fs'; import crypto from 'crypto'; import Chance from 'chance'; -import Hapi from 'hapi'; -import Inert from 'inert'; +import Hapi from '@hapi/hapi'; +import Inert from '@hapi/inert'; import { createBundlesRoute } from './bundles_route'; diff --git a/src/optimize/bundles_route/bundles_route.ts b/src/optimize/bundles_route/bundles_route.ts index 58d7d3fb231..11cb1d8391d 100644 --- a/src/optimize/bundles_route/bundles_route.ts +++ b/src/optimize/bundles_route/bundles_route.ts @@ -32,7 +32,7 @@ import { extname, join } from 'path'; -import Hapi from 'hapi'; +import Hapi from '@hapi/hapi'; import * as UiSharedDeps from '@osd/ui-shared-deps'; import { createDynamicAssetResponse } from './dynamic_asset_response'; diff --git a/src/optimize/bundles_route/dynamic_asset_response.ts b/src/optimize/bundles_route/dynamic_asset_response.ts index b7815068991..31b3aa1f862 100644 --- a/src/optimize/bundles_route/dynamic_asset_response.ts +++ b/src/optimize/bundles_route/dynamic_asset_response.ts @@ -34,9 +34,9 @@ import Fs from 'fs'; import { resolve } from 'path'; import { promisify } from 'util'; -import Accept from 'accept'; -import Boom from 'boom'; -import Hapi from 'hapi'; +import Accept from '@hapi/accept'; +import Boom from '@hapi/boom'; +import Hapi from '@hapi/hapi'; import { FileHashCache } from './file_hash_cache'; import { getFileHash } from './file_hash'; diff --git a/src/optimize/optimize_mixin.ts b/src/optimize/optimize_mixin.ts index 0df8d973ec1..be5c19873d3 100644 --- a/src/optimize/optimize_mixin.ts +++ b/src/optimize/optimize_mixin.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Hapi from 'hapi'; +import Hapi from '@hapi/hapi'; import { createBundlesRoute } from './bundles_route'; import { getNpUiPluginPublicDirs } from './np_ui_plugin_public_dirs'; diff --git a/src/plugins/console/server/lib/proxy_request.ts b/src/plugins/console/server/lib/proxy_request.ts index ac3e716277e..1b65af64975 100644 --- a/src/plugins/console/server/lib/proxy_request.ts +++ b/src/plugins/console/server/lib/proxy_request.ts @@ -34,7 +34,7 @@ import http from 'http'; import https from 'https'; import net from 'net'; import stream from 'stream'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { URL } from 'url'; interface Args { diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index 741f89b434d..e726f72c70d 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -11,7 +11,7 @@ import { ApiResponse as ApiResponse_2 } from '@elastic/elasticsearch/lib/Transpo import { ApplicationStart } from 'opensearch-dashboards/public'; import { Assign } from '@osd/utility-types'; import { BehaviorSubject } from 'rxjs'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { CoreSetup } from 'src/core/public'; import { CoreSetup as CoreSetup_2 } from 'opensearch-dashboards/public'; import { CoreStart } from 'opensearch-dashboards/public'; diff --git a/src/plugins/data/server/index_patterns/fetcher/lib/errors.ts b/src/plugins/data/server/index_patterns/fetcher/lib/errors.ts index 30bce8cc979..7c1c3629c11 100644 --- a/src/plugins/data/server/index_patterns/fetcher/lib/errors.ts +++ b/src/plugins/data/server/index_patterns/fetcher/lib/errors.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { get } from 'lodash'; const ERR_OPENSEARCH_INDEX_NOT_FOUND = 'index_not_found_exception'; diff --git a/src/plugins/data/server/plugins_data_server.api.md b/src/plugins/data/server/plugins_data_server.api.md index 3005f9cdedb..293568f4c6f 100644 --- a/src/plugins/data/server/plugins_data_server.api.md +++ b/src/plugins/data/server/plugins_data_server.api.md @@ -5,7 +5,7 @@ ```ts import { APICaller as APICaller_2 } from 'opensearch-dashboards/server'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { BulkIndexDocumentsParams } from 'elasticsearch'; import { CallCluster as CallCluster_2 } from 'src/legacy/core_plugins/elasticsearch'; import { CatAliasesParams } from 'elasticsearch'; @@ -116,9 +116,9 @@ import { RecursiveReadonly } from 'opensearch-dashboards/public'; import { ReindexParams } from 'elasticsearch'; import { ReindexRethrottleParams } from 'elasticsearch'; import { RenderSearchTemplateParams } from 'elasticsearch'; -import { Request } from 'hapi'; -import { ResponseObject } from 'hapi'; -import { ResponseToolkit } from 'hapi'; +import { Request } from '@hapi/hapi'; +import { ResponseObject } from '@hapi/hapi'; +import { ResponseToolkit } from '@hapi/hapi'; import { SchemaTypeError } from '@osd/config-schema'; import { ScrollParams } from 'elasticsearch'; import { SearchParams } from 'elasticsearch'; diff --git a/src/plugins/share/server/routes/lib/short_url_assert_valid.ts b/src/plugins/share/server/routes/lib/short_url_assert_valid.ts index 96acca702b9..39a68ced2e3 100644 --- a/src/plugins/share/server/routes/lib/short_url_assert_valid.ts +++ b/src/plugins/share/server/routes/lib/short_url_assert_valid.ts @@ -32,7 +32,7 @@ import { parse } from 'url'; import { trim } from 'lodash'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; export function shortUrlAssertValid(url: string) { const { protocol, hostname, pathname } = parse( diff --git a/src/plugins/vis_type_timeseries/server/plugin.ts b/src/plugins/vis_type_timeseries/server/plugin.ts index ef6fc4fd0c2..fa1e30d6d1c 100644 --- a/src/plugins/vis_type_timeseries/server/plugin.ts +++ b/src/plugins/vis_type_timeseries/server/plugin.ts @@ -41,7 +41,7 @@ import { FakeRequest, } from 'src/core/server'; import { Observable } from 'rxjs'; -import { Server } from 'hapi'; +import { Server } from '@hapi/hapi'; import { VisTypeTimeseriesConfig } from './config'; import { getVisData, GetVisData, GetVisDataOptions } from './lib/get_vis_data'; import { ValidationTelemetryService } from './validation_telemetry'; diff --git a/src/plugins/vis_type_timeseries/server/routes/fields.ts b/src/plugins/vis_type_timeseries/server/routes/fields.ts index 94f534f67ea..46324777123 100644 --- a/src/plugins/vis_type_timeseries/server/routes/fields.ts +++ b/src/plugins/vis_type_timeseries/server/routes/fields.ts @@ -30,7 +30,7 @@ * GitHub history for details. */ -import { isBoom } from 'boom'; +import { isBoom } from '@hapi/boom'; import { schema } from '@osd/config-schema'; import { getFields } from '../lib/get_fields'; import { Framework } from '../plugin'; @@ -51,7 +51,7 @@ export const fieldsRoutes = (framework: Framework) => { return res.customError({ body: err.output.payload, statusCode: err.output.statusCode, - headers: err.output.headers, + headers: err.output.headers as { [key: string]: string }, }); } diff --git a/test/api_integration/apis/index_patterns/opensearch_errors/errors.js b/test/api_integration/apis/index_patterns/opensearch_errors/errors.js index 65ffbb6899f..61954bb41a7 100644 --- a/test/api_integration/apis/index_patterns/opensearch_errors/errors.js +++ b/test/api_integration/apis/index_patterns/opensearch_errors/errors.js @@ -32,7 +32,7 @@ import expect from '@osd/expect'; import { errors as opensearchErrors } from 'elasticsearch'; -import Boom from 'boom'; +import Boom from '@hapi/boom'; import { isOpenSearchIndexNotFoundError, diff --git a/typings/accept.d.ts b/typings/accept.d.ts deleted file mode 100644 index c3f2a886415..00000000000 --- a/typings/accept.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -declare module 'accept' { - // @types/accept does not include the `preferences` argument so we override the type to include it - export function encodings(encodingHeader?: string, preferences?: string[]): string[]; -} diff --git a/yarn.lock b/yarn.lock index eb1eee362f5..1ac25349a52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1483,36 +1483,198 @@ normalize-path "^2.0.1" through2 "^2.0.3" -"@hapi/boom@7.x.x": - version "7.4.11" - resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-7.4.11.tgz#37af8417eb9416aef3367aa60fa04a1a9f1fc262" - integrity sha512-VSU/Cnj1DXouukYxxkes4nNJonCnlogHvIff1v1RVoN4xzkKhMXX+GRmb3NyH1iar10I9WFPDv2JPwfH3GaV0A== +"@hapi/accept@^5.0.1", "@hapi/accept@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.2.tgz#ab7043b037e68b722f93f376afb05e85c0699523" + integrity sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw== dependencies: - "@hapi/hoek" "8.x.x" + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== +"@hapi/ammo@5.x.x", "@hapi/ammo@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-5.0.1.tgz#9d34560f5c214eda563d838c01297387efaab490" + integrity sha512-FbCNwcTbnQP4VYYhLNGZmA76xb2aHg9AMPiy18NZyWMG310P5KdFGyA9v2rm5ujrIny77dEEIkMOwl0Xv+fSSA== + dependencies: + "@hapi/hoek" "9.x.x" -"@hapi/good-squeeze@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@hapi/good-squeeze/-/good-squeeze-5.2.1.tgz#a7ed3f344c9602348af8f059beda663610ab8a4c" - integrity sha512-ZBiRgEDMtI5XowD0i4jgYD3wntN2JneY5EA1lUbSk9YoVIV9rWc77+6S0oqwfG0nj4xU/FjrXHvAahNEvRc6tg== +"@hapi/b64@5.x.x": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/b64/-/b64-5.0.0.tgz#b8210cbd72f4774985e78569b77e97498d24277d" + integrity sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/boom@9.x.x", "@hapi/boom@^9.0.0", "@hapi/boom@^9.1.0", "@hapi/boom@^9.1.4": + version "9.1.4" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.4.tgz#1f9dad367c6a7da9f8def24b4a986fc5a7bd9db6" + integrity sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/bounce@2.x.x", "@hapi/bounce@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/bounce/-/bounce-2.0.0.tgz#e6ef56991c366b1e2738b2cd83b01354d938cf3d" + integrity sha512-JesW92uyzOOyuzJKjoLHM1ThiOvHPOLDHw01YV8yh5nCso7sDwJho1h0Ad2N+E62bZyz46TG3xhAi/78Gsct6A== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/bourne@2.x.x": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.0.0.tgz#5bb2193eb685c0007540ca61d166d4e1edaf918d" + integrity sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg== + +"@hapi/call@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@hapi/call/-/call-8.0.1.tgz#9e64cd8ba6128eb5be6e432caaa572b1ed8cd7c0" + integrity sha512-bOff6GTdOnoe5b8oXRV3lwkQSb/LAWylvDMae6RgEWWntd0SHtkYbQukDHKlfaYtVnSAgIavJ0kqszF/AIBb6g== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/catbox-memory@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/catbox-memory/-/catbox-memory-5.0.1.tgz#cb63fca0ded01d445a2573b38eb2688df67f70ac" + integrity sha512-QWw9nOYJq5PlvChLWV8i6hQHJYfvdqiXdvTupJFh0eqLZ64Xir7mKNi96d5/ZMUAqXPursfNDIDxjFgoEDUqeQ== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/catbox@^11.1.1": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-11.1.1.tgz#d277e2d5023fd69cddb33d05b224ea03065fec0c" + integrity sha512-u/8HvB7dD/6X8hsZIpskSDo4yMKpHxFd7NluoylhGrL6cUfYxdQPnvUp9YU2C6F9hsyBVLGulBd9vBN1ebfXOQ== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/podium" "4.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/content@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@hapi/content/-/content-5.0.2.tgz#ae57954761de570392763e64cdd75f074176a804" + integrity sha512-mre4dl1ygd4ZyOH3tiYBrOUBzV7Pu/EOs8VLGf58vtOEECWed8Uuw6B4iR9AN/8uQt42tB04qpVaMyoMQh0oMw== + dependencies: + "@hapi/boom" "9.x.x" + +"@hapi/cookie@^11.0.2": + version "11.0.2" + resolved "https://registry.yarnpkg.com/@hapi/cookie/-/cookie-11.0.2.tgz#7169c060157a3541146b976e5f0ca9b3f7577d7f" + integrity sha512-LRpSuHC53urzml83c5eUHSPPt7YtK1CaaPZU9KmnhZlacVVojrWJzOUIcwOADDvCZjDxowCO3zPMaOqzEm9kgg== dependencies: - "@hapi/hoek" "8.x.x" + "@hapi/boom" "9.x.x" + "@hapi/bounce" "2.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/cryptiles@5.x.x": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/cryptiles/-/cryptiles-5.1.0.tgz#655de4cbbc052c947f696148c83b187fc2be8f43" + integrity sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA== + dependencies: + "@hapi/boom" "9.x.x" + +"@hapi/file@2.x.x": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/file/-/file-2.0.0.tgz#2ecda37d1ae9d3078a67c13b7da86e8c3237dfb9" + integrity sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ== + +"@hapi/good-squeeze@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@hapi/good-squeeze/-/good-squeeze-6.0.0.tgz#bb72d6869cd7398b615a6b7270f630dc4f76aebf" + integrity sha512-UgHAF9Lm8fJPzgf2HymtowOwNc1+IL+p08YTVR+XA4d8nmyE1t9x3RLA4riqldnOKHkVqGakJ1jGqUG7jk77Cg== + dependencies: + "@hapi/hoek" "9.x.x" fast-safe-stringify "2.x.x" -"@hapi/hoek@8.x.x": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== +"@hapi/h2o2@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@hapi/h2o2/-/h2o2-9.1.0.tgz#b223f4978b6f2b0d7d9db10a84a567606c4c3551" + integrity sha512-B7E58bMhxmpiDI22clxTexoAaVShNBk1Ez6S8SQjQZu5FxxD6Tqa44sXeZQBtWrdJF7ZRbsY60/C8AHLRxagNA== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + "@hapi/wreck" "17.x.x" + +"@hapi/hapi@^20.2.1": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-20.2.1.tgz#7482bc28757cb4671623a61bdb5ce920bffc8a2f" + integrity sha512-OXAU+yWLwkMfPFic+KITo+XPp6Oxpgc9WUH+pxXWcTIuvWbgco5TC/jS8UDvz+NFF5IzRgF2CL6UV/KLdQYUSQ== + dependencies: + "@hapi/accept" "^5.0.1" + "@hapi/ammo" "^5.0.1" + "@hapi/boom" "^9.1.0" + "@hapi/bounce" "^2.0.0" + "@hapi/call" "^8.0.0" + "@hapi/catbox" "^11.1.1" + "@hapi/catbox-memory" "^5.0.0" + "@hapi/heavy" "^7.0.1" + "@hapi/hoek" "^9.0.4" + "@hapi/mimos" "^6.0.0" + "@hapi/podium" "^4.1.1" + "@hapi/shot" "^5.0.5" + "@hapi/somever" "^3.0.0" + "@hapi/statehood" "^7.0.3" + "@hapi/subtext" "^7.0.3" + "@hapi/teamwork" "^5.1.0" + "@hapi/topo" "^5.0.0" + "@hapi/validate" "^1.1.1" -"@hapi/hoek@9.x.x", "@hapi/hoek@^9.0.0": +"@hapi/heavy@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-7.0.1.tgz#73315ae33b6e7682a0906b7a11e8ca70e3045874" + integrity sha512-vJ/vzRQ13MtRzz6Qd4zRHWS3FaUc/5uivV2TIuExGTM9Qk+7Zzqj0e2G7EpE6KztO9SalTbiIkTh7qFKj/33cA== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/hoek@9.x.x", "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.0.4", "@hapi/hoek@^9.2.1": version "9.2.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== +"@hapi/inert@^6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@hapi/inert/-/inert-6.0.4.tgz#0544221eabc457110a426818358d006e70ff1f41" + integrity sha512-tpmNqtCCAd+5Ts07bJmMaA79+ZUIf0zSWnQMaWtbcO4nGrO/yXB2AzoslfzFX2JEV9vGeF3FfL8mYw0pHl8VGg== + dependencies: + "@hapi/ammo" "5.x.x" + "@hapi/boom" "9.x.x" + "@hapi/bounce" "2.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + lru-cache "^6.0.0" + +"@hapi/iron@6.x.x", "@hapi/iron@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@hapi/iron/-/iron-6.0.0.tgz#ca3f9136cda655bdd6028de0045da0de3d14436f" + integrity sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw== + dependencies: + "@hapi/b64" "5.x.x" + "@hapi/boom" "9.x.x" + "@hapi/bourne" "2.x.x" + "@hapi/cryptiles" "5.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/mimos@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@hapi/mimos/-/mimos-6.0.0.tgz#daa523d9c07222c7e8860cb7c9c5501fd6506484" + integrity sha512-Op/67tr1I+JafN3R3XN5DucVSxKRT/Tc+tUszDwENoNpolxeXkhrJ2Czt6B6AAqrespHoivhgZBWYSuANN9QXg== + dependencies: + "@hapi/hoek" "9.x.x" + mime-db "1.x.x" + +"@hapi/nigel@4.x.x": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@hapi/nigel/-/nigel-4.0.2.tgz#8f84ef4bca4fb03b2376463578f253b0b8e863c4" + integrity sha512-ht2KoEsDW22BxQOEkLEJaqfpoKPXxi7tvabXy7B/77eFtOyG5ZEstfZwxHQcqAiZhp58Ae5vkhEqI03kawkYNw== + dependencies: + "@hapi/hoek" "^9.0.4" + "@hapi/vise" "^4.0.0" + "@hapi/oppsy@3.x.x": version "3.0.0" resolved "https://registry.yarnpkg.com/@hapi/oppsy/-/oppsy-3.0.0.tgz#1ae397e200e86d0aa41055f103238ed8652947ca" @@ -1520,6 +1682,73 @@ dependencies: "@hapi/hoek" "9.x.x" +"@hapi/pez@^5.0.1": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@hapi/pez/-/pez-5.0.3.tgz#b75446e6fef8cbb16816573ab7da1b0522e7a2a1" + integrity sha512-mpikYRJjtrbJgdDHG/H9ySqYqwJ+QU/D7FXsYciS9P7NYBXE2ayKDAy3H0ou6CohOCaxPuTV4SZ0D936+VomHA== + dependencies: + "@hapi/b64" "5.x.x" + "@hapi/boom" "9.x.x" + "@hapi/content" "^5.0.2" + "@hapi/hoek" "9.x.x" + "@hapi/nigel" "4.x.x" + +"@hapi/podium@4.x.x", "@hapi/podium@^4.1.1", "@hapi/podium@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-4.1.3.tgz#91e20838fc2b5437f511d664aabebbb393578a26" + integrity sha512-ljsKGQzLkFqnQxE7qeanvgGj4dejnciErYd30dbrYzUOF/FyS/DOF97qcrT3bhoVwCYmxa6PEMhxfCPlnUcD2g== + dependencies: + "@hapi/hoek" "9.x.x" + "@hapi/teamwork" "5.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/shot@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-5.0.5.tgz#a25c23d18973bec93c7969c51bf9579632a5bebd" + integrity sha512-x5AMSZ5+j+Paa8KdfCoKh+klB78otxF+vcJR/IoN91Vo2e5ulXIW6HUsFTCU+4W6P/Etaip9nmdAx2zWDimB2A== + dependencies: + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/somever@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@hapi/somever/-/somever-3.0.1.tgz#9961cd5bdbeb5bb1edc0b2acdd0bb424066aadcc" + integrity sha512-4ZTSN3YAHtgpY/M4GOtHUXgi6uZtG9nEZfNI6QrArhK0XN/RDVgijlb9kOmXwCR5VclDSkBul9FBvhSuKXx9+w== + dependencies: + "@hapi/bounce" "2.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/statehood@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-7.0.3.tgz#655166f3768344ed3c3b50375a303cdeca8040d9" + integrity sha512-pYB+pyCHkf2Amh67QAXz7e/DN9jcMplIL7Z6N8h0K+ZTy0b404JKPEYkbWHSnDtxLjJB/OtgElxocr2fMH4G7w== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/bounce" "2.x.x" + "@hapi/bourne" "2.x.x" + "@hapi/cryptiles" "5.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/iron" "6.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/subtext@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-7.0.3.tgz#f7440fc7c966858e1f39681e99eb6171c71e7abd" + integrity sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/bourne" "2.x.x" + "@hapi/content" "^5.0.2" + "@hapi/file" "2.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/pez" "^5.0.1" + "@hapi/wreck" "17.x.x" + +"@hapi/teamwork@5.x.x", "@hapi/teamwork@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-5.1.0.tgz#7801a61fc727f702fd2196ef7625eb4e389f4124" + integrity sha512-llqoQTrAJDTXxG3c4Kz/uzhBS1TsmSBa/XG5SPcVXgmffHE1nFtyLIK0hNJHCB3EuBKT84adzd1hZNY9GJLWtg== + "@hapi/topo@^5.0.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" @@ -1527,7 +1756,7 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@hapi/validate@1.x.x": +"@hapi/validate@1.x.x", "@hapi/validate@^1.1.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@hapi/validate/-/validate-1.1.3.tgz#f750a07283929e09b51aa16be34affb44e1931ad" integrity sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA== @@ -1535,14 +1764,31 @@ "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" -"@hapi/wreck@^15.0.2": - version "15.1.0" - resolved "https://registry.yarnpkg.com/@hapi/wreck/-/wreck-15.1.0.tgz#7917cd25950ce9b023f7fd2bea6e2ef72c71e59d" - integrity sha512-tQczYRTTeYBmvhsek/D49En/5khcShaBEmzrAaDjMrFXKJRuF8xA8+tlq1ETLBFwGd6Do6g2OC74rt11kzawzg== +"@hapi/vise@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@hapi/vise/-/vise-4.0.0.tgz#c6a94fe121b94a53bf99e7489f7fcc74c104db02" + integrity sha512-eYyLkuUiFZTer59h+SGy7hUm+qE9p+UemePTHLlIWppEd+wExn3Df5jO04bFQTm7nleF5V8CtuYQYb+VFpZ6Sg== dependencies: - "@hapi/boom" "7.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/vision@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@hapi/vision/-/vision-6.1.0.tgz#939f10653fbd9df110c44dfd021308b633e85b53" + integrity sha512-ll0zJ13xDxCYIWvC1aq/8srK0bTXfqZYGT+YoTi/fS42gYYJ3dnvmS35r8T8XXtJ6F6cmya8G2cRlMR/z11LQw== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/bounce" "2.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/validate" "1.x.x" + +"@hapi/wreck@17.x.x", "@hapi/wreck@^17.0.0", "@hapi/wreck@^17.1.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@hapi/wreck/-/wreck-17.1.0.tgz#fbdc380c6f3fa1f8052dc612b2d3b6ce3e88dbec" + integrity sha512-nx6sFyfqOpJ+EFrHX+XWwJAxs3ju4iHdbB/bwR8yTNZOiYmuhA8eCe7lYPtYmb4j7vyK/SlbaQsmTtUrMvPEBw== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/bourne" "2.x.x" + "@hapi/hoek" "9.x.x" "@icons/material@^0.2.4": version "0.2.4" @@ -2606,6 +2852,23 @@ dependencies: any-observable "^0.3.0" +"@sideway/address@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27" + integrity sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -3464,11 +3727,6 @@ resolved "https://registry.yarnpkg.com/@tsd/typescript/-/typescript-4.3.4.tgz#3ca75b0fad11180c17a7a6949bda0b0f4a90682f" integrity sha512-o5nx5an9JK+SUN/UiMmVwG3Eg+SsGrtdMtrw82bpZetMO2PkXBERgsf5KxsuPw3qm576z1R/SEUQRb1KaKGlOQ== -"@types/accept@3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/accept/-/accept-3.1.1.tgz#74457f6afabd23181e32b6bafae238bda0ce0da7" - integrity sha512-pXwi0bKUriKuNUv7d1xwbxKTqyTIzmMr1StxcGARmiuTLQyjNo+YwDq0w8dzY8wQjPofdgs1hvQLTuJaGuSKiQ== - "@types/angular-mocks@^1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@types/angular-mocks/-/angular-mocks-1.7.0.tgz#310d999a3c47c10ecd8eef466b5861df84799429" @@ -3563,11 +3821,6 @@ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.30.tgz#ee034a0eeea8b84ed868b1aa60d690b08a6cfbc5" integrity sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw== -"@types/boom@*", "@types/boom@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/boom/-/boom-7.2.0.tgz#19c36cbb5811a7493f0f2e37f31d42b28df1abc1" - integrity sha512-HonbGsHFbskh9zRAzA6tabcw18mCOsSEOL2ibGAuVqk6e7nElcRmWO5L4UfIHpDbWBWw+eZYFdsQ1+MEGgpcVA== - "@types/braces@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.1.tgz#5a284d193cfc61abb2e5a50d36ebbc50d942a32b" @@ -3588,11 +3841,6 @@ resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== -"@types/catbox@*": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/catbox/-/catbox-10.0.1.tgz#266679017749041fe9873fee1131dd2aaa04a07e" - integrity sha512-ECuJ+f5gGHiLeiE4RlE/xdqv/0JVDToegPV1aTb10tQStYa0Ycq2OJfQukDv3IFaw3B+CMV46jHc5bXe6QXEQg== - "@types/chance@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.0.1.tgz#c10703020369602c40dd9428cc6e1437027116df" @@ -3822,35 +4070,63 @@ dependencies: "@types/node" "*" -"@types/h2o2@^8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/h2o2/-/h2o2-8.1.1.tgz#f990302cd2fdfd7909cff9d6643052002b69998f" - integrity sha512-lwF9WSvo4sfT0TnDZDXKef9Yza4xUXC3561QG4Q3Axhrkr+ZFBVJ7kCwI1mUNzk60jI1aMTYVIIoHKZjwCGuHw== +"@types/hapi__catbox@*": + version "10.2.4" + resolved "https://registry.yarnpkg.com/@types/hapi__catbox/-/hapi__catbox-10.2.4.tgz#4d0531a6c2d0e45024f724020d536041ef8ffe30" + integrity sha512-A6ivRrXD5glmnJna1UAGw87QNZRp/vdFO9U4GS+WhOMWzHnw+oTGkMvg0g6y1930CbeheGOCm7A1qHsqH7AXqg== + +"@types/hapi__cookie@^10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@types/hapi__cookie/-/hapi__cookie-10.1.4.tgz#a9d83ab122022f7d73e67b9e67f0e7a625dd42e5" + integrity sha512-CESd2IRnTYAnr+gxHGTXIuLOvi5+M2dw4aG6efP+K6bVTdE385Cu63k/DNLO6iQX0hoXtxCYUKy1QyQEy/Xg5A== + dependencies: + "@types/hapi__hapi" "*" + joi "^17.3.0" + +"@types/hapi__h2o2@^8.3.3": + version "8.3.3" + resolved "https://registry.yarnpkg.com/@types/hapi__h2o2/-/hapi__h2o2-8.3.3.tgz#f6c5ac480a6fd421025f7d0f78dfa916703511b7" + integrity sha512-+qWZVFVGc5Y0wuNZvVe876VJjUBCJ8eQdXovg4Rg9laHpeERQejluI7aw31xXWfLojTuHz3ThZzC6Orqras05Q== dependencies: - "@types/boom" "*" - "@types/hapi" "*" + "@hapi/boom" "^9.0.0" + "@hapi/wreck" "^17.0.0" + "@types/hapi__hapi" "*" "@types/node" "*" -"@types/hapi-auth-cookie@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@types/hapi-auth-cookie/-/hapi-auth-cookie-9.1.0.tgz#cbcd2236b7d429bd0632a8cc45cfd355fdd7e7a2" - integrity sha512-qsP08L+fNaE2K5dsDVKvHp0AmSBs8m9PD5eWsTdHnkJOk81iD7c0J4GYt/1aDJwZsyx6CgcxpbkPOCwBJmrwAg== +"@types/hapi__hapi@*", "@types/hapi__hapi@^20.0.10": + version "20.0.10" + resolved "https://registry.yarnpkg.com/@types/hapi__hapi/-/hapi__hapi-20.0.10.tgz#890d8d5c3b12337ba6e4ea9e33d8aec5d62bbc25" + integrity sha512-Nt/SY/20/JAlHhbgH616j0g18vsANR9OWoyMdQcytlW6o7TBN+wRgf0MB8AgzjYpuzQam5oTiqyED9WwHmQKYQ== + dependencies: + "@hapi/boom" "^9.0.0" + "@hapi/iron" "^6.0.0" + "@hapi/podium" "^4.1.3" + "@types/hapi__catbox" "*" + "@types/hapi__mimos" "*" + "@types/hapi__shot" "*" + "@types/node" "*" + joi "^17.3.0" + +"@types/hapi__inert@^5.2.3": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/hapi__inert/-/hapi__inert-5.2.3.tgz#f586eb240d5997c9968d1b4e8b37679517045ca1" + integrity sha512-I1mWQrEc7oMqGtofT0rwBgRBCBurz0wNzbq8QZsHWR+aXM0bk1j9GA6zwyGIeO53PNl2C1c2kpXlc084xCV+Tg== dependencies: - "@types/hapi" "*" + "@types/hapi__hapi" "*" -"@types/hapi@*", "@types/hapi@^17.0.18": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/hapi/-/hapi-17.0.18.tgz#f855fe18766aa2592a3a689c3e6eabe72989ff1a" - integrity sha512-sRoDjz1iVOCxTqq+EepzDQI773k2PjboHpvMpp524278grosStxZ5+oooVjNLJZj1iZIbiLeeR5/ZeIRgVXsCg== +"@types/hapi__mimos@*": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/hapi__mimos/-/hapi__mimos-4.1.4.tgz#4f8a1c58345fc468553708d3cb508724aa081bd9" + integrity sha512-i9hvJpFYTT/qzB5xKWvDYaSXrIiNqi4ephi+5Lo6+DoQdwqPXQgmVVOZR+s3MBiHoFqsCZCX9TmVWG3HczmTEQ== + dependencies: + "@types/mime-db" "*" + +"@types/hapi__shot@*": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/hapi__shot/-/hapi__shot-4.1.2.tgz#d4011999a91e8101030fece1462fe99769455855" + integrity sha512-8wWgLVP1TeGqgzZtCdt+F+k15DWQvLG1Yv6ZzPfb3D5WIo5/S+GGKtJBVo2uNEcqabP5Ifc71QnJTDnTmw1axA== dependencies: - "@types/boom" "*" - "@types/catbox" "*" - "@types/iron" "*" - "@types/joi" "*" - "@types/mimos" "*" "@types/node" "*" - "@types/podium" "*" - "@types/shot" "*" "@types/has-ansi@^3.0.0": version "3.0.0" @@ -3874,11 +4150,6 @@ resolved "https://registry.yarnpkg.com/@types/hjson/-/hjson-2.4.2.tgz#fd0288a5b6778cda993c978e43cc978ddc8f22e9" integrity sha512-MSKTfEyR8DbzJTOAY47BIJBD72ol4cu6BOw5inda0q1eEtEmurVHL4OmYB3Lxa4/DwXbWidkddvtoygbGQEDIw== -"@types/hoek@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/hoek/-/hoek-4.1.3.tgz#d1982d48fb0d2a0e5d7e9d91838264d8e428d337" - integrity sha1-0ZgtSPsNKg5dfp2Rg4Jk2OQo0zc= - "@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -3897,13 +4168,6 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== -"@types/inert@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/inert/-/inert-5.1.2.tgz#2bb8bef3b2462f904c960654c9edfa39285a85c6" - integrity sha512-3IoSFLQWvhLfZ85kHas/F3iD/TyZPfeJbTsDjrwYljK1MgBGCB2OywAsyeA/YiJ62VbNXfXBwpD1/VbJPIZSGA== - dependencies: - "@types/hapi" "*" - "@types/inquirer@^7.3.1": version "7.3.1" resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.1.tgz#1f231224e7df11ccfaf4cf9acbcc3b935fea292d" @@ -3917,13 +4181,6 @@ resolved "https://registry.yarnpkg.com/@types/intl-relativeformat/-/intl-relativeformat-2.1.0.tgz#3a2b0043380388f39c666665ec517e11412f1358" integrity sha512-AfsEUBFuVaTKL+t82wmU0yEvNjaZEIuGRCLUmgKQkn4nA5M84EbTrDobd8x/D3WohY34MBO5h9al5cGeLQ4Y1g== -"@types/iron@*": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/iron/-/iron-5.0.1.tgz#5420bbda8623c48ee51b9a78ebad05d7305b4b24" - integrity sha512-Ng5BkVGPt7Tw9k1OJ6qYwuD9+dmnWgActmsnnrdvs4075N8V2go1f6Pz8omG3q5rbHjXN6yzzZDYo3JOgAE/Ug== - dependencies: - "@types/node" "*" - "@types/is-function@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" @@ -3972,7 +4229,7 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/joi@*", "@types/joi@^13.4.2": +"@types/joi@^13.4.2": version "13.6.1" resolved "https://registry.yarnpkg.com/@types/joi/-/joi-13.6.1.tgz#325486a397504f8e22c8c551dc8b0e1d41d5d5ae" integrity sha512-JxZ0NP8NuB0BJOXi1KvAA6rySLTPmhOy4n2gzSFq/IFM3LNFm0h+2Vn/bPPgEYlWqzS2NPeLgKqfm75baX+Hog== @@ -4110,16 +4367,9 @@ "@types/braces" "*" "@types/mime-db@*": - version "1.27.0" - resolved "https://registry.yarnpkg.com/@types/mime-db/-/mime-db-1.27.0.tgz#9bc014a1fd1fdf47649c1a54c6dd7966b8284792" - integrity sha1-m8AUof0f30dknBpUxt15ZrgoR5I= - -"@types/mimos@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mimos/-/mimos-3.0.1.tgz#59d96abe1c9e487e7463fe41e8d86d76b57a441a" - integrity sha512-MATIRH4VMIJki8lcYUZdNQEHuAG7iQ1FWwoLgxV+4fUOly2xZYdhHtGgvQyWiTeJqq2tZbE0nOOgZD6pR0FpNQ== - dependencies: - "@types/mime-db" "*" + version "1.43.1" + resolved "https://registry.yarnpkg.com/@types/mime-db/-/mime-db-1.43.1.tgz#c2a0522453bb9b6e84ee48b7eef765d19bcd519e" + integrity sha512-kGZJY+R+WnR5Rk+RPHUMERtb2qBRViIHCBdtUrY+NmwuGb8pQdfTqQiCKPrxpdoycl8KWm2DLdkpoSdt479XoQ== "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" @@ -4260,11 +4510,6 @@ dependencies: "@types/node" "*" -"@types/podium@*", "@types/podium@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/podium/-/podium-1.0.0.tgz#bfaa2151be2b1d6109cc69f7faa9dac2cba3bb20" - integrity sha1-v6ohUb4rHWEJzGn3+qnawsujuyA= - "@types/prettier@^2.0.0", "@types/prettier@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" @@ -4457,13 +4702,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== -"@types/shot@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/shot/-/shot-4.0.0.tgz#7545500c489b65c69b5bc5446ba4fef3bd26af92" - integrity sha512-Xv+n8yfccuicMlwBY58K5PVVNtXRm7uDzcwwmCarBxMP+XxGfnh1BI06YiVAsPbTAzcnYsrzpoS5QHeyV7LS8A== - dependencies: - "@types/node" "*" - "@types/sinon@^7.0.13": version "7.0.13" resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.13.tgz#ca039c23a9e27ebea53e0901ef928ea2a1a6d313" @@ -5070,14 +5308,6 @@ abortcontroller-polyfill@^1.4.0: resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.4.0.tgz#0d5eb58e522a461774af8086414f68e1dda7a6c4" integrity sha512-3ZFfCRfDzx3GFjO6RAkYx81lPGpUS20ISxux9gLxuKnqafNcFQo59+IoZqpO2WvQlyc287B62HDnDdNYRmlvWA== -accept@3.0.2, accept@3.x.x: - version "3.0.2" - resolved "https://registry.yarnpkg.com/accept/-/accept-3.0.2.tgz#83e41cec7e1149f3fd474880423873db6c6cc9ac" - integrity sha512-bghLXFkCOsC1Y2TZ51etWfKDs6q249SAoHTZVfzWWdlZxoij+mgkj9AmUJWQpDY48TfnrTDIe43Xem4zdMe7mQ== - dependencies: - boom "7.x.x" - hoek "5.x.x" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -5312,13 +5542,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ammo@3.x.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ammo/-/ammo-3.0.1.tgz#c79ceeac36fb4e55085ea3fe0c2f42bfa5f7c914" - integrity sha512-4UqoM8xQjwkQ78oiU4NbBK0UgYqeKMAKmwE4ec7Rz3rGU8ZEBFxzgF2sUYKOAlqIXExBDYLN6y1ShF5yQ4hwLQ== - dependencies: - hoek "5.x.x" - angular-aria@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/angular-aria/-/angular-aria-1.8.0.tgz#97aec9b1e8bafd07d5fab30f98d8ec832e18e25d" @@ -5998,11 +6221,6 @@ axobject-query@^2.0.2: dependencies: ast-types-flow "0.0.7" -b64@4.x.x: - version "4.0.0" - resolved "https://registry.yarnpkg.com/b64/-/b64-4.0.0.tgz#c37f587f0a383c7019e821120e8c3f58f0d22772" - integrity sha512-EhmUQodKB0sdzPPrbIWbGqA5cQeTWxYrAgNeeT1rLZWtD3tbNTnphz8J4vkXI3cPgBNlXBjzEbzDzq0Nwi4f9A== - babel-eslint@^10.0.3: version "10.0.3" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" @@ -6339,11 +6557,6 @@ better-opn@^2.1.1: dependencies: open "^7.0.3" -big-time@2.x.x: - version "2.0.1" - resolved "https://registry.yarnpkg.com/big-time/-/big-time-2.0.1.tgz#68c7df8dc30f97e953f25a67a76ac9713c16c9de" - integrity sha1-aMffjcMPl+lT8lpnp2rJcTwWyd4= - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -6479,26 +6692,11 @@ boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boom@7.x.x, boom@^7.2.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/boom/-/boom-7.2.2.tgz#ac92101451aa5cea901aed07d881dd32b4f08345" - integrity sha512-IFUbOa8PS7xqmhIjpeStwT3d09hGkNYQ6aj2iELSTxcVs2u0aKn1NzhkdUQSzsRg1FVkj3uit3I6mXQCBixw+A== - dependencies: - hoek "6.x.x" - bottleneck@^2.15.3: version "2.18.0" resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.18.0.tgz#41fa63ae185b65435d789d1700334bc48222dacf" integrity sha512-U1xiBRaokw4yEguzikOl0VrnZp6uekjpmfrh6rKtr1D+/jFjYCL6J83ZXlGtlBDwVdTmJJ+4Lg5FpB3xmLSiyA== -bounce@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bounce/-/bounce-1.2.0.tgz#e3bac68c73fd256e38096551efc09f504873c8c8" - integrity sha512-8syCGe8B2/WC53118/F/tFy5aW00j+eaGPXmAUP7iBhxc+EBZZxS1vKelWyBCH6IqojgS2t1gF0glH30qAJKEw== - dependencies: - boom "7.x.x" - hoek "5.x.x" - bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" @@ -6927,14 +7125,6 @@ call-me-maybe@^1.0.1: resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= -call@5.x.x: - version "5.0.1" - resolved "https://registry.yarnpkg.com/call/-/call-5.0.1.tgz#ac1b5c106d9edc2a17af2a4a4f74dd4f0c06e910" - integrity sha512-ollfFPSshiuYLp7AsrmpkQJ/PxCi6AzV81rCjBwWhyF2QGyUY/vPDMzoh4aUcWyucheRglG2LaS5qkIEfLRh6A== - dependencies: - boom "7.x.x" - hoek "5.x.x" - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -7074,24 +7264,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -catbox-memory@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/catbox-memory/-/catbox-memory-3.1.2.tgz#4aeec1bc994419c0f7e60087f172aaedd9b4911c" - integrity sha512-lhWtutLVhsq3Mucxk2McxBPPibJ34WcHuWFz3xqub9u9Ve/IQYpZv3ijLhQXfQped9DXozURiaq9O3aZpP91eg== - dependencies: - big-time "2.x.x" - boom "7.x.x" - hoek "5.x.x" - -catbox@10.x.x: - version "10.0.3" - resolved "https://registry.yarnpkg.com/catbox/-/catbox-10.0.3.tgz#1f6f6436dfab30cdd23f753877bcb4afe980414b" - integrity sha512-qwus6RnVctHXYwfxvvDwvlMWHwCjQdIpQQbtyHnRF0JpwmxbQJ/UIZi9y8O6DpphKCdfO9gpxgb2ne9ZDx39BQ== - dependencies: - boom "7.x.x" - hoek "5.x.x" - joi "13.x.x" - ccount@^1.0.0, ccount@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" @@ -7953,13 +8125,6 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -content@4.x.x: - version "4.0.5" - resolved "https://registry.yarnpkg.com/content/-/content-4.0.5.tgz#bc547deabc889ab69bce17faf3585c29f4c41bf2" - integrity sha512-wDP6CTWDpwCf791fNxlCCkZGRkrNzSEU/8ju9Hnr3Uc5mF/gFR5W+fcoGm6zUSlVPdSXYn5pCbySADKj7YM4Cg== - dependencies: - boom "7.x.x" - continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" @@ -8283,13 +8448,6 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cryptiles@4.x.x: - version "4.1.3" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-4.1.3.tgz#2461d3390ea0b82c643a6ba79f0ed491b0934c25" - integrity sha512-gT9nyTMSUC1JnziQpPbxKGBbUg8VL7Zn2NB4E1cJYvuXdElHrwxrV9bmltZGDzet45zSDGyYceueke1TjynGzw== - dependencies: - boom "7.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -12521,16 +12679,6 @@ gzip-size@5.1.1: duplexer "^0.1.1" pify "^4.0.1" -h2o2@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/h2o2/-/h2o2-8.1.2.tgz#25e6f69f453175c9ca1e3618741c5ebe1b5000c1" - integrity sha1-Jeb2n0UxdcnKHjYYdBxevhtQAME= - dependencies: - boom "7.x.x" - hoek "5.x.x" - joi "13.x.x" - wreck "14.x.x" - handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -12548,39 +12696,6 @@ handlebars@4.7.7: optionalDependencies: uglify-js "^3.1.4" -hapi-auth-cookie@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hapi-auth-cookie/-/hapi-auth-cookie-9.0.0.tgz#3b0af443334e2bd92490ddb17bed16e3e9edfd01" - integrity sha512-N71Mt7Jk0+7WLnuvfSv0DoGzgpn7TqOd+/AB73RfHpLvzYoskJ9AlFV3Op60DB01RJNaABZtdcH1l4HM3DMbog== - dependencies: - boom "7.x.x" - bounce "1.x.x" - hoek "5.x.x" - joi "13.x.x" - -hapi@^17.5.3: - version "17.6.0" - resolved "https://registry.yarnpkg.com/hapi/-/hapi-17.6.0.tgz#158a2276253a8de727be678c4daeb1f73929e588" - integrity sha512-GSHjE1hJExluAukrT/QuYSk96irmbYBDd3wOgywiHsPoR2QeKgDnIttD+dB6NbADEmSdb9MS5gTUIVq0uHTdkA== - dependencies: - accept "3.x.x" - ammo "3.x.x" - boom "7.x.x" - bounce "1.x.x" - call "5.x.x" - catbox "10.x.x" - catbox-memory "3.x.x" - heavy "6.x.x" - hoek "5.x.x" - joi "13.x.x" - mimos "4.x.x" - podium "3.x.x" - shot "4.x.x" - statehood "6.x.x" - subtext "6.x.x" - teamwork "3.x.x" - topo "3.x.x" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -12916,15 +13031,6 @@ he@1.2.0, he@1.2.x, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -heavy@6.x.x: - version "6.1.0" - resolved "https://registry.yarnpkg.com/heavy/-/heavy-6.1.0.tgz#1bbfa43dc61dd4b543ede3ff87db8306b7967274" - integrity sha512-TKS9DC9NOTGulHQI31Lx+bmeWmNOstbJbGMiN3pX6bF+Zc2GKSpbbym4oasNnB6yPGkqJ9TQXXYDGohqNSJRxA== - dependencies: - boom "7.x.x" - hoek "5.x.x" - joi "13.x.x" - highlight.js@^10.4.1, highlight.js@~10.7.0: version "10.7.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" @@ -12966,16 +13072,11 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@5.x.x, hoek@^5.0.4: +hoek@5.x.x: version "5.0.4" resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da" integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w== -hoek@6.x.x: - version "6.0.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.0.3.tgz#7884360426d927865a0a1251fc9c59313af5b798" - integrity sha512-TU6RyZ/XaQCTWRLrdqZZtZqwxUVr6PDMfi6MlWNURZ7A6czanQqX4pFE1mdOUQR9FdPCsZ0UzL8jI/izZ+eBSQ== - hoist-non-react-statics@^2.5.5, hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -13486,18 +13587,6 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -inert@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/inert/-/inert-5.1.0.tgz#e9f130dc3047ccd9ffaa64b157b4c1114611035d" - integrity sha512-5rJZbezGEkBN4QrP/HEEwsQ0N+7YzqDZrvBZrE7B0CrNY6I4XKI434aL3UNLCmbI4HzPGQs7Ae/4h1tiTMJ6Wg== - dependencies: - ammo "3.x.x" - boom "7.x.x" - bounce "1.x.x" - hoek "5.x.x" - joi "13.x.x" - lru-cache "4.1.x" - infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -13784,15 +13873,6 @@ ipaddr.js@1.9.0, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== -iron@5.x.x: - version "5.0.4" - resolved "https://registry.yarnpkg.com/iron/-/iron-5.0.4.tgz#003ed822f656f07c2b62762815f5de3947326867" - integrity sha512-7iQ5/xFMIYaNt9g2oiNiWdhrOTdRUMFaWENUd0KghxwPUhrIH8DUY8FEyLNTTzf75jaII+jMexLdY/2HfV61RQ== - dependencies: - boom "7.x.x" - cryptiles "4.x.x" - hoek "5.x.x" - irregular-plurals@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.2.0.tgz#b19c490a0723798db51b235d7e39add44dab0822" @@ -14645,11 +14725,6 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -items@2.x.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198" - integrity sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg= - iterall@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" @@ -15277,7 +15352,7 @@ jju@~1.4.0: resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= -joi@13.x.x, joi@^13.5.2: +joi@^13.5.2: version "13.7.0" resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f" integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q== @@ -15286,6 +15361,17 @@ joi@13.x.x, joi@^13.5.2: isemail "3.x.x" topo "3.x.x" +joi@^17.3.0: + version "17.5.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011" + integrity sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + jpeg-js@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.1.tgz#937a3ae911eb6427f151760f8123f04c8bfe6ef7" @@ -16475,7 +16561,7 @@ lowlight@^1.2.0: fault "^1.0.0" highlight.js "~10.4.0" -lru-cache@4.1.x, lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.5: +lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -17023,14 +17109,6 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mimos@4.x.x: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimos/-/mimos-4.0.0.tgz#76e3d27128431cb6482fd15b20475719ad626a5a" - integrity sha512-JvlvRLqGIlk+AYypWrbrDmhsM+6JVx/xBM5S3AMwTBz1trPCEoPN/swO2L4Wu653fL7oJdgk8DMQyG/Gq3JkZg== - dependencies: - hoek "5.x.x" - mime-db "1.x.x" - min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -17498,14 +17576,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" integrity sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA== -nigel@3.x.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/nigel/-/nigel-3.0.1.tgz#48a08859d65177312f1c25af7252c1e07bb07c2a" - integrity sha512-kCVtUG9JyD//tsYrZY+/Y+2gUrANVSba8y23QkM5Znx0FOxlnl9Z4OVPBODmstKWTOvigfTO+Va1VPOu3eWSOQ== - dependencies: - hoek "5.x.x" - vise "3.x.x" - nise@^1.5.2: version "1.5.3" resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" @@ -18905,17 +18975,6 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pez@4.x.x: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pez/-/pez-4.0.2.tgz#0a7c81b64968e90b0e9562b398f390939e9c4b53" - integrity sha512-HuPxmGxHsEFPWhdkwBs2gIrHhFqktIxMtudISTFN95RQ85ZZAOl8Ki6u3nnN/X8OUaGlIGldk/l8p2IR4/i76w== - dependencies: - b64 "4.x.x" - boom "7.x.x" - content "4.x.x" - hoek "5.x.x" - nigel "3.x.x" - phin@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" @@ -19065,14 +19124,6 @@ pnp-webpack-plugin@1.6.4: dependencies: ts-pnp "^1.1.6" -podium@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/podium/-/podium-3.1.2.tgz#b701429739cf6bdde6b3015ae6b48d400817ce9e" - integrity sha512-18VrjJAduIdPv7d9zWsfmKxTj3cQTYC5Pv5gtKxcWujYBpGbV+mhNSPYhlHW5xeWoazYyKfB9FEsPT12r5rY1A== - dependencies: - hoek "5.x.x" - joi "13.x.x" - polished@^4.0.5: version "4.1.3" resolved "https://registry.yarnpkg.com/polished/-/polished-4.1.3.tgz#7a3abf2972364e7d97770b827eec9a9e64002cfc" @@ -19689,14 +19740,6 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" -raw-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== - dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" - raw-loader@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" @@ -21530,7 +21573,7 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@2.7.0, schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@2.7.0, schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -21854,14 +21897,6 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shot@4.x.x: - version "4.0.5" - resolved "https://registry.yarnpkg.com/shot/-/shot-4.0.5.tgz#c7e7455d11d60f6b6cd3c43e15a3b431c17e5566" - integrity sha1-x+dFXRHWD2ts08Q+FaO0McF+VWY= - dependencies: - hoek "5.x.x" - joi "13.x.x" - side-channel@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" @@ -22358,18 +22393,6 @@ state-toggle@^1.0.0: resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" integrity sha1-0g+aYWu08MO5i5GSLSW2QKorxCU= -statehood@6.x.x: - version "6.0.6" - resolved "https://registry.yarnpkg.com/statehood/-/statehood-6.0.6.tgz#0dbd7c50774d3f61a24e42b0673093bbc81fa5f0" - integrity sha512-jR45n5ZMAkasw0xoE9j9TuLmJv4Sa3AkXe+6yIFT6a07kXYHgSbuD2OVGECdZGFxTmvNqLwL1iRIgvq6O6rq+A== - dependencies: - boom "7.x.x" - bounce "1.x.x" - cryptiles "4.x.x" - hoek "5.x.x" - iron "5.x.x" - joi "13.x.x" - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -22778,17 +22801,6 @@ stylis@3.5.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.0.tgz#016fa239663d77f868fef5b67cf201c4b7c701e1" integrity sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw== -subtext@6.x.x: - version "6.0.7" - resolved "https://registry.yarnpkg.com/subtext/-/subtext-6.0.7.tgz#8e40a67901a734d598142665c90e398369b885f9" - integrity sha512-IcJUvRjeR+NB437Iq+LORFNJW4L6Knqkj3oQrBrkdhIaS2VKJvx/9aYEq7vi+PEx5/OuehOL/40SkSZotLi/MA== - dependencies: - boom "7.x.x" - content "4.x.x" - hoek "5.x.x" - pez "4.x.x" - wreck "14.x.x" - success-symbol@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/success-symbol/-/success-symbol-0.1.0.tgz#24022e486f3bf1cdca094283b769c472d3b72897" @@ -23065,11 +23077,6 @@ tcp-port-used@^1.0.1: debug "4.1.0" is2 "2.0.1" -teamwork@3.x.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/teamwork/-/teamwork-3.0.1.tgz#ff38c7161f41f8070b7813716eb6154036ece196" - integrity sha512-hEkJIpDOfOYe9NYaLFk00zQbzZeKNCY8T2pRH3I13Y1mJwxaSQ6NEsjY5rCp+11ezCiZpWGoGFTbOuhg4qKevQ== - telejson@^5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -24945,23 +24952,6 @@ vinyl@^2.2.1: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vise@3.x.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vise/-/vise-3.0.0.tgz#76ad14ab31669c50fbb0817bc0e72fedcbb3bf4c" - integrity sha512-kBFZLmiL1Vm3rHXphkhvvAcsjgeQXRrOFCbJb0I50YZZP4HGRNH+xGzK3matIMcpbsfr3I02u9odj4oCD0TWgA== - dependencies: - hoek "5.x.x" - -vision@^5.3.3: - version "5.4.0" - resolved "https://registry.yarnpkg.com/vision/-/vision-5.4.0.tgz#fc620deb95227881ea8b8d8a044dc1d1fd40e584" - integrity sha512-f8kbjvo/dUbR4ZDF0pHPuOjQFg/6zOMlP1Tb9gK2ukCa7Ksd24174DCzubtov6AxIDhZhO5RYQeeDlF8ujlKWQ== - dependencies: - boom "7.x.x" - hoek "5.x.x" - items "2.x.x" - joi "13.x.x" - vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -25510,14 +25500,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -wreck@14.x.x: - version "14.1.0" - resolved "https://registry.yarnpkg.com/wreck/-/wreck-14.1.0.tgz#b13e526b6a8318e5ebc6969c0b21075c06337067" - integrity sha512-y/iwFhwdGoM8Hk1t1I4LbuLhM3curVD8STd5NcFI0c/4b4cQAMLcnCRxXX9sLQAggDC8dXYSaQNsT64hga6lvA== - dependencies: - boom "7.x.x" - hoek "5.x.x" - write-file-atomic@^1.1.2: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"