From 7f56f1c7cff42a4ec803bf18029e7e5893778dbc Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 11 Feb 2022 10:30:44 +0100 Subject: [PATCH 01/59] A stab at web compatibility --- src/asn1.ts | 118 +++++++++++++++++++++------------------- src/jwt-rsa.ts | 15 +++-- src/node-web-compat.ts | 71 ++++++++++++++++++++++++ tests/unit/test-util.ts | 4 +- 4 files changed, 146 insertions(+), 62 deletions(-) create mode 100644 src/node-web-compat.ts diff --git a/src/asn1.ts b/src/asn1.ts index 7ea4707..cd7e7db 100644 --- a/src/asn1.ts +++ b/src/asn1.ts @@ -4,6 +4,7 @@ // Utility to encode RSA public keys (a pair of modulus (n) and exponent (e)) into DER-encoding, per ASN.1 specification. import { Asn1DecodingError } from "./error.js"; +import { concatUint8Arrays, numberFromUint8ArrayBE } from "./node-web-compat"; /** Enum with possible values for supported ASN.1 classes */ enum Asn1Class { @@ -37,14 +38,14 @@ interface Identifier { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.1.2 * * @param identifier - The ASN.1 identifier - * @returns The buffer + * @returns The Uint8Array */ function encodeIdentifier(identifier: Identifier) { const identifierAsNumber = (identifier.class << 7) | (identifier.primitiveOrConstructed << 5) | identifier.tag; - return Buffer.from([identifierAsNumber]); + return Uint8Array.from([identifierAsNumber]); } /** @@ -52,11 +53,11 @@ function encodeIdentifier(identifier: Identifier) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.1.3 * * @param length - The length of the ASN.1 type - * @returns The buffer + * @returns The Uint8Array */ function encodeLength(length: number) { if (length < 128) { - return Buffer.from([length]); + return Uint8Array.from([length]); } const integers: number[] = []; while (length > 0) { @@ -64,26 +65,26 @@ function encodeLength(length: number) { length = length >> 8; } integers.reverse(); - return Buffer.from([128 | integers.length, ...integers]); + return Uint8Array.from([128 | integers.length, ...integers]); } /** - * Encode a buffer (that represent an integer) as integer per ASN.1 spec (DER-encoding) + * Encode a Uint8Array (that represent an integer) as integer per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.3 * - * @param buffer - The buffer that represent an integer to encode - * @returns The buffer + * @param Uint8Array - The Uint8Array that represent an integer to encode + * @returns The Uint8Array */ -function encodeBufferAsInteger(buffer: Buffer) { - return Buffer.concat([ +function encodeUint8ArrayAsInteger(Uint8Array: Uint8Array) { + return concatUint8Arrays( encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.Integer, }), - encodeLength(buffer.length), - buffer, - ]); + encodeLength(Uint8Array.length), + Uint8Array + ); } /** @@ -91,7 +92,7 @@ function encodeBufferAsInteger(buffer: Buffer) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.19 * * @param oid - The object identifier to encode - * @returns The buffer + * @returns The Uint8Array */ function encodeObjectIdentifier(oid: string) { const oidComponents = oid.split(".").map((i) => parseInt(i)); @@ -108,39 +109,39 @@ function encodeObjectIdentifier(oid: string) { bytes.map((b, index) => (index ? b + 128 : b)).reverse() ); }, [] as number[]); - const oidBuffer = Buffer.from([ + const oidUint8Array = Uint8Array.from([ firstSubidentifier, ...subsequentSubidentifiers, ]); - return Buffer.concat([ + return concatUint8Arrays( encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.ObjectIdentifier, }), - encodeLength(oidBuffer.length), - oidBuffer, - ]); + encodeLength(oidUint8Array.length), + oidUint8Array + ); } /** - * Encode a buffer as bit string per ASN.1 spec (DER-encoding) + * Encode a Uint8Array as bit string per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.6 * - * @param buffer - The buffer to encode - * @returns The buffer + * @param uint8Array - The Uint8Array to encode + * @returns The Uint8Array */ -function encodeBufferAsBitString(buffer: Buffer) { - const bitString = Buffer.concat([Buffer.from([0]), buffer]); - return Buffer.concat([ +function encodeUint8ArrayAsBitString(uint8Array: Uint8Array) { + const bitString = concatUint8Arrays(new Uint8Array(1), uint8Array); + return concatUint8Arrays( encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.BitString, }), encodeLength(bitString.length), - bitString, - ]); + bitString + ); } /** @@ -148,36 +149,36 @@ function encodeBufferAsBitString(buffer: Buffer) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.9 * * @param sequenceItems - The sequence of DER-encoded items - * @returns The buffer + * @returns The Uint8Array */ -function encodeSequence(sequenceItems: Buffer[]) { - const concatenated = Buffer.concat(sequenceItems); - return Buffer.concat([ +function encodeSequence(sequenceItems: Uint8Array[]) { + const concatenated = concatUint8Arrays(...sequenceItems); + return concatUint8Arrays( encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Constructed, tag: Asn1Tag.Sequence, }), encodeLength(concatenated.length), - concatenated, - ]); + concatenated + ); } /** * Encode null per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.8 * - * @returns The buffer + * @returns The Uint8Array */ function encodeNull() { - return Buffer.concat([ + return concatUint8Arrays( encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.Null, }), - encodeLength(0), - ]); + encodeLength(0) + ); } /** @@ -203,17 +204,23 @@ const ALGORITHM_RSA_ENCRYPTION = encodeSequence([ /** * Transform an RSA public key, which is a pair of modulus (n) and exponent (e), - * into a buffer per ASN.1 spec (DER-encoding) + * into a Uint8Array per ASN.1 spec (DER-encoding) * - * @param n - The modulus of the public key as buffer - * @param e - The exponent of the public key as buffer - * @returns The buffer, which is the public key encoded per ASN.1 spec (DER-encoding) + * @param n - The modulus of the public key as Uint8Array + * @param e - The exponent of the public key as Uint8Array + * @returns The Uint8Array, which is the public key encoded per ASN.1 spec (DER-encoding) */ -export function constructPublicKeyInDerFormat(n: Buffer, e: Buffer): Buffer { +export function constructPublicKeyInDerFormat( + n: Uint8Array, + e: Uint8Array +): Uint8Array { return encodeSequence([ ALGORITHM_RSA_ENCRYPTION, - encodeBufferAsBitString( - encodeSequence([encodeBufferAsInteger(n), encodeBufferAsInteger(e)]) + encodeUint8ArrayAsBitString( + encodeSequence([ + encodeUint8ArrayAsInteger(n), + encodeUint8ArrayAsInteger(e), + ]) ), ]); } @@ -246,7 +253,7 @@ function decodeIdentifier(identifier: number) { * @param blockOfLengthValues - The ASN.1 length value * @returns The length and byte range of the first included length value */ -function decodeLengthValue(blockOfLengthValues: Buffer) { +function decodeLengthValue(blockOfLengthValues: Uint8Array) { if (!(blockOfLengthValues[0] & 0b10000000)) { return { length: blockOfLengthValues[0], @@ -255,9 +262,10 @@ function decodeLengthValue(blockOfLengthValues: Buffer) { }; } const nrLengthOctets = blockOfLengthValues[0] & 0b01111111; - const length = Buffer.from( - blockOfLengthValues.slice(1, 1 + 1 + nrLengthOctets) - ).readUIntBE(0, nrLengthOctets); + const length = numberFromUint8ArrayBE( + Uint8Array.from(blockOfLengthValues.slice(1, 1 + 1 + nrLengthOctets)), + nrLengthOctets + ); return { length, firstByteOffset: 1 + nrLengthOctets, @@ -269,7 +277,7 @@ function decodeLengthValue(blockOfLengthValues: Buffer) { interface ILV { identifier: Identifier; length: number; - value: Buffer; + value: Uint8Array; } /** @@ -279,7 +287,7 @@ interface ILV { * @param sequenceValue - The ASN.1 sequence value * @returns Array of identifier-length-value triplets */ -function decodeSequence(sequence: Buffer) { +function decodeSequence(sequence: Uint8Array) { const { tag } = decodeIdentifier(sequence[0]); if (tag !== Asn1Tag.Sequence) { throw new Asn1DecodingError( @@ -296,7 +304,7 @@ function decodeSequence(sequence: Buffer) { const parts: ILV[] = []; let offset = 0; while (offset < sequenceValue.length) { - // Silence false postive: accessing an octet in a Buffer at a particular index + // Silence false postive: accessing an octet in a Uint8Array at a particular index // is to be done with index operator: [index] // eslint-disable-next-line security/detect-object-injection const identifier = decodeIdentifier(sequenceValue[offset]); @@ -319,7 +327,7 @@ function decodeSequence(sequence: Buffer) { * @param bitStringValue - The ASN.1 bit string value * @returns Array of identifier-length-value triplets */ -function decodeBitStringWrappedSequenceValue(bitStringValue: Buffer) { +function decodeBitStringWrappedSequenceValue(bitStringValue: Uint8Array) { const wrappedSequence = bitStringValue.slice(1); return decodeSequence(wrappedSequence); } @@ -330,9 +338,9 @@ function decodeBitStringWrappedSequenceValue(bitStringValue: Buffer) { * @param publicKey - The ASN.1 DER-encoded public key * @returns Object with modulus (n) and exponent (e) */ -export function deconstructPublicKeyInDerFormat(publicKey: Buffer): { - n: Buffer; - e: Buffer; +export function deconstructPublicKeyInDerFormat(publicKey: Uint8Array): { + n: Uint8Array; + e: Uint8Array; } { const [, pubkeyinfo] = decodeSequence(publicKey); const [n, e] = decodeBitStringWrappedSequenceValue(pubkeyinfo.value); diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index b56851e..2bc4739 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -1,9 +1,14 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { createVerify, createPublicKey, KeyObject } from "crypto"; -import { URL } from "url"; -import { join } from "path"; +import { + URL, + join, + createVerify, + createPublicKey, + KeyObject, + uint8ArrayFromString, +} from "./node-web-compat"; import { SimpleJwksCache, JwksCache, @@ -735,8 +740,8 @@ export type JwkToKeyObjectTransformer = ( export const transformJwkToKeyObject: JwkToKeyObjectTransformer = (jwk: Jwk) => createPublicKey({ key: constructPublicKeyInDerFormat( - Buffer.from(jwk.n, "base64"), - Buffer.from(jwk.e, "base64") + uint8ArrayFromString(jwk.n, "base64"), + uint8ArrayFromString(jwk.e, "base64") ), format: "der", type: "spki", diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts new file mode 100644 index 0000000..7500603 --- /dev/null +++ b/src/node-web-compat.ts @@ -0,0 +1,71 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const runningInNode = eval( + "(function(){try{return typeof process!==undefined&&process.versions!=undefined&&process.versions.node!=undefined}catch{return false}})()" +) as boolean; +const runningInBrowser = eval( + "(function(){try{return typeof window!==undefined&&typeof window.document!==undefined}catch{return false}})()" +) as boolean; + +export let createVerify: (algorithm: string) => { + update: (payload: string) => { + verify: ( + keyObject: KeyObject, + signature: string, + encoding: "base64" + ) => boolean; + }; +}; + +export let createPublicKey: (_: { + key: Uint8Array; + format: "der"; + type: "spki"; +}) => KeyObject; + +export type KeyObject = { + export: (_: { format: "der"; type: "spki" }) => unknown; +}; + +interface URLClass { + new (url: string, base?: string): { + pathname: string; + href: string; + }; +} +export let URL: URLClass; + +export let join: (...segments: string[]) => string; + +export let concatUint8Arrays: (...arrays: Uint8Array[]) => Uint8Array; +export let numberFromUint8ArrayBE: (_: Uint8Array, length: number) => number; +export let uint8ArrayFromString: (_: string, encoding: "base64") => Uint8Array; + +if (runningInNode) { + ({ createVerify, createPublicKey } = require("crypto")); + ({ URL } = require("url")); + ({ join } = require("path")); + concatUint8Arrays = (...arrays) => Buffer.concat(arrays); + numberFromUint8ArrayBE = (uint8Array, length) => + Buffer.from(uint8Array).readUIntBE(0, length); + uint8ArrayFromString = (uint8Array, encoding) => + Buffer.from(uint8Array, encoding); +} else if (runningInBrowser) { + concatUint8Arrays = (...arrays) => { + const concatenatedLength = arrays.reduce( + (length, array) => length + array.length, + 0 + ); + const concatenated = new Uint8Array(concatenatedLength); + arrays.reduce((currentLength, array) => { + concatenated.set(array, currentLength); + return currentLength + array.length; + }, 0); + return concatenated; + }; + throw new Error("Not implemented"); +} else { + throw new Error( + "Unknown environment: only Node.js and Browser are supported" + ); +} diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index 37db8c8..72ecf31 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -54,8 +54,8 @@ export function publicKeyToJwk( ); return { ...jwkOptions, - n: n.toString("base64"), - e: e.toString("base64"), + n: Buffer.from(n).toString("base64"), + e: Buffer.from(e).toString("base64"), } as Jwk; } From 14409d81cee9f4f9f4fa724cedee6ab5210c4c2e Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 09:29:41 +0100 Subject: [PATCH 02/59] Rely on URL global --- src/jwt-rsa.ts | 1 - src/node-web-compat.ts | 33 ++++++++++++++++++--------------- tsconfig.json | 3 +++ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index 2bc4739..0eeeb83 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 import { - URL, join, createVerify, createPublicKey, diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 7500603..61b3e53 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -1,11 +1,23 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const runningInNode = eval( - "(function(){try{return typeof process!==undefined&&process.versions!=undefined&&process.versions.node!=undefined}catch{return false}})()" -) as boolean; -const runningInBrowser = eval( - "(function(){try{return typeof window!==undefined&&typeof window.document!==undefined}catch{return false}})()" -) as boolean; +const runningInNode = (function () { + try { + return ( + typeof process !== undefined && + process.versions != null && + process.versions.node != null + ); + } catch { + return false; + } +})(); +const runningInBrowser = (function () { + try { + return typeof window !== undefined && typeof window.document !== undefined; + } catch { + return false; + } +})(); export let createVerify: (algorithm: string) => { update: (payload: string) => { @@ -27,14 +39,6 @@ export type KeyObject = { export: (_: { format: "der"; type: "spki" }) => unknown; }; -interface URLClass { - new (url: string, base?: string): { - pathname: string; - href: string; - }; -} -export let URL: URLClass; - export let join: (...segments: string[]) => string; export let concatUint8Arrays: (...arrays: Uint8Array[]) => Uint8Array; @@ -43,7 +47,6 @@ export let uint8ArrayFromString: (_: string, encoding: "base64") => Uint8Array; if (runningInNode) { ({ createVerify, createPublicKey } = require("crypto")); - ({ URL } = require("url")); ({ join } = require("path")); concatUint8Arrays = (...arrays) => Buffer.concat(arrays); numberFromUint8ArrayBE = (uint8Array, length) => diff --git a/tsconfig.json b/tsconfig.json index 5d859e7..ddf5a70 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "@tsconfig/node14/tsconfig.json", + "compilerOptions": { + "lib": ["DOM"] + }, "include": ["src/**/*"] } From 9a754f4b1ac863caa4fef654c1a6dd870200956d Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 11:34:00 +0100 Subject: [PATCH 03/59] Separate https for web and node --- src/https-node.ts | 145 +++++++++++++++++++++++++++++++++++++++++++++ src/https.ts | 148 +++------------------------------------------- 2 files changed, 152 insertions(+), 141 deletions(-) create mode 100644 src/https-node.ts diff --git a/src/https-node.ts b/src/https-node.ts new file mode 100644 index 0000000..bf1dec9 --- /dev/null +++ b/src/https-node.ts @@ -0,0 +1,145 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Utilities for fetching the JWKS URI, to get the public keys with which to verify JWTs + +import { request } from "https"; +import { IncomingHttpHeaders, RequestOptions } from "http"; +import { pipeline } from "stream"; +import { TextDecoder } from "util"; +import { safeJsonParse, Json } from "./safe-json-parse.js"; +import { FetchError, NonRetryableFetchError } from "./error.js"; + +/** + * Interface for Request Options, that adds one additional option to the Node.js standard RequestOptions, + * "responseTimeout", with which a timeout can be set within which the response must be received. + * (Note the "timeout" in the Node.js standard RequestOptions, concerns something else: the socket idle timeout) + */ +type FetchRequestOptions = RequestOptions & { + responseTimeout?: number; +}; + +/** + * Execute a HTTPS request + * @param uri - The URI + * @param requestOptions - The RequestOptions to use + * @param data - Data to send to the URI (e.g. POST data) + * @returns - The response as parsed JSON + */ +export async function fetchJson( + uri: string, + requestOptions?: FetchRequestOptions, + data?: Buffer +): Promise { + let responseTimeout: NodeJS.Timeout; + return new Promise((resolve, reject) => { + const req = request( + uri, + { + method: "GET", + ...requestOptions, + }, + (response) => { + // Capture response data + // @types/node is incomplete so cast to any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (pipeline as any)( + [ + response, + getJsonDestination(uri, response.statusCode, response.headers), + ], + done + ); + } + ); + + if (requestOptions?.responseTimeout) { + responseTimeout = setTimeout( + () => + done( + new FetchError( + uri, + `Response time-out (after ${requestOptions.responseTimeout} ms.)` + ) + ), + requestOptions.responseTimeout + ); + responseTimeout.unref(); // Don't block Node from exiting + } + + function done(...args: [Error] | [null, ResultType]) { + if (responseTimeout) clearTimeout(responseTimeout); + if (args[0] == null) { + resolve(args[1]); + return; + } + + // In case of errors, let the Agent (if any) know to abandon the socket + // This is probably best, because the socket may have become stale + /* istanbul ignore next */ + req.socket?.emit("agentRemove"); + + // Turn error into FetchError so the URI is nicely captured in the message + let error = args[0]; + if (!(error instanceof FetchError)) { + error = new FetchError(uri, error.message); + } + + req.destroy(); + reject(error); + } + + // Handle errors while sending request + req.on("error", done); + + // Signal end of request (include optional data) + req.end(data); + }); +} + +/** + * Ensures the HTTPS response contains valid JSON + * + * @param uri - The URI you were requesting + * @param statusCode - The response status code to your HTTPS request + * @param headers - The response headers to your HTTPS request + * + * @returns - Async function that can be used as destination in a stream.pipeline, it will return the JSON, if valid, or throw an error otherwise + */ +function getJsonDestination( + uri: string, + statusCode: number | undefined, + headers: IncomingHttpHeaders +) { + return async (responseIterable: AsyncIterableIterator) => { + if (statusCode === 429) { + throw new FetchError(uri, "Too many requests"); + } else if (statusCode !== 200) { + throw new NonRetryableFetchError( + uri, + `Status code is ${statusCode}, expected 200` + ); + } + if ( + !headers["content-type"]?.toLowerCase().startsWith("application/json") + ) { + throw new NonRetryableFetchError( + uri, + `Content-type is "${headers["content-type"]}", expected "application/json"` + ); + } + const collected = [] as Buffer[]; + for await (const chunk of responseIterable) { + collected.push(chunk); + } + try { + return safeJsonParse( + new TextDecoder("utf8", { fatal: true, ignoreBOM: true }).decode( + Buffer.concat(collected) + ) + ); + } catch (err) { + throw new NonRetryableFetchError(uri, err); + } + }; +} diff --git a/src/https.ts b/src/https.ts index 959eb19..418fe37 100644 --- a/src/https.ts +++ b/src/https.ts @@ -3,12 +3,12 @@ // // Utilities for fetching the JWKS URI, to get the public keys with which to verify JWTs -import { request } from "https"; -import { IncomingHttpHeaders, RequestOptions } from "http"; -import { pipeline } from "stream"; -import { TextDecoder } from "util"; -import { safeJsonParse, Json } from "./safe-json-parse.js"; -import { FetchError, NonRetryableFetchError } from "./error.js"; +import { Json } from "./safe-json-parse.js"; +import { NonRetryableFetchError } from "./error.js"; +import { fetchJson } from "./node-web-compat/index.js"; +export { fetchJson } from "./node-web-compat/index.js"; + +type FetchRequestOptions = Record; /** Interface for JS objects that can be used with the SimpleJsonFetcher */ export interface JsonFetcher { @@ -19,15 +19,6 @@ export interface JsonFetcher { ) => Promise; } -/** - * Interface for Request Options, that adds one additional option to the Node.js standard RequestOptions, - * "responseTimeout", with which a timeout can be set within which the response must be received. - * (Note the "timeout" in the Node.js standard RequestOptions, concerns something else: the socket idle timeout) - */ -type FetchRequestOptions = RequestOptions & { - responseTimeout?: number; -}; - /** * HTTPS Fetcher for URIs with JSON body * @@ -53,7 +44,7 @@ export class SimpleJsonFetcher implements JsonFetcher { public async fetch( uri: string, requestOptions?: FetchRequestOptions, - data?: Buffer + data?: Uint8Array ): Promise { requestOptions = { ...this.defaultRequestOptions, ...requestOptions }; try { @@ -67,128 +58,3 @@ export class SimpleJsonFetcher implements JsonFetcher { } } } - -/** - * Execute a HTTPS request - * @param uri - The URI - * @param requestOptions - The RequestOptions to use - * @param data - Data to send to the URI (e.g. POST data) - * @returns - The response as parsed JSON - */ -export async function fetchJson( - uri: string, - requestOptions?: FetchRequestOptions, - data?: Buffer -): Promise { - let responseTimeout: NodeJS.Timeout; - return new Promise((resolve, reject) => { - const req = request( - uri, - { - method: "GET", - ...requestOptions, - }, - (response) => { - // Capture response data - // @types/node is incomplete so cast to any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (pipeline as any)( - [ - response, - getJsonDestination(uri, response.statusCode, response.headers), - ], - done - ); - } - ); - - if (requestOptions?.responseTimeout) { - responseTimeout = setTimeout( - () => - done( - new FetchError( - uri, - `Response time-out (after ${requestOptions.responseTimeout} ms.)` - ) - ), - requestOptions.responseTimeout - ); - responseTimeout.unref(); // Don't block Node from exiting - } - - function done(...args: [Error] | [null, ResultType]) { - if (responseTimeout) clearTimeout(responseTimeout); - if (args[0] == null) { - resolve(args[1]); - return; - } - - // In case of errors, let the Agent (if any) know to abandon the socket - // This is probably best, because the socket may have become stale - /* istanbul ignore next */ - req.socket?.emit("agentRemove"); - - // Turn error into FetchError so the URI is nicely captured in the message - let error = args[0]; - if (!(error instanceof FetchError)) { - error = new FetchError(uri, error.message); - } - - req.destroy(); - reject(error); - } - - // Handle errors while sending request - req.on("error", done); - - // Signal end of request (include optional data) - req.end(data); - }); -} - -/** - * Ensures the HTTPS response contains valid JSON - * - * @param uri - The URI you were requesting - * @param statusCode - The response status code to your HTTPS request - * @param headers - The response headers to your HTTPS request - * - * @returns - Async function that can be used as destination in a stream.pipeline, it will return the JSON, if valid, or throw an error otherwise - */ -function getJsonDestination( - uri: string, - statusCode: number | undefined, - headers: IncomingHttpHeaders -) { - return async (responseIterable: AsyncIterableIterator) => { - if (statusCode === 429) { - throw new FetchError(uri, "Too many requests"); - } else if (statusCode !== 200) { - throw new NonRetryableFetchError( - uri, - `Status code is ${statusCode}, expected 200` - ); - } - if ( - !headers["content-type"]?.toLowerCase().startsWith("application/json") - ) { - throw new NonRetryableFetchError( - uri, - `Content-type is "${headers["content-type"]}", expected "application/json"` - ); - } - const collected = [] as Buffer[]; - for await (const chunk of responseIterable) { - collected.push(chunk); - } - try { - return safeJsonParse( - new TextDecoder("utf8", { fatal: true, ignoreBOM: true }).decode( - Buffer.concat(collected) - ) - ); - } catch (err) { - throw new NonRetryableFetchError(uri, err); - } - }; -} From 5f0f6d42493cf5ff598e4a2ad676328c4b065f45 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 15:11:23 +0100 Subject: [PATCH 04/59] Node web compat --- .gitignore | 2 + .prettierignore | 3 + package.json | 8 +- src/.gitignore | 1 + src/asn1.ts | 5 +- src/https.ts | 4 +- src/jwt-rsa.ts | 2 +- src/node-web-compat.cjs | 26 + src/node-web-compat.mjs | 64 + src/node-web-compat.ts | 62 +- tests/cognito/jest.config.js | 4 + tests/cognito/lib/cognito-stack.ts | 17 +- tests/cognito/package-lock.json | 6704 +++++++++-------- tests/cognito/package.json | 39 +- tests/cognito/test/cognito.test.ts | 9 +- .../installation-and-basic-usage/run-tests.sh | 4 +- .../test-script.ts | 21 +- .../installation-and-basic-usage/test-util.ts | 69 + .../tsconfig.json | 2 +- tests/jest-ts-js-resolver.js | 6 +- tests/unit/test-util.ts | 2 - 21 files changed, 3979 insertions(+), 3075 deletions(-) create mode 100644 src/.gitignore create mode 100644 src/node-web-compat.cjs create mode 100644 src/node-web-compat.mjs create mode 100644 tests/installation-and-basic-usage/test-util.ts diff --git a/.gitignore b/.gitignore index b5e24de..a0d24b3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,12 +16,14 @@ asn1.d.ts assert.d.ts cognito-verifier.d.ts error.d.ts +https-node.d.ts https.d.ts index.d.ts jwk.d.ts jwt-model.d.ts jwt-rsa.d.ts jwt.d.ts +node-web-compat.d.ts safe-json-parse.d.ts test-util.d.ts typing-util.d.ts diff --git a/.prettierignore b/.prettierignore index 5354b1d..23a5bbd 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,12 +8,14 @@ asn1.d.ts assert.d.ts cognito-verifier.d.ts error.d.ts +https-node.d.ts https.d.ts index.d.ts jwk.d.ts jwt-model.d.ts jwt-rsa.d.ts jwt.d.ts +node-web-compat.d.ts safe-json-parse.d.ts test-util.d.ts typing-util.d.ts @@ -24,3 +26,4 @@ tests/unit/*.js tests/installation-and-basic-usage/*.js tests/cognito/cdk.out/* tests/import-tests/typescript.js +tests/import-tests/should-not-compile.js diff --git a/package.json b/package.json index a8bd427..e3b3444 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,14 @@ "cognito-verifier.d.ts", "dist", "error.d.ts", + "https-node.d.ts", "https.d.ts", "index.d.ts", "jwk.d.ts", "jwt-model.d.ts", "jwt-rsa.d.ts", "jwt.d.ts", + "node-web-compat.d.ts", "safe-json-parse.d.ts", "typing-util.d.ts" ], @@ -89,8 +91,8 @@ "typescript": "^4.4.3" }, "scripts": { - "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json", - "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json", + "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && cp src/node-web-compat.cjs dist/cjs/node-web-compat.js", + "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json && cp src/node-web-compat.mjs dist/esm/node-web-compat.js", "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly", "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", @@ -100,7 +102,7 @@ "prettier:check": "prettier --check .", "prettier": "prettier -w .", "test:all": "npm run prettier:check && npm run test:unit && npm run test:install && npm run test:import && npm run test:speed && npm run test:cognito", - "test:cognito": "cd tests/cognito && npm run test", + "test:cognito": "cd tests/cognito && npm install --force && npm run test", "test:import": "cd tests/import-tests && rm -rf node_modules package-lock.json && npm install && node esm.mjs && node commonjs.cjs && tsc && node typescript.js && COMPILE_ERRORS=$(2>&1 tsc -p tsconfig-should-not-compile.json || true) && ([ \"$COMPILE_ERRORS\" != \"\" ] || (echo \"Ooops I did compile successfully :(\"; false))", "test:install": "./tests/installation-and-basic-usage/run-tests.sh", "test:speed": "jest -t \"speed\"", diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..d4302f5 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +!node-web-compat.d.ts \ No newline at end of file diff --git a/src/asn1.ts b/src/asn1.ts index cd7e7db..04d9411 100644 --- a/src/asn1.ts +++ b/src/asn1.ts @@ -4,7 +4,10 @@ // Utility to encode RSA public keys (a pair of modulus (n) and exponent (e)) into DER-encoding, per ASN.1 specification. import { Asn1DecodingError } from "./error.js"; -import { concatUint8Arrays, numberFromUint8ArrayBE } from "./node-web-compat"; +import { + concatUint8Arrays, + numberFromUint8ArrayBE, +} from "./node-web-compat.js"; /** Enum with possible values for supported ASN.1 classes */ enum Asn1Class { diff --git a/src/https.ts b/src/https.ts index 418fe37..cdf2bf1 100644 --- a/src/https.ts +++ b/src/https.ts @@ -5,8 +5,8 @@ import { Json } from "./safe-json-parse.js"; import { NonRetryableFetchError } from "./error.js"; -import { fetchJson } from "./node-web-compat/index.js"; -export { fetchJson } from "./node-web-compat/index.js"; +import { fetchJson } from "./node-web-compat.js"; +export { fetchJson } from "./node-web-compat.js"; type FetchRequestOptions = Record; diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index 0eeeb83..c449683 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -7,7 +7,7 @@ import { createPublicKey, KeyObject, uint8ArrayFromString, -} from "./node-web-compat"; +} from "./node-web-compat.js"; import { SimpleJwksCache, JwksCache, diff --git a/src/node-web-compat.cjs b/src/node-web-compat.cjs new file mode 100644 index 0000000..dc67a6b --- /dev/null +++ b/src/node-web-compat.cjs @@ -0,0 +1,26 @@ +"use strict"; +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Compatibility layer, to make this lib work in both Node.js and Web +/* eslint-disable @typescript-eslint/no-var-requires */ + +Object.defineProperty(exports, "__esModule", { value: true }); +const concatUint8Arrays = (...arrays) => Buffer.concat(arrays); +const numberFromUint8ArrayBE = (uint8Array, length) => + Buffer.from(uint8Array).readUIntBE(0, length); +const uint8ArrayFromString = (uint8Array, encoding) => + Buffer.from(uint8Array, encoding); +const { createVerify, createPublicKey } = require("crypto"); +const { join } = require("path"); +const { fetchJson } = require("./https-node.js"); + +module.exports = { + concatUint8Arrays, + numberFromUint8ArrayBE, + uint8ArrayFromString, + createVerify, + createPublicKey, + join, + fetchJson, +}; diff --git a/src/node-web-compat.mjs b/src/node-web-compat.mjs new file mode 100644 index 0000000..8a70e73 --- /dev/null +++ b/src/node-web-compat.mjs @@ -0,0 +1,64 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Compatibility layer, to make this lib work in both Node.js and Web + +const runningInNode = (function () { + try { + return ( + typeof process !== undefined && + process.versions != null && + process.versions.node != null + ); + } catch { + return false; + } +})(); +const runningInBrowser = (function () { + try { + // eslint-disable-next-line no-undef + return typeof window !== undefined && typeof window.document !== undefined; + } catch { + return false; + } +})(); + +export let createVerify, + createPublicKey, + join, + concatUint8Arrays, + numberFromUint8ArrayBE, + uint8ArrayFromString, + fetchJson; + +if (runningInNode) { + concatUint8Arrays = (...arrays) => Buffer.concat(arrays); + numberFromUint8ArrayBE = (uint8Array, length) => + Buffer.from(uint8Array).readUIntBE(0, length); + uint8ArrayFromString = (uint8Array, encoding) => + Buffer.from(uint8Array, encoding); + ({ createVerify, createPublicKey } = await import("crypto")); + ({ join } = await import("path")); + ({ fetchJson } = await import("./https-node.js")); +} else if (runningInBrowser) { + concatUint8Arrays = (...arrays) => { + const concatenatedLength = arrays.reduce( + (length, array) => length + array.length, + 0 + ); + const concatenated = new Uint8Array(concatenatedLength); + arrays.reduce((currentLength, array) => { + concatenated.set(array, currentLength); + return currentLength + array.length; + }, 0); + return concatenated; + }; + fetchJson = (uri, requestOptions, data) => + // eslint-disable-next-line no-undef + fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); + throw new Error("Not implemented"); +} else { + throw new Error( + "Unknown environment: only Node.js and Browser are supported" + ); +} diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 61b3e53..139137c 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -1,24 +1,11 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Compatibility layer, to make this lib work in both Node.js and Web -const runningInNode = (function () { - try { - return ( - typeof process !== undefined && - process.versions != null && - process.versions.node != null - ); - } catch { - return false; - } -})(); -const runningInBrowser = (function () { - try { - return typeof window !== undefined && typeof window.document !== undefined; - } catch { - return false; - } -})(); +import { Json } from "./safe-json-parse.js"; +// Crypto functions export let createVerify: (algorithm: string) => { update: (payload: string) => { verify: ( @@ -28,47 +15,26 @@ export let createVerify: (algorithm: string) => { ) => boolean; }; }; - export let createPublicKey: (_: { key: Uint8Array; format: "der"; type: "spki"; }) => KeyObject; - export type KeyObject = { export: (_: { format: "der"; type: "spki" }) => unknown; }; +// Path functions export let join: (...segments: string[]) => string; +// Buffer (Uint8) functions export let concatUint8Arrays: (...arrays: Uint8Array[]) => Uint8Array; export let numberFromUint8ArrayBE: (_: Uint8Array, length: number) => number; export let uint8ArrayFromString: (_: string, encoding: "base64") => Uint8Array; -if (runningInNode) { - ({ createVerify, createPublicKey } = require("crypto")); - ({ join } = require("path")); - concatUint8Arrays = (...arrays) => Buffer.concat(arrays); - numberFromUint8ArrayBE = (uint8Array, length) => - Buffer.from(uint8Array).readUIntBE(0, length); - uint8ArrayFromString = (uint8Array, encoding) => - Buffer.from(uint8Array, encoding); -} else if (runningInBrowser) { - concatUint8Arrays = (...arrays) => { - const concatenatedLength = arrays.reduce( - (length, array) => length + array.length, - 0 - ); - const concatenated = new Uint8Array(concatenatedLength); - arrays.reduce((currentLength, array) => { - concatenated.set(array, currentLength); - return currentLength + array.length; - }, 0); - return concatenated; - }; - throw new Error("Not implemented"); -} else { - throw new Error( - "Unknown environment: only Node.js and Browser are supported" - ); -} +// Fetch JSON +export let fetchJson: ( + uri: string, + requestOptions?: Record, + data?: Uint8Array +) => Promise; diff --git a/tests/cognito/jest.config.js b/tests/cognito/jest.config.js index fa1ab9f..0b85b49 100644 --- a/tests/cognito/jest.config.js +++ b/tests/cognito/jest.config.js @@ -5,4 +5,8 @@ module.exports = { "^.+\\.tsx?$": "ts-jest", }, testEnvironment: "node", + moduleNameMapper: { + "aws-jwt-verify/https": + "/node_modules/aws-jwt-verify/dist/cjs/https.js", // Jest, why do we need this ... :| + }, }; diff --git a/tests/cognito/lib/cognito-stack.ts b/tests/cognito/lib/cognito-stack.ts index 03e720b..5dd4339 100644 --- a/tests/cognito/lib/cognito-stack.ts +++ b/tests/cognito/lib/cognito-stack.ts @@ -175,18 +175,19 @@ export class CognitoStack extends cdk.Stack { }, } ); - const apiAuthorizer = new apigwauth.HttpLambdaAuthorizer({ - authorizerName: "LambdaAuthorizer", - responseTypes: [apigwauth.HttpLambdaResponseType.SIMPLE], - handler: lambdaAuthorizer, - }); + const apiAuthorizer = new apigwauth.HttpLambdaAuthorizer( + "LambdaAuthorizer", + lambdaAuthorizer, + { + authorizerName: "LambdaAuthorizer", + responseTypes: [apigwauth.HttpLambdaResponseType.SIMPLE], + } + ); const httpApi = new apigw.HttpApi(this, "HttpApi"); httpApi.addRoutes({ path: "/mock", methods: [apigw.HttpMethod.GET], - integration: new apigwint.LambdaProxyIntegration({ - handler: mock, - }), + integration: new apigwint.HttpLambdaIntegration("Mock", mock), authorizer: apiAuthorizer, }); diff --git a/tests/cognito/package-lock.json b/tests/cognito/package-lock.json index 3774220..615b5f1 100644 --- a/tests/cognito/package-lock.json +++ b/tests/cognito/package-lock.json @@ -9,300 +9,322 @@ "version": "0.1.0", "hasInstallScript": true, "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-apigatewayv2-authorizers": "1.129.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.129.0", - "@aws-cdk/aws-cognito": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", - "@aws-sdk/client-cognito-identity-provider": "^3.34.0", - "source-map-support": "^0.5.20" + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-apigatewayv2-authorizers": "1.145.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.145.0", + "@aws-cdk/aws-cognito": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", + "@aws-sdk/client-cognito-identity-provider": "^3.52.0", + "source-map-support": "^0.5.21" }, "bin": { "cognito": "bin/cognito.js" }, "devDependencies": { - "@aws-cdk/assert": "1.129.0", - "@types/jest": "^27.0.2", - "@types/node": "16.10.2", - "aws-cdk": "1.129.0", - "jest": "^27.2.4", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.1", - "typescript": "~4.4.3" + "@aws-cdk/assert": "1.145.0", + "@types/jest": "^27.4.0", + "@types/node": "17.0.19", + "aws-cdk": "1.145.0", + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", + "jest": "^27.5.1", + "ts-jest": "^27.1.3", + "ts-node": "^10.5.0", + "typescript": "~4.5.5" } }, "node_modules/@aws-cdk/assert": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.129.0.tgz", - "integrity": "sha512-d3IPScg+MnXfiDHF44mkWj/hWt0m4WUbcQrUKi5SBFKcnKkrZk2QiLuowOtwre/zhcAX0bCQYfuZI+yS0yVNHQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.145.0.tgz", + "integrity": "sha512-jFxl938cUswXCvj1Mb5av7uHEGud3X1hPPRSGVlrq/XBtgjyvMkuU4ptBb6iM9YUJ+C+duJ6Xu7A6KOeRYLP/A==", "dev": true, "dependencies": { - "@aws-cdk/cloudformation-diff": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/cloudformation-diff": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69", "jest": ">=26.6.3" } }, "node_modules/@aws-cdk/assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.129.0.tgz", - "integrity": "sha512-4WwTTTLl/phl69HBcP1oOVOLEn9oR3Tc3E0V8aabsjERaVF47CidnZZWcRPnxC40XJVc8CucKLlALsTPnZecFA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.145.0.tgz", + "integrity": "sha512-bH9r316qFz4l07mpE9vLWoo/B8ancFyFQciW9VcAcs6cq4fgvSijhOsVW6Tscshx3s22KCrtkaPCIarkJ6x7cw==", "dependencies": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-acmpca": { + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-acmpca/-/aws-acmpca-1.145.0.tgz", + "integrity": "sha512-aMFd5WbJzNJGW+wcjQylsCDW9uoxZHdRHmPCAYue+qVTkEqAY3Hs5HqBKYlceQqCdwNK3/WpMRbvoz+xcVQS1A==", + "dependencies": { + "@aws-cdk/core": "1.145.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-apigatewayv2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.129.0.tgz", - "integrity": "sha512-mticPe0PMnmMg3VeortnlCx++qX0HQsiiewqlfctJZzr8QFePu7cWaeIVqceA7xnE/crBs21bi1wR4Oew5GZtg==", - "dependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.145.0.tgz", + "integrity": "sha512-QFA+ZEbbnVFu0zppdebmKIWP0YxRGUM9qcW57K2WzqoLEmetdKJk0/dwSCIlCUz8rhw2myi/SjLUL9Vj4PCXNg==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-apigatewayv2-authorizers": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-authorizers/-/aws-apigatewayv2-authorizers-1.129.0.tgz", - "integrity": "sha512-cL4HDu2jiilAxK9+JnnxPfgiT8CDBvxDXcdJ58oqXqtMPlTUx2MopM46D7O4O+SEjL3PVRstC0P/pZu9nQfq/Q==", - "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-cognito": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-authorizers/-/aws-apigatewayv2-authorizers-1.145.0.tgz", + "integrity": "sha512-+cQ+l3glBF9aQNKMymM2+aEh4StwNUlKWoo0Jqg8yRbB3+/IuhohtJ/hA2B1y+/ikOuQ9LT83Q0XUJA/LNbJwA==", + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-cognito": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-cognito": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-cognito": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-apigatewayv2-integrations": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.129.0.tgz", - "integrity": "sha512-2TlAFyFqd3moLgWDhpl11QbaKfI7tmvu78KFj8N1BVPI63qFj1urCWJe2YFFfKju2M2vWEjlweR+ZZdM77yPxw==", - "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-servicediscovery": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.145.0.tgz", + "integrity": "sha512-T0N66rN326zaxsDFXfeuhGkyetmYmiXYR2+3HkTrRDjn8jUqLZcXT//inv+kj2qMRkYO2gNiEZr2BEfogQWANw==", + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-servicediscovery": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-servicediscovery": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-servicediscovery": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-applicationautoscaling": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.129.0.tgz", - "integrity": "sha512-YhKgkDRRtT4aMONUVaL97te/K2MkCvCrGNPQzBYJn9WlX/eshlBrlZ1i4eY5DtrXW3mxwT42ynC6Mqq4EfiC7g==", - "dependencies": { - "@aws-cdk/aws-autoscaling-common": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.145.0.tgz", + "integrity": "sha512-j7ua2C2WI9VGAvJxo+oZHCFGT+0zEl3WRpRXhRr2aNErjtWpGei0GohTVzq3rsVyihX51aiKGHCW6u14SbFJOg==", + "dependencies": { + "@aws-cdk/aws-autoscaling-common": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-autoscaling-common": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-autoscaling-common": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-autoscaling-common": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.129.0.tgz", - "integrity": "sha512-KaCkT7j7vzW8UByZouJ3iU2VZul4BBx8PmptM+OeghNB9fZuwPohT5p2ZP9N9PJEA9k1T2JJshUFgjQcclofdQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.145.0.tgz", + "integrity": "sha512-JIQPi79sosiviF/XfjowGjEwRnappgdRjCZzcEO5qzMvn/1dZvomBcg+2S5Ro3aT7TQkFzRc13+J72bxrzRK/Q==", "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-certificatemanager": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.129.0.tgz", - "integrity": "sha512-zEVcXGPlsMHDqblnfxDt1rZT6+Gx0fsUzWFenR8NwsGhEX0r8/dydS9HDjl9jJtqCs73C7RaKcGRH/K6UvV47g==", - "dependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.145.0.tgz", + "integrity": "sha512-GpNotWz50Ab4DAGqC1l1IL5479Ck1mE7+YUtzZ6F951kSlqwVQ159FY9k7xTwnopwRGmZ0UiC1MtWlxZG0RAjg==", + "dependencies": { + "@aws-cdk/aws-acmpca": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-acmpca": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-cloudformation": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.129.0.tgz", - "integrity": "sha512-e894qmNaXpflhlmygvb9p5d77FcDuhG7vZosgW8kVF6IvRYAwK1mQ83RhVpbWaaUi5S3HzLR+pJjnCa4zeCJrQ==", - "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.145.0.tgz", + "integrity": "sha512-+AZQZk2nE9I1zt57DnPrj40FyIUHLf7nWC8+Lrar7U8/GLXuFNTLNYm+Dcb61ou06UUaeOToOVpDMlKFDdsHDQ==", + "dependencies": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-cloudwatch": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.129.0.tgz", - "integrity": "sha512-b5ZLfkbhMe6U36ESucV/4Eja5YIKShrVrSviDozsVFCK1TXAyEvcLCOqx+Uq3JCryytmAYhg/iAf70M+q5mKDQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.145.0.tgz", + "integrity": "sha512-RRAz/q7mcUQJdkao3GSpmV08Qn0Ip9IKJ/iBP7FmmIlIA0k/9hI9XlYXi1NxDrsAExaC7Vvq/pfct7rZ3SrRfQ==", "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-codeguruprofiler": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.129.0.tgz", - "integrity": "sha512-G8ngfNI3UgmM7YRrbqrsd+mQ3F5w9meclDTOW23oNZlGHNsoPhp/vLcL1iyYrWZh9NLE3eMdJmGlZLgQfA/U9A==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.145.0.tgz", + "integrity": "sha512-xVFk1u0B+CRTkuNPJScEHY9cVxLugrZayvlvnwwocS08QJhxsNGuLvrzCjAl5xIdeRv5vW9lw7FsjYuksTrKyA==", "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-codestarnotifications": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.129.0.tgz", - "integrity": "sha512-D1ZgvPSanMQbQxsu8DMOFJTzDVFTfGcbFhZTm5au6cRGiCGo+WR1zbADn1LaGYNvpGyAUintZvtQTin3asaHVg==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.145.0.tgz", + "integrity": "sha512-h//6GBwPeEZ/G1EjHQ2q5HEEfOpaOXO5ym9s92YWL44k5wgN3vOuysS67wUYmhGOI4d3V5QKtzSc4QuqjFaXGw==", "dependencies": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-cognito": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.129.0.tgz", - "integrity": "sha512-oNQaneEIfEM6ZSgV8mEQzEqdVmZCsVeT4ye4q11/lD69oSPy4pwXrQj8D0Yffg4iYJKDgfuJWIYNvO59Lw68mQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.145.0.tgz", + "integrity": "sha512-N4zu8BeahpuGjAauC03jbDBJ6Hk3c5hGr3eirZEZLkOze+6BVBD/sCmHZYvyfwOCw22FieEZWpjRo2vullYO1g==", "bundleDependencies": [ "punycode" ], "dependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69", "punycode": "^2.1.1" }, @@ -310,11 +332,12 @@ "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69" } }, @@ -327,503 +350,475 @@ } }, "node_modules/@aws-cdk/aws-ec2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.129.0.tgz", - "integrity": "sha512-7yLLW4ubbxWOYc+Dwd/Rc6OYNU07DMqgXnWChNjqoQ6dzKo4M8N52OGqVl06Eq7gqtCM+DOVQv3uID/y1Ym/1A==", - "dependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-ssm": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.145.0.tgz", + "integrity": "sha512-+dlxu0UvEso5O+xXnt+1cYCdcBmKX0O9Psqp5lVto+vM8sX8zvKR+KJZV6URXjMmwM0Ms0NpEtEtz28q3jD5UQ==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-ssm": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-ssm": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-ssm": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-ecr": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.129.0.tgz", - "integrity": "sha512-hUiYepHCmvC3u9XphsvZpo2ygiH7AczUOmDbE16kc9U+oPBV/pjfTkBWpkzOcapsU2pfBUm/kc2WMu1DEFU7OQ==", - "dependencies": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.145.0.tgz", + "integrity": "sha512-upsrNKsbJefYugFZeUGNVvDHN14icSY4s+27GQEuwUGX9YEspx3Ke3axIwHRHtrLT5r0URLNh37bBjIjLXCvPQ==", + "dependencies": { + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-ecr-assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.129.0.tgz", - "integrity": "sha512-ejw7e3Pj8IICZxnD8PbHzDUOSKoA9mMtyU+E5VhhgqP0trQQBfYrRm4IL90dPK6ZMepw63vqxaHjklhIAHx53g==", - "bundleDependencies": [ - "minimatch" - ], - "dependencies": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "constructs": "^3.3.69", - "minimatch": "^3.0.4" + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.145.0.tgz", + "integrity": "sha512-TZ3UczCs9qe3BZYwd/1cHJsDHPimNYlMuwLUUkUmFaQCxb8AnMRkj64/XIn6U5OuKvokEUy9Lepec3jtY+6cYg==", + "dependencies": { + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, - "node_modules/@aws-cdk/aws-ecr-assets/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/@aws-cdk/aws-ecr-assets/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@aws-cdk/aws-ecr-assets/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/@aws-cdk/aws-ecr-assets/node_modules/minimatch": { - "version": "3.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@aws-cdk/aws-efs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.129.0.tgz", - "integrity": "sha512-L0FxdInKOZQunUskJWT+fGbyUiBvu8IhSRwiWLEg+KjZhkI+vOUIvY57u1nb+U1Ig7rd6vUjKRIPPpqzErjBww==", - "dependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.145.0.tgz", + "integrity": "sha512-aMhDwUVvx7u/9SQOlHJ03oXv+MnJnWRfIKUXJleDbeodUr3RR9uvHo7nuloLIEpek+B/RoUmIGe8olGgOnxqgg==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.129.0.tgz", - "integrity": "sha512-by+Wjp4FbZnLSkydHetPj1gg5AyNYBL/wEiY1aE+ioybKtnTVb5FxVjeZ3ctwh9xOTRnepcIwfQuZqDA12A8zg==", - "dependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.145.0.tgz", + "integrity": "sha512-0ugrw7jMsKeQdxY9Nq5QKS0t/KbFiQoEa5oBO5K5I7/XG/AmEyUJ2f95NuC+OTQvIadPRfhFF+txD59GymIXXQ==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-events": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.129.0.tgz", - "integrity": "sha512-q4+g4ugQV1maomOZ+HpQynBxw5NcMJGjIRHkfgxa4xl0/LQ4W5ReEHXz73gD5h7tSwCJUsVys9DpQG793R/CSA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.145.0.tgz", + "integrity": "sha512-wxAqedwn5rtCziDE6HeW0sB4Tsfti2c43i04YiwdrrFLm9h5a6Tda9xLaid/fXWUClsiNCubGG8nMHKtbtdP4Q==", "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-iam": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.129.0.tgz", - "integrity": "sha512-SjLrFldOpPYogldJOtJROudcy3ttHaKu49u4cr6MYq3U9dbYmYfQTz2pkKGoAErN9jj2yIpuN5locNBmVzpIcA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.145.0.tgz", + "integrity": "sha512-hRGOO4Ci9xrBakg7REQ/ZkkLJ8KgbH06N+Wq98qpmIeySPnMvMGenVMl1qmhw0hjazzuAuCouM7/TyWMxoEDbw==", "dependencies": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-kms": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.129.0.tgz", - "integrity": "sha512-rscNj7cikIAEtmW3W/5REmTotXvPsm6MtgRMHvd68m87wTbEezdwnx5lgbtqCDZ0pg+v699OsvMWT+kGtNoDXw==", - "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.145.0.tgz", + "integrity": "sha512-CTwvjeIkscbfBlRM2BKSsw6/ZWPL1qNARhZ8riCD2wJvbSiy4vqnTtAaqqNe2xJDSbzHRkmmAeBZb6YKtCVYEw==", + "dependencies": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-lambda": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.129.0.tgz", - "integrity": "sha512-h15c2QUF86fTAPDxobgqojcyyrOxWZjMTLVtwkxrhGlUC7l/989/W5QflILJgxCPq1x6716+6epY3eerUnbGZQ==", - "dependencies": { - "@aws-cdk/aws-applicationautoscaling": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codeguruprofiler": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-ecr-assets": "1.129.0", - "@aws-cdk/aws-efs": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-signer": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.145.0.tgz", + "integrity": "sha512-yRuIFiVsCb+0hoaqFFyvtb77/JRtcNN1Pgip7FFaZsE5HCflMWLqGdOu1a2nPMSQB4+EvqTGyYmE4C6MXelHvw==", + "dependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codeguruprofiler": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-ecr-assets": "1.145.0", + "@aws-cdk/aws-efs": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-signer": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-applicationautoscaling": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codeguruprofiler": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-ecr-assets": "1.129.0", - "@aws-cdk/aws-efs": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-signer": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/aws-applicationautoscaling": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codeguruprofiler": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-ecr-assets": "1.145.0", + "@aws-cdk/aws-efs": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-signer": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-logs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.129.0.tgz", - "integrity": "sha512-E/N9Aj1Xxz6y0r48g1v4BrRK/uhtRjN1poc6xCN+GzIPXrSuiEDV71N9ShqpH38LtapJQSGCq3ou2lvjX7hH0g==", - "dependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.145.0.tgz", + "integrity": "sha512-9SirJ0puNjjvjp+dyzfKHUmVWrqolo6Hv8H1pMi/wkxquQzL/hGWdH/sMp9+VIfNzF7crcvl9+lZB4at9gUFdA==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-route53": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.129.0.tgz", - "integrity": "sha512-ogAqoOTFV5ppk/S6lYmgTLw6ds1kLZZxKy9a9t32RqHCdSJpzuRKkW4jLutNVK605DBqiK3mXBuKRGCz19Z67Q==", - "dependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.145.0.tgz", + "integrity": "sha512-D0x5x1NveA9OhqrvmJeb4RzL++174R83NV8Mz36KUzTqGnPrrq51HmGxIvNqfP7CfT1jh5d0F8icyglIJnMUGQ==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-s3": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.129.0.tgz", - "integrity": "sha512-8Ql9P16HfR1qeWcSp+I5eScD6q/gOtcioQqPlRowFOany5E563w01x9ghKurGQLVgYOZWQKvYWHxFs0vDeXPUw==", - "dependencies": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.145.0.tgz", + "integrity": "sha512-rlYGo49PhNbWqRr1nlVf3WGIHpBivZ8vE9y6eANZrAlGRUSDtvhedX+BiPBPbp7Zkuyj8F6jKhtQ37QMvXOMSQ==", + "dependencies": { + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-s3-assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.129.0.tgz", - "integrity": "sha512-klFuPAaSQs6qC7EB3QN7lqHu8MN4H6JxNcCl21ce3/jwQvqMDsNObrv5nPt2aQkiLlbCcr4ukZC5EsMA4+mguA==", - "dependencies": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.145.0.tgz", + "integrity": "sha512-jKEvfF/Qx1ghPH6wfcWWAFVEQYwoxof19zZIUkkljmGeyyj3OHsKyBKLUQFzldjcX1rm9RdNZE7A0cJYJs026A==", + "dependencies": { + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-servicediscovery": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.129.0.tgz", - "integrity": "sha512-sZ3PuQx14ZJXpYiC+3QLxXnb4x7eptShavERptMxZXAhHsS9K6NDJ6idSPfaNwp0jMglAanLMVeKxbjl6fIfLg==", - "dependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.145.0.tgz", + "integrity": "sha512-xk/BB5lZGcDyRxHkA22Jai/ke5rEepreSKskJio8DtfEQkWzYJ6g4qxoY0STcMve1on4j2HyHjn1vt+OPdfalg==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-signer": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.129.0.tgz", - "integrity": "sha512-5ocJJQO06u9k9Q6NHDOko8rVGLwNi90Sv7RYNd3wA8NFNpS+kI5W65XqVPcAS7NtjKlAr4VYMSpbCpGRfisEOg==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.145.0.tgz", + "integrity": "sha512-xM38SMX2h1nSTcD63FgiipBOvnmEHGyE87H06D+lD9R8o0APwqXTO2q0mpzJG0CNcBSD5oK1bo1JHUINzTdh5w==", "dependencies": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-sns": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.129.0.tgz", - "integrity": "sha512-17TiuAYY8ELrlPfrkEhJH7BPvviIADLWd3SuU6ViXTNXA89DkRVw7j5SWb5xeTgcN1PwP6tBgOekGKsr6W+6lw==", - "dependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codestarnotifications": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.145.0.tgz", + "integrity": "sha512-i2AQEZLIJH/5cNw3i4uqPDWhqqcZ4uzGLbZigTs3NTa63WYAkfDdwvtfZWNBNHzm5g0JIV4y1eT/INLXrmtjpQ==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codestarnotifications": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codestarnotifications": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codestarnotifications": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-sqs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.129.0.tgz", - "integrity": "sha512-DyqQr1RbviDvXqOjtKr1bM0cBrmv05PvQf7U5GNw+BRsFIy7S97F58FFaKrVF1RhVPD9P/DwY3s2LJ/K0/13fA==", - "dependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.145.0.tgz", + "integrity": "sha512-jMhd+8CQ74akrJd07fZ4JKIZ/ZelmZb8VOusvuLtdkAU1uXEKw10BUtWYKzKD5Z25+qKJ95l2YO4qGqfZbGLYQ==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/aws-ssm": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.129.0.tgz", - "integrity": "sha512-cderNJdbnomX3QqNuEANtBVJVqlPL2tLvwjfimrkWXl6iWllt69sm8QHscclUKuWv+DsescdGShVFY9DzViBYg==", - "dependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.145.0.tgz", + "integrity": "sha512-4Sl2d0aDMrNXI7qn+SgZOEJkF4Z4JbNNhSTJetlRpvPXuCPnOmSGiqk88tBbhHrJere5pB7PP4uUmWchFSwBlw==", + "dependencies": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/cfnspec": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.129.0.tgz", - "integrity": "sha512-0WsNvuF0Lem/TpcjxvVN4VrZpvdXPJQVI38qVvm6+tiKj2h6qaOaY0luxZntccTbX43S7wo54tHy5qOl8lDBMw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.145.0.tgz", + "integrity": "sha512-ikpOzPUovrbkDUpFfPBCnSdB+GS/xFDBPprnxAhEBjct/SlIp+1xATsB07awfqRaaUn+pQyLq2fPaaAck8r1KQ==", "dev": true, "dependencies": { "fs-extra": "^9.1.0", @@ -831,9 +826,9 @@ } }, "node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.129.0.tgz", - "integrity": "sha512-1GRxfRrC6p+Jafl12ALkzJ+sV47pM3V8MMQNDQS5XFl7M3+x7kScwYBSNptjC0H6VxywVksN5AMzlY4FXEyV1Q==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.145.0.tgz", + "integrity": "sha512-gj1nNRkORld0ed081Z9cFvTaZF/uEnQAtpH+36ud0yLaGXF9epwaZ4bhCcBoESw+5Ob8kPiSx63d1+j+c5DTkQ==", "bundleDependencies": [ "jsonschema", "semver" @@ -885,18 +880,18 @@ "license": "ISC" }, "node_modules/@aws-cdk/cloudformation-diff": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.129.0.tgz", - "integrity": "sha512-1Wbp03YLXnkFyVafjhwYWUJa+qlkdBuzzKJKbTz6gjApl4+0uUPI2m0IeqgOVEmqyAuSErvcTPWSI8ZmjzjQ5g==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.145.0.tgz", + "integrity": "sha512-CkkPSXaVa2YDy2IQHitPxfPp2095jaMWs8S8nW5fJgBt87R6DVwlrBZl7PIuw6ad44onJVV2SHdj8SW+1e+jHw==", "dev": true, "dependencies": { - "@aws-cdk/cfnspec": "1.129.0", + "@aws-cdk/cfnspec": "1.145.0", "@types/node": "^10.17.60", - "colors": "^1.4.0", + "chalk": "^4", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.3", - "table": "^6.7.2" + "table": "^6.8.0" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" @@ -909,9 +904,9 @@ "dev": true }, "node_modules/@aws-cdk/core": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.129.0.tgz", - "integrity": "sha512-dv+IhyqPbyvgBWGtc1PboCO318PW54llRVyenItt1KxnE5PiGgj/9UFdFi4on+yogRr9GWlNes6OzaLq8+T0xw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.145.0.tgz", + "integrity": "sha512-9eHDg4M/5XuFvZKRIAzXCPcyWay93gAZOZ5Fexvk5W+XcKrnP9d969RVHcFEjjQ1Kgt5130MQ7uMaHTz6Izp6w==", "bundleDependencies": [ "fs-extra", "minimatch", @@ -919,22 +914,22 @@ "ignore" ], "dependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "@balena/dockerignore": "^1.0.2", "constructs": "^3.3.69", "fs-extra": "^9.1.0", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" + "ignore": "^5.2.0", + "minimatch": "^3.1.2" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, @@ -985,12 +980,12 @@ } }, "node_modules/@aws-cdk/core/node_modules/graceful-fs": { - "version": "4.2.8", + "version": "4.2.9", "inBundle": true, "license": "ISC" }, "node_modules/@aws-cdk/core/node_modules/ignore": { - "version": "5.1.8", + "version": "5.2.0", "inBundle": true, "license": "MIT", "engines": { @@ -1009,7 +1004,7 @@ } }, "node_modules/@aws-cdk/core/node_modules/minimatch": { - "version": "3.0.4", + "version": "3.1.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -1028,49 +1023,49 @@ } }, "node_modules/@aws-cdk/custom-resources": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.129.0.tgz", - "integrity": "sha512-s0lGYzc5/bVOgiLV1rot9p40ZCFuLxwLl7MJjpD36J0OBPsKwO5Wkp86zAyo5bwYzR7SIbqslbma7ZyGmA5Jaw==", - "dependencies": { - "@aws-cdk/aws-cloudformation": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.145.0.tgz", + "integrity": "sha512-S2NWVkgBcyFXMd0fJMqOI+L0KLwnBiACOGmoHKDHkXf+WqyIn5c13wwiemh65LgU8war6oM42KEFEAtx1AFTbw==", + "dependencies": { + "@aws-cdk/aws-cloudformation": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/aws-cloudformation": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-cloudformation": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "node_modules/@aws-cdk/cx-api": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.129.0.tgz", - "integrity": "sha512-3orTh2xAYh2OFtPyabXNKWpyke49Qk7jLjVaT8ZasUL1yJYi9fvqVOcA1sZLtag66l1x+JAheYheTeD7WudjGw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.145.0.tgz", + "integrity": "sha512-EeI3eDtj3Nm1PJVlP4weI4MlhW6Tc2wV5x5OzsZxUZz81VLhjuPd6BPpQC+Kf0dIZS2sIVPMavq1h6oBFVx08Q==", "bundleDependencies": [ "semver" ], "dependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", "semver": "^7.3.5" }, "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0" + "@aws-cdk/cloud-assembly-schema": "1.145.0" } }, "node_modules/@aws-cdk/cx-api/node_modules/lru-cache": { @@ -1104,17 +1099,17 @@ "license": "ISC" }, "node_modules/@aws-cdk/region-info": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.129.0.tgz", - "integrity": "sha512-4GMx9ipgdDsf8PXR3Jw3vqiFdhdKVEz9oYOjQVfja7zcpOv7ol1WISVG1CBa0vU7QiZk/NpGxArTAs1G1ViKRg==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.145.0.tgz", + "integrity": "sha512-zaFXT3hccng7tbUVldKj31PKNUDxFlAWW61sIhmDzKdooyaJta3xBLTDGa9kn9dI4/pHb+zAaTWzb3Yh+BGGLg==", "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" } }, "node_modules/@aws-crypto/ie11-detection": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz", - "integrity": "sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz", + "integrity": "sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA==", "dependencies": { "tslib": "^1.11.1" } @@ -1125,16 +1120,17 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-browser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.2.1.tgz", - "integrity": "sha512-WX/Wp6sXPhcBWx/w1aSJv3bDJL0ut5Ik6hl7yfqA1pn3cfsahl4rgHzRRXqYfJ+hnhnCqdgadS17wyBbVPsK+w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", "dependencies": { - "@aws-crypto/ie11-detection": "^1.0.0", - "@aws-crypto/sha256-js": "^1.2.1", - "@aws-crypto/supports-web-crypto": "^1.0.0", - "@aws-crypto/util": "^1.2.1", + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", "@aws-sdk/types": "^3.1.0", "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" } }, @@ -1144,11 +1140,11 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.1.tgz", - "integrity": "sha512-KtZ4qFDWZy6pKcky6RvwSytR/I8vPX9Z47pXh9sOuTcxjjtcegzS2uupg9vo0vbFcAWkSHVOEmNPh6ygiC3VFQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", "dependencies": { - "@aws-crypto/util": "^1.2.1", + "@aws-crypto/util": "^2.0.0", "@aws-sdk/types": "^3.1.0", "tslib": "^1.11.1" } @@ -1159,9 +1155,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz", - "integrity": "sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz", + "integrity": "sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA==", "dependencies": { "tslib": "^1.11.1" } @@ -1172,9 +1168,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/util": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.1.tgz", - "integrity": "sha512-H6Qrl28lzGGXZgLkdP7DQpJ3D3jJagQJugziThcqZCJVUT0HABHJt9EQMiiuf93KcUV/MMoisl56UfCxCFfmWQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.1.tgz", + "integrity": "sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ==", "dependencies": { "@aws-sdk/types": "^3.1.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -1187,709 +1183,757 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/abort-controller": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.34.0.tgz", - "integrity": "sha512-+Qz8/e5sieViXW2qKbfGsXt73Mo87duI2n8HwfDmshjPRXBjpaN478bFHmAjvq9L4MbvW3hSL0mEGrpPErP9Tw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.52.0.tgz", + "integrity": "sha512-Z+4uVtgwbKSChruh6R/WIrGb5uvvXi/d6EQ7zC6hyghtn9EGQc+WJ3BVB4bIUshwMunlgjA3nDiPb5V3t5zv8Q==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/client-cognito-identity-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.34.0.tgz", - "integrity": "sha512-WfJ/xRBqngltOy/L9dbotbNq4dVGW6FEpxzqvWNH9Q1h6uEyX1by9HG3aBTYRxStVBCc7MiDskqm/zViPJHeqg==", - "dependencies": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/client-sts": "3.34.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/credential-provider-node": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.52.0.tgz", + "integrity": "sha512-AnJ0iCxt+wEKVLRlIpSeHLHB8pC0xMqwoe+e+ZJb4WPA8de+J0c0UK2+8D16BrieLrO1DJaIETG7ao3TlXkchg==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.52.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-node": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.34.0.tgz", - "integrity": "sha512-2eBbOF1AssSSYCCelTYdJabyY46dvc5AjHWzAhCPI4mpvKp5UtIxjmV8MmlKhS3WmPHZEpUNYnjou9uc86MCqA==", - "dependencies": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.52.0.tgz", + "integrity": "sha512-IvtZlZopWlWg6xnKSXAodWQaPcRySNBJLj68K6HJ8OVvBCgcXr53nNREArgPi0+KDzLsXqAZTRxvU5do/99PrA==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.34.0.tgz", - "integrity": "sha512-jC+Z779fOyU8kk+Xlbu0Mox2mku91X40jZ0TAxNNEhe0i5mOxv8/L2SkE2daKTQxXBem/gTctQmrZ9g4fRm7dw==", - "dependencies": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/credential-provider-node": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-sdk-sts": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.52.0.tgz", + "integrity": "sha512-tPLHYY9RdWehBQlyrwOaw4B31PqW1HmNNKJ3+Hc6KnEaiOwMAwQd8L7BFbSVG8ajQBDAEBUTDAkSaZ8jTYdfQQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-node": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-sdk-sts": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "entities": "2.2.0", "fast-xml-parser": "3.19.0", "tslib": "^2.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@aws-sdk/config-resolver": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.34.0.tgz", - "integrity": "sha512-goAv4oFpDhsnCJehf0Cr0s4bCxOmfj5fz/SZXsLJbW3rGh8CE+s9hxkFqa1JBR/AN+OBDZ8NRRFIYwnftq9+xw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.52.0.tgz", + "integrity": "sha512-XKUCpPLMwdlqPtwutdMfAHWqGEPTDd14Dp01WyNhVtmTmsHkpFfLPpELLO1BczDS+jyoMUj+UDj9jHm4YLvXXg==", "dependencies": { - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-config-provider": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.34.0.tgz", - "integrity": "sha512-vbsLvcZ1gPnjcToSNYMmc0YR1xz4WzkubpFGVXfwcG3iJcQnu+gKXWeCVEfVrjprlNHuqWXnCCi0rNIncKVavQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.52.0.tgz", + "integrity": "sha512-9R8kTMQ3udNz7fyY/0rkU6Yhu0ALYQJZQ0lFCrxtNo2Nlo9taQtZgxhtRcv+EeqbTcJs91voNNz70HLbedtBUw==", "dependencies": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.34.0.tgz", - "integrity": "sha512-f56md7Xpd7nzkvRFoAaGf3VCXLuNN0jHh9HQFx4VnrQtp9dcVJK1G/2hYl1dlHFIvHBupWKOnzuUplyxyV55pQ==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.52.0.tgz", + "integrity": "sha512-939kfHSkMLsOfQtO2nBqC/zAE1ecTOCAs72pKvVxrluGzDry4UtwlyQ4YGC04pYBRQeRIqvIOoVbADYJy4XjmQ==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.34.0.tgz", - "integrity": "sha512-8SPeje+0tnGPbQ21+TESNE7B8PaIuEGxbkvbMSCm+cKij8Oo6N+StSGZh+0FJhlh+QptWjR/yaH0MKYpIUFUGw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.34.0", - "@aws-sdk/credential-provider-imds": "3.34.0", - "@aws-sdk/credential-provider-sso": "3.34.0", - "@aws-sdk/credential-provider-web-identity": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.52.0.tgz", + "integrity": "sha512-MCzWWPYoZjZ3C/X8UXXf9eRqgGJc3Y1QyFXIuQzNrVhffrFkYOkOUQsG4s5TuDr1MmGfxe83XtHQgATJ0fe3zw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/credential-provider-sso": "3.52.0", + "@aws-sdk/credential-provider-web-identity": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.34.0.tgz", - "integrity": "sha512-aZkBWHe9bVNraQlhHageKPaxrZGGIFBTKJ1WT19cHZVnCj8ufCoogvct28eW1SEucn1jPBWPFhaX3/0y16Bc6Q==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.34.0", - "@aws-sdk/credential-provider-imds": "3.34.0", - "@aws-sdk/credential-provider-ini": "3.34.0", - "@aws-sdk/credential-provider-process": "3.34.0", - "@aws-sdk/credential-provider-sso": "3.34.0", - "@aws-sdk/credential-provider-web-identity": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.52.0.tgz", + "integrity": "sha512-SUl+t2S7xKHxAkIfuyvucKQ/JemJ/bCsuCk2qtjTSiVjrLx65Rnfw14j+44JU8U5mP+xodpKNCpgIF5PHu1kKQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/credential-provider-ini": "3.52.0", + "@aws-sdk/credential-provider-process": "3.52.0", + "@aws-sdk/credential-provider-sso": "3.52.0", + "@aws-sdk/credential-provider-web-identity": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.34.0.tgz", - "integrity": "sha512-4n07qYfLLzjTLyrQTT7iuZTlKZLYyKT4yFjnKyJT3dOoFyW4jWFWjZyicY9TNg4D4f2ya6P3w+H+03DGof0Opw==", - "dependencies": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.52.0.tgz", + "integrity": "sha512-DGaSprlcEGgFuCiXNH9moksa6/1vBmX/G/tt/ulpgFEJmKljoazIEgUse/6oPJT7t5jazydAqMRVp1HK3Jp/0A==", + "dependencies": { + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.34.0.tgz", - "integrity": "sha512-/xyUHA8o5dIaMoKVigjeIgGI1ofGBsVmb1cK16m3w0CDDUgyoEeQD+pust68rYiyuuhgaRqnRtVvjysPPJPMaA==", - "dependencies": { - "@aws-sdk/client-sso": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.52.0.tgz", + "integrity": "sha512-8Q0X4wro+sPMYkbZE/ZW+CBpjxGq/x/vv4yQh7zdHpNfANhqjTSR8tUCApemVcfPtwNhQNPpW8KrlWUIMguHdg==", + "dependencies": { + "@aws-sdk/client-sso": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.34.0.tgz", - "integrity": "sha512-4YvuKL2TOyEuktU7v1objIc9PoDMSm2Fxp90KJckitcGnLMsdcaoIV9GgF5nIZrZ7tOUg2ultamCJUkUFZYLMA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.52.0.tgz", + "integrity": "sha512-+4qz0PZn9u6HRRNBO9YfIixdItukixPOtLP8tNlgriCh66BC6M1mAXXP/uq2x7kIaMRZtTo3Eey4T/tA0QMkOg==", "dependencies": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.34.0.tgz", - "integrity": "sha512-evcyWkI0xsQYjSZOzYy+1ke8CwzOaUpg0+tCLPQwG4GKC+GmRWd0ABrxs8OmPBo4SHPQvDpUakX0CRiZu/gm/g==", - "dependencies": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/querystring-builder": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.52.0.tgz", + "integrity": "sha512-pFXkCeEIcrgH8esRyUab1nnIo1cjUjrheqwb/MK3gJ363/kenT6IqYXOq0UO4mF7bn6IOz/yxODlhQIU6i1Vww==", + "dependencies": { + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/querystring-builder": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/hash-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.34.0.tgz", - "integrity": "sha512-gAPr7p+MgLJ75YRQSELidq0bU/RduPI+kjyY516Od79CNwwe9DEN2JeQakXN3lUfExgp38P9onsRr1d6wKP4EQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.52.0.tgz", + "integrity": "sha512-pN2dSSyyy0emFFtK6jgmzYXcJHITbfdPqR7UTQ1fj1wFvbURPN19C1f4uYbVDjuiUQX01hLclJDLnPy1BIzTGQ==", "dependencies": { - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.34.0.tgz", - "integrity": "sha512-Seaiu1fT9k7F03KVi/rVf+buRAyAEAzg66ryg14GQW/cei/b/uD4+Gohyk+mRnMqDh4nNluCaktzhr7wSZGeVA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.52.0.tgz", + "integrity": "sha512-TjRzfFFiY4i/a9ry5llCQMiIwpyhIyriM2QuPgAdRaRPM076I01FohUzlAc7zgwwhCa5rpI4zRZ+auGPrU44Gw==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.34.0.tgz", - "integrity": "sha512-YOblEaT5Fq7qHys8mSrNdJS3ZUsLviYyOk6q3ixmHPFcFpO3etGr5AnlDSFqlSm0jnX/0irmp3fbF96kMKLtUg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.52.0.tgz", + "integrity": "sha512-5Pe9QKrOeSZb9Z8gtlx9CDMfxH8EiNdClBfXBbc6CiUM7y6l7UintYHkm133zM5XTqtMRYY1jaD8svVAoRPApA==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.34.0.tgz", - "integrity": "sha512-+5NnSDEDxcAWXDQSXe1P+Dywrb6sYKSaoiu+kNcYB21mTwG3i9St1A2Q0wNMsdRMRVwSg/lJV5MbY5Mbk0+D5w==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.52.0.tgz", + "integrity": "sha512-U+aa8UswtEvEdt4vvX+C4b+vetSpG6PZVeGN/hZ2J0j3jQxODQtjKHU3VIO+Fvp8m9rSCtcfAPly5CcejHLeKw==", "dependencies": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.34.0.tgz", - "integrity": "sha512-3ZcBTicauGp0reKQ8Pw8ardk9kRTO7/lWAKGV7f0PnfOoGn+zUqVP0qvaHL3VNVdTJEz6fkkU7pJ0duCVCnpmA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.52.0.tgz", + "integrity": "sha512-t7y0gtJyFNrS6bwluR7N2LtppA7B0SDk+uNlvOJOYnJRms89fXltyMJWl8wrv8IHHvrhRLwNEP22vvOhn3hriA==", "dependencies": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.34.0.tgz", - "integrity": "sha512-EBVp3tkEbMSW9ikMzejucYLOf+G98+vGqWSkvGbR0N8lBHs2za+fufBqknEY8lD7a8RLFQ3enevl8DMJ9d75pA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.52.0.tgz", + "integrity": "sha512-YbFuJAsOPvbYe64gpqmS6XmEQXwyAGwH3Y4iOp3CnrGAz/zXbwWwzb653Uby+h4PVkTZ1+RviCO/A6si9bUkhw==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-retry": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.34.0.tgz", - "integrity": "sha512-PKWlJWhr7b3jEsTDRBXf7mIUkjnGMQiYvNs3G1kdwrySbii2yEOlwy7KXAAo/TCwuL10W+HZG7EZwkwXNg7LTQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.52.0.tgz", + "integrity": "sha512-O+4mfn7OPv1POYagKwOgdlc16AQFWa4bY05g6Y94KZ2400ywNpK+Y2cwdskyNU3OTGOlluVGR21W5eO1b+XhNg==", "dependencies": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/service-error-classification": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/service-error-classification": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0", "uuid": "^8.3.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.34.0.tgz", - "integrity": "sha512-tJPkij4H0z4AbjOnRlcUP99dJud4SlH9fYfnxQ1CeG1PO0Zz1zTEc+2Sc93068bS4K4nrD4QaVsoOokvjW/4MQ==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.52.0.tgz", + "integrity": "sha512-NB1wHvOp+I6DXi5fPutyl9dAWvJYqzRqdi8lMeu02ub/d6nybrAjoB56za1LvGblcoEiYClf1A6dTKtmydgzFQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-serde": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.34.0.tgz", - "integrity": "sha512-oU2oa6hy1+DrFROD+K00NkRNdrsNgryay6rCA/jSUfwGEFmvN3iANTgXkEEvEKCSYqyh/ai998jk+6v60ChFBQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.52.0.tgz", + "integrity": "sha512-4ZooINTdOI4+T6pEiu8xte5EEhOqbE/wqOwBzvOASk3JKElZ93u6xKP2u7UKVD6asBBYK2mDrYSy1PsU4fNl4A==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.34.0.tgz", - "integrity": "sha512-dlxyxIg6Mrjx6GzUVQoQV9M/n3kEvs6aMEzR3DTF0i8CGqWtKXE5OZhsjLVRflVOejONM7NEXwNeFHr+lQ4Z9w==", - "dependencies": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.52.0.tgz", + "integrity": "sha512-7FUqmZQ5DzaDJYCJ3YmOHRFEyFeohtsDQ1akWD2qekcjp16ftBtk05Fi9am5/L7pO8svVzobji/wg00Tlq183A==", + "dependencies": { + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-stack": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.34.0.tgz", - "integrity": "sha512-7WI+spzWcTYWIP0MwTDlE+LsWGlpZq44mvRGnNHDjnTjqfr5C3kWSc86fedujvbaW5ZGTes5NGmKQf/PqAmUqQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.52.0.tgz", + "integrity": "sha512-4OTbQ+tWc6Le7es3kSnXBzCyddcUw6Sk2GupR/1+PD9v4/qvtKXXK+uD4bMDDMfi6dTNV+2riOGBniOtBVsayw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.34.0.tgz", - "integrity": "sha512-EZBy0fNhuenzxlVAx2GcgBFOGCTyHs1Gg1GB/qUIhqZ2MHY66Yogj4BqPkiOg+zo7nFwCjWQ9LRypYZYXCWMLw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.52.0.tgz", + "integrity": "sha512-sfdJvAp/f4PHmQvSklFAuCpD7gqloG502gSmBAMrXKqYykvQ5SAGyr6sCZPWf8CZxKtn5n4ftg8CLKywwrKwmg==", "dependencies": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/node-config-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.34.0.tgz", - "integrity": "sha512-VPDYLNkwvhAlhSWecMbmiXpa/n20i9S4z0/+pSB4kXT73MvH3us77ecYXD5g8IIRrAR+Oaq8hrQLDP88bbte9g==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.52.0.tgz", + "integrity": "sha512-vfeTzkfVtGaNQrnhCRMObqid0shxFtNFEnnU1Nnx7HsgBfag2/T6fnsDzdVGaliQ6nmfg+RMrhzw2VECyBTHQQ==", "dependencies": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/node-http-handler": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.34.0.tgz", - "integrity": "sha512-Fyf0VsgatDr3puqIA4CHTqVKUPBveq0skQhXyPDXxXIllxExpqcrWu8fFqE2DalCqiDiDC7zR8Yh56syiBxmvA==", - "dependencies": { - "@aws-sdk/abort-controller": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/querystring-builder": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.52.0.tgz", + "integrity": "sha512-MjLkndwLuWye1kavyFnDw5BvK8Rg4YpMULTne++OL/uEsxWO786K+QQMyLWkirPe+ELMEYu/3eOrQTly2tqHsA==", + "dependencies": { + "@aws-sdk/abort-controller": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/querystring-builder": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/property-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.34.0.tgz", - "integrity": "sha512-Xkj6l14bYhKnzUXenBn8TANvR5p4pzLZF8Uk/pCVYZFgotOd5gVTC89SAQa4Lw2PzwoTqOsWKglS7CWi4KaBDg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.52.0.tgz", + "integrity": "sha512-Ooam7CvGefHKhMwQ413MiEtDTFw70xbCduJCF7Bg1F0WKrf700M/Yte+q3E0ljlXWJ28rwJNgwW3ptZaSXMGPg==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/protocol-http": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.34.0.tgz", - "integrity": "sha512-VPzI/VcDXqoWcyJNc0p/ee1pjGXFC8PmaZwK7PO3FkNEa8BE/9IbfVg3AGIekEDIXwpdZAjQeLCmOsMx866S2Q==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.52.0.tgz", + "integrity": "sha512-L6ITU9NG0L6nyYfzhSLa0EsgDlyL1vHNz+Om9o7TayUUF7O0f3UiZToWf2hdETQ04Os8625aZt0VH92ZnYyeEw==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/querystring-builder": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.34.0.tgz", - "integrity": "sha512-lDkJPvDsR+Ou0NIWUJlVCpi6vDNaPVgxtP2r/4kktoSYzwFz4UCkmKcDRdL4cxEZ6LYA0QkjtkyfQotoZMuIXA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.52.0.tgz", + "integrity": "sha512-RfNXqKeR6mdg2n2LO5Vs2Bz+f47/KN5k36HWk04bSwIbhnBtslXBp0F1KgSPkeP56KEgmmUWldRD7g8BvDkgAw==", "dependencies": { - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-uri-escape": "3.34.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-uri-escape": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/querystring-parser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.34.0.tgz", - "integrity": "sha512-IMpHNQOSPVk7qaDDaFL6xmTW4VuMbTxyhRdrVmxZXWWgRvMRs2chjXdq3iyTtpnKq5GNnEdPY7udjfWqYoaN8A==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.52.0.tgz", + "integrity": "sha512-/A6PauieStZajbkxX3sZSBBDacGDc3I/Sk7rjJulmg1GnizeVcUgx1OUdDh1JasdqA1h9E3ks/Y2Lu3xUMctLw==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/service-error-classification": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.34.0.tgz", - "integrity": "sha512-RYmgfrGSfULduJf753rMlK0E+NoK6PUaACb5eiVKoGyo8NpzDFcDWVL2yAb40tAqI7ahhWz1uqGzb1sRPWSAIg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.52.0.tgz", + "integrity": "sha512-2bpSIZCx5VGp2CBTeXK6PxlBYWrn2wiqxBVYstDRExZ8P7edcwPRgWi8qaKgPM2wvstZwJieF774niiuLddIpg==", "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.34.0.tgz", - "integrity": "sha512-zh238/JYpP9+7FkCODH+UYqL1StbBtidFOt8Vmo4MNdh10R31XImnL0npdhRLiZSkOoatpHc+ViCOeH+I67QiQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.52.0.tgz", + "integrity": "sha512-tALb8u8IVcI4pT7yFZpl4O6kgeY5EAXyphZoRPgQSCDhmEyFUIi/sXbCN8HQiHjnHdWfXdaNE1YsZcW3GpcuoQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/signature-v4": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.34.0.tgz", - "integrity": "sha512-oKW5Frsu4TMc/8eLcRE4kdgKj1XqsVCry9VdjDgNpx37aeH7oggg75YDU+UZuhdF++hDr6uCa+DYxtluQ8g9sg==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-hex-encoding": "3.34.0", - "@aws-sdk/util-uri-escape": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.52.0.tgz", + "integrity": "sha512-lSlDASXGLup5v12kclzT2ZLoUnnVLknSRcMXrTVjnX7spmHMbs6s7LOcN0RXZzFIACs7vW+930KUzhBxt8UiFQ==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-hex-encoding": "3.52.0", + "@aws-sdk/util-uri-escape": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/smithy-client": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.34.0.tgz", - "integrity": "sha512-nhLNpqehOYuBVr2f2LodMbO1j8J97WBTjfiyosUhVh36WDmSCPu4LjAJuzOLPF6LXp4fBK0BA04rJQA6nyFC0g==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.52.0.tgz", + "integrity": "sha512-GuOJuoA1kky/v2p7byOZGq7YOiu2Ov8DA3d58gM6L/q7XavBjnzwNB/BYU7SPU3Ly6S7qGxBJFeadufic4bCYg==", "dependencies": { - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.34.0.tgz", - "integrity": "sha512-rx9mJp+yKEgb6HVyMtytG+45xwiX3eaHy1VrPC0RV/Uxym1iGyFmpHYo+0/UgL1BTRrJXLA9gTfj15H5kyZ6/Q==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.52.0.tgz", + "integrity": "sha512-5deI1v6Fr7/a+TT9hPuiy6I/L/7uJTda3q3DEvUd0CsGbBB/fcDXJg8jlnMHcmw7mkfP9vE553ZJQS3Cb0v4vg==", "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/url-parser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.34.0.tgz", - "integrity": "sha512-RqF5vQ3+kTRhNmsT7V9KqPnfrDsHZg8XjgEFdr29iKXEupOockQlJBVGTesy73y9nvnMueNKNZkk4VLeHEW6cg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.52.0.tgz", + "integrity": "sha512-/9OJwol/384jsISiAs5JX7fkgd9mv7hJsHFCVXnByim5qTZu1V9fMcJYJ1L3iRmfCRy0w75UDJljIx2RZnwAYw==", "dependencies": { - "@aws-sdk/querystring-parser": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/querystring-parser": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/util-base64-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.34.0.tgz", - "integrity": "sha512-3ScDOSlrX4EnwWzYnDfKa3GjiLYnHfk2YEV5G+f/NOEKhsuTsj++PGvdLqbXc4m03rLiDBoMgN204tz78rSgsA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.52.0.tgz", + "integrity": "sha512-xjv/cQ4goWXAiGEC/AIL/GtlHg4p4RkQKs6/zxn9jOxo1OnbppLMJ0LjCtv4/JVYIVGHrx0VJ8Exyod7Ln+NeA==", "dependencies": { "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/util-base64-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.34.0.tgz", - "integrity": "sha512-r7tPqydtuzjMH9BBPw34l8zlN84O8EuJPl2mx1JXFrDE+ADUx1VBU+KK1pnIFoFVb7/FWMVPeaKz1u0EjsSKRQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.52.0.tgz", + "integrity": "sha512-V96YIXBuIiVu7Zk72Y9dly7Io9cYOT30Hjf77KAkBeizlFgT5gWklWYGcytPY8FxLuEy4dPLeHRmgwQnlDwgPA==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.34.0.tgz", - "integrity": "sha512-Av7x9dKoygju9QBuTIGa7JITxGlIj7NhN22CxX3FThIIJofp5qbnTTiLURivM6jw6Wvf2sZ4mpP34xEeDvXG/A==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.52.0.tgz", + "integrity": "sha512-8omOgIGmopUtwg3XaeyvqacxrIrCsDKUVQp5n+8iLmyYt5mQM70vXbUC273GJzKDtibGDfxiN4FqSLBlo9F/oQ==", "dependencies": { "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.34.0.tgz", - "integrity": "sha512-slrlSnPNQd/6pvTpvK0Z8z7hbrND0dEA+0/4Y3l47hBftznxhiKbLKiCg5a3iBjTxUB0qSQ03YNY/fK3DtPJTA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.52.0.tgz", + "integrity": "sha512-1WWsGh0hip4y1uvOLFV2v3Nvq3W35dmW5YniCi0gQDBLc5JHES8Zka7yoCDYOfaYFUodVH5mC/jFBjGRQ3TpDw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.34.0.tgz", - "integrity": "sha512-G1XXPD3IfHYXEGwknC2ogn2CylxrYcdwwWbS1vGji9zP6YX8C/gf+moLtJz3bDlMwSHTLdzdH/RWBIL75djGKg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.52.0.tgz", + "integrity": "sha512-hsG0lMlHjJUFoXIy59QLn6x4QU/vp/e0t3EjdD0t8aymB9iuJ43UeLjYTZdrOgtbWb8MXEF747vwg+P6n+4Lxw==", "dependencies": { - "@aws-sdk/is-array-buffer": "3.34.0", + "@aws-sdk/is-array-buffer": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-config-provider": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.52.0.tgz", + "integrity": "sha512-1wonBNkOOLJpMZnz2Kn69ToFgSoTTyGzJInir8WC5sME3zpkb5j41kTuEVbImNJhVv9MKjmGYrMeZbBVniLRPw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-credentials": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-credentials/-/util-credentials-3.34.0.tgz", - "integrity": "sha512-Spb7MtRMmAeHekaju85m5WOO8/C277+6pWvBQlh3vADwmxsBdyvDCIZtXLhlqW/zeUUKvr7atkuhW5h2Ck+gfw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-credentials/-/util-credentials-3.52.0.tgz", + "integrity": "sha512-fNcm2cNzDHWt5Pr6xD2FXA40jkcgClsbumuI0VBhLEyNLfoetwPImKTpqbxo1XfWVxhqIbT/ELnrbS2OYBRIXg==", + "dependencies": { + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.52.0.tgz", + "integrity": "sha512-N2/DHJ/OfiQ5zP97k9cJ8jSGiWDjtR7oFqXR+wbKZzKOww6vencMPYlndU6v1uZOKEjoj+NBr5N0jPEjCz+6+g==", "dependencies": { - "@aws-sdk/shared-ini-file-loader": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", + "bowser": "^2.11.0", "tslib": "^2.3.0" }, "engines": { "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.34.0.tgz", - "integrity": "sha512-eM1jKmD1SOCluLMqOxmbJRqPbuSyDGp1HELEAYt1zG2xy1pAugiJK7zyCcNZ8Wt/1RQQA1QnPnSTtQFK1GVzbA==", + "node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.52.0.tgz", + "integrity": "sha512-vmbvirg5edfNKBin8Mup2noxgqIYzYPnvk+BgIx3jFPvwT57WGRs/ahOMNqHgv/6xAdVaUjz8g7gw9Yy3mwP3A==", "dependencies": { + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { "node": ">= 10.0.0" } }, + "node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.52.0.tgz", + "integrity": "sha512-YYMZg8odn/hBURgL/w82ay2mvPqXHMdujlSndT1ddUSTRoZX67N3hfYYf36nOalDOjNcanIvFHe4Fe8nw+8JiA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.34.0.tgz", - "integrity": "sha512-/xZs6dJ+00H/vNi4+tRoj32XfkhDCYWiASI/wVMzpZG/F15SOipe9MWxUWrH7FAm+BSp5cHcdnLtzFoJmI5cCQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.52.0.tgz", + "integrity": "sha512-l10U2cLko6070A9DYLJG4NMtwYH8JBG2J/E+RH8uY3lad2o6fGEIkJU0jQbWbUeHYLG3IWuCxT47V4gxYrFj7g==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.34.0.tgz", - "integrity": "sha512-UxB5LfwB4BWdQyLJkkHz/U/gigQBkkfVhQHJx0Sg/yMH/PnTuUqdj+MWhezca/9VQShx24uBewXWV4ToybYULA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.52.0.tgz", + "integrity": "sha512-W9zw5tE8syjg17jiCYtyF99F0FgDIekQdLg+tQGobw9EtCxlUdg48UYhifPfnjvVyADRX2ntclHF9NmhusOQaQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.34.0.tgz", - "integrity": "sha512-7bSk/d0LPzGnYLkKI0Z91dsoPudoayRywrYjdEbTbD85d+2VDKuxszhACVV4hbcQSc7x0zCumRJE7rx3c2weIQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.52.0.tgz", + "integrity": "sha512-zmw9pJ91QAr1oF3uqLKuo/3++NrSEagLwz3xnuID5wN8WLAgbC6MkvM7FG+r11CHSoUX3IeB6YDqoBMQW8en8w==", "dependencies": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "bowser": "^2.11.0", "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.34.0.tgz", - "integrity": "sha512-EupJGySosLRk9NWYajE4x6gEEW+ZiW4cdNlDUkDWng+qruxNJDxLIO2xRrPBFiA+s/DMy6HRXWROBWpGnqLB5w==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.52.0.tgz", + "integrity": "sha512-jqbyb6R4goWOTIESizmNPy1i3Xa25Q3QG0xt6Pct0DwLQUSVpnPHw07NmfRhql+eYBoD4uxpXDX9lWsuLUBi0w==", "dependencies": { - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.34.0.tgz", - "integrity": "sha512-auB09BoFk5mPA444WmBpF5dZN+59ojrmpAcJf4zc0S/UfsWzAQDj7Lsj2aSu9O0xWoDmtzUWxfiwQqNIEqcNIA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.52.0.tgz", + "integrity": "sha512-LuOMa9ajWu5fQuYkmvTlQZfHaITkSle+tM/vhbU4JquRN44VUKACjRGT7UEhoU3lCL1BD0JFGMQGHI+5Mmuwfg==", "dependencies": { "tslib": "^2.3.0" } }, "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.34.0.tgz", - "integrity": "sha512-Okarq9OUG99UOcen3dYUQCw62Fm9DQk3zyt/7MMgbt9G6Sz6kQ6s1vtC4Ip+HxhALBQPFj8THcf2ijh55L6unQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.52.0.tgz", + "integrity": "sha512-fujr7zeobZ2y5nnOnQZrCPPc+lCAhtNF/LEVslsQfd+AQ0bYWiosrKNetodQVWlfh10E2+i6/5g+1SBJ5kjsLw==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 12.0.0" } }, "node_modules/@babel/code-frame": { @@ -2087,9 +2131,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -2411,12 +2455,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -2488,9 +2532,9 @@ } }, "node_modules/@cspotcode/source-map-support": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", - "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" @@ -2525,16 +2569,16 @@ } }, "node_modules/@jest/console": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz", - "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.2.4", - "jest-util": "^27.2.4", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" }, "engines": { @@ -2542,35 +2586,35 @@ } }, "node_modules/@jest/core": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz", - "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, "dependencies": { - "@jest/console": "^27.2.4", - "@jest/reporters": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.2.4", - "jest-config": "^27.2.4", - "jest-haste-map": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-resolve-dependencies": "^27.2.4", - "jest-runner": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", - "jest-watcher": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -2589,76 +2633,77 @@ } }, "node_modules/@jest/environment": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz", - "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4" + "jest-mock": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz", - "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.2.4", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz", - "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.4", - "@jest/types": "^27.2.4", - "expect": "^27.2.4" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz", - "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -2678,13 +2723,13 @@ } }, "node_modules/@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, "dependencies": { "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "source-map": "^0.6.0" }, "engines": { @@ -2692,13 +2737,13 @@ } }, "node_modules/@jest/test-result": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz", - "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, "dependencies": { - "@jest/console": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2707,38 +2752,38 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz", - "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.2.4", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-runtime": "^27.2.4" + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz", - "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.2.4", - "babel-plugin-istanbul": "^6.0.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", - "pirates": "^4.0.1", + "pirates": "^4.0.4", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" @@ -2748,9 +2793,9 @@ } }, "node_modules/@jest/types": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz", - "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -2773,9 +2818,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", - "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" @@ -2815,9 +2860,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2828,9 +2873,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" @@ -2889,9 +2934,9 @@ } }, "node_modules/@types/jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", - "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", + "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", "dev": true, "dependencies": { "jest-diff": "^27.0.0", @@ -2899,15 +2944,15 @@ } }, "node_modules/@types/node": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", - "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==", + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", + "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==", "dev": true }, "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", + "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", "dev": true }, "node_modules/@types/stack-utils": { @@ -2938,9 +2983,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2993,9 +3038,9 @@ } }, "node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3094,37 +3139,40 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/aws-cdk": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.129.0.tgz", - "integrity": "sha512-9Se35i7mtRB2m0gbrdgQmDjFS6NeI+72wsXaOJQg0xMIX+vnl5mXdmCy7SDJEtYUBTz/Db7wcuXJ46t0+rRLyA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.145.0.tgz", + "integrity": "sha512-mr1Zr67r1n84a87WEOz1qixhWmQIK9P7Vj3/jKKkHsfWD6Wo2U89FNZHEX3eR4FKLgKTQyWaDLFTcSOjJnGoog==", "dev": true, "hasShrinkwrap": true, "dependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cloudformation-diff": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", - "@jsii/check-node": "1.40.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cloudformation-diff": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", + "@jsii/check-node": "1.54.0", "archiver": "^5.3.0", "aws-sdk": "^2.979.0", - "camelcase": "^6.2.0", - "cdk-assets": "1.129.0", - "colors": "^1.4.0", + "camelcase": "^6.3.0", + "cdk-assets": "1.145.0", + "chalk": "^4", + "chokidar": "^3.5.3", "decamelize": "^5.0.1", "fs-extra": "^9.1.0", "glob": "^7.2.0", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", + "json-diff": "^0.7.1", + "minimatch": ">=3.1", "promptly": "^3.2.0", "proxy-agent": "^5.0.0", "semver": "^7.3.5", - "source-map-support": "^0.5.20", - "table": "^6.7.2", + "source-map-support": "^0.5.21", + "strip-ansi": "^6.0.1", + "table": "^6.8.0", "uuid": "^8.3.2", "wrap-ansi": "^7.0.0", "yaml": "1.10.2", @@ -3138,7 +3186,7 @@ } }, "node_modules/aws-cdk/node_modules/@aws-cdk/cfnspec": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "dependencies": { "fs-extra": "^9.1.0", @@ -3146,7 +3194,7 @@ } }, "node_modules/aws-cdk/node_modules/@aws-cdk/cloud-assembly-schema": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "dependencies": { "jsonschema": "^1.4.0", @@ -3154,34 +3202,34 @@ } }, "node_modules/aws-cdk/node_modules/@aws-cdk/cloudformation-diff": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "dependencies": { - "@aws-cdk/cfnspec": "1.129.0", + "@aws-cdk/cfnspec": "1.145.0", "@types/node": "^10.17.60", - "colors": "^1.4.0", + "chalk": "^4", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.3", - "table": "^6.7.2" + "table": "^6.8.0" } }, "node_modules/aws-cdk/node_modules/@aws-cdk/cx-api": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "dependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", "semver": "^7.3.5" } }, "node_modules/aws-cdk/node_modules/@aws-cdk/region-info": { - "version": "1.129.0", + "version": "1.145.0", "dev": true }, "node_modules/aws-cdk/node_modules/@jsii/check-node": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.40.0.tgz#49882a61ad1b3a37cd35c35fa1a2301955f1c058", - "integrity": "sha512-rk0hFXxFQR8rDGUfsZT9ua6OufOpnLQWsNFyFU86AvpoKQ0ciw2KlGdWs7OYFnzPq8sQGhSS+iuBrUboaHW3jg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.54.0.tgz#6cee236d2267c1d4df4cd58aacffdf7fbf87ebe7", + "integrity": "sha512-pogNR1vgiXgBK2DQF+RsCnJQ9QPe+y7lyoRlsTtUplIFB6ryWnSsmCyzkInSVoKAKCo5CHkuDy190MbYL4Ns4Q==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -3200,6 +3248,18 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, + "node_modules/aws-cdk/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "node_modules/aws-cdk/node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", @@ -3210,9 +3270,9 @@ } }, "node_modules/aws-cdk/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3236,6 +3296,16 @@ "color-convert": "^2.0.1" } }, + "node_modules/aws-cdk/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "node_modules/aws-cdk/node_modules/archiver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", @@ -3300,9 +3370,9 @@ "dev": true }, "node_modules/aws-cdk/node_modules/async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, "node_modules/aws-cdk/node_modules/at-least-node": { @@ -3312,15 +3382,15 @@ "dev": true }, "node_modules/aws-cdk/node_modules/aws-sdk": { - "version": "2.1006.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1006.0.tgz#fc2f7e267d19a6297f732e19449461bb944682af", - "integrity": "sha512-lwXAy706+1HVQqMnHaahdeBZZbdu6TWrtTY0ydeG0qanwldTFNMLczwnETTZWYsqNAU+wjl1VzmFdMO4gePLNQ==", + "version": "2.1074.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1074.0.tgz#be3283f781b3060cd67d5abef50d1edacefede70", + "integrity": "sha512-tD478mkukglutjs+mq5FQmYFzz+l/wddl5u3tTMWTNa+j1eSL+AqaHPFM1rC3O9h98QqpKKzeKbLrPhGDvYaRg==", "dev": true, "dependencies": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", - "jmespath": "0.15.0", + "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", @@ -3369,6 +3439,12 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "node_modules/aws-cdk/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "node_modules/aws-cdk/node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", @@ -3390,6 +3466,15 @@ "concat-map": "0.0.1" } }, + "node_modules/aws-cdk/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + } + }, "node_modules/aws-cdk/node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", @@ -3413,27 +3498,27 @@ "dev": true }, "node_modules/aws-cdk/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "node_modules/aws-cdk/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "node_modules/aws-cdk/node_modules/cdk-assets": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "dependencies": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "archiver": "^5.3.0", "aws-sdk": "^2.848.0", "glob": "^7.2.0", - "mime": "^2.5.2", + "mime": "^2.6.0", "yargs": "^16.2.0" } }, @@ -3453,13 +3538,32 @@ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, + "node_modules/aws-cdk/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "node_modules/aws-cdk/node_modules/cli-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.1.tgz#93e3491308691f1e46beb78b63d0fb2585e42ba6", + "integrity": "sha512-eBbxZF6fqPUNnf7CLAFOersUnyYzv83tHFLSlts+OAHsNendaqv2tHCq+/MO+b3Y+9JeoUlIvobyxG/Z8GNeOg==", "dev": true, "dependencies": { - "es5-ext": "0.8.x" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" } }, "node_modules/aws-cdk/node_modules/cliui": { @@ -3488,12 +3592,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/aws-cdk/node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "node_modules/aws-cdk/node_modules/compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d", @@ -3519,13 +3617,13 @@ "dev": true }, "node_modules/aws-cdk/node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", "dev": true, "dependencies": { "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" + "printj": "~1.3.1" } }, "node_modules/aws-cdk/node_modules/crc32-stream": { @@ -3544,6 +3642,16 @@ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, + "node_modules/aws-cdk/node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "node_modules/aws-cdk/node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", @@ -3551,9 +3659,9 @@ "dev": true }, "node_modules/aws-cdk/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -3605,9 +3713,9 @@ } }, "node_modules/aws-cdk/node_modules/dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz#5bcc80be7097e45fc489c342405ab68140a8c1d9", + "integrity": "sha1-W8yAvnCX5F/EicNCQFq2gUCowdk=", "dev": true, "dependencies": { "wordwrap": ">=0.0.2" @@ -3629,10 +3737,48 @@ } }, "node_modules/aws-cdk/node_modules/es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", - "dev": true + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/aws-cdk/node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/aws-cdk/node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/aws-cdk/node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } }, "node_modules/aws-cdk/node_modules/escalade": { "version": "3.1.1", @@ -3670,6 +3816,16 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "node_modules/aws-cdk/node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/aws-cdk/node_modules/events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", @@ -3682,6 +3838,21 @@ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "dev": true }, + "node_modules/aws-cdk/node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/aws-cdk/node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true + }, "node_modules/aws-cdk/node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", @@ -3700,6 +3871,15 @@ "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", "dev": true }, + "node_modules/aws-cdk/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + } + }, "node_modules/aws-cdk/node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", @@ -3815,10 +3995,28 @@ "path-is-absolute": "^1.0.0" } }, + "node_modules/aws-cdk/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + } + }, + "node_modules/aws-cdk/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + } + }, "node_modules/aws-cdk/node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "node_modules/aws-cdk/node_modules/has-flag": { @@ -3828,22 +4026,22 @@ "dev": true }, "node_modules/aws-cdk/node_modules/heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true }, "node_modules/aws-cdk/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", - "setprototypeof": "1.1.1", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "node_modules/aws-cdk/node_modules/http-proxy-agent": { @@ -3904,18 +4102,54 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "node_modules/aws-cdk/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + } + }, "node_modules/aws-cdk/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/aws-cdk/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "node_modules/aws-cdk/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "node_modules/aws-cdk/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + } + }, + "node_modules/aws-cdk/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "node_modules/aws-cdk/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", @@ -3923,20 +4157,20 @@ "dev": true }, "node_modules/aws-cdk/node_modules/jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true }, "node_modules/aws-cdk/node_modules/json-diff": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.7.1.tgz#0f1a87d281174c1a62c8714a208d0d24725a8169", + "integrity": "sha512-/LxjcgeDIZwFB1HHTShKAYs2NaxAgwUQjXKvrFLDvw3KqvbffFmy5ZeeamxoSLgQG89tRs9+CFKiR3lJAPPhDw==", "dev": true, "dependencies": { - "cli-color": "~0.1.6", + "cli-color": "^2.0.0", "difflib": "~0.2.1", - "dreamopt": "~0.6.0" + "dreamopt": "~0.8.0" } }, "node_modules/aws-cdk/node_modules/json-schema-traverse": { @@ -3961,9 +4195,9 @@ "dev": true }, "node_modules/aws-cdk/node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "dependencies": { "readable-stream": "^2.0.5" @@ -3994,12 +4228,6 @@ "type-check": "~0.3.2" } }, - "node_modules/aws-cdk/node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "node_modules/aws-cdk/node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", @@ -4045,6 +4273,15 @@ "yallist": "^4.0.0" } }, + "node_modules/aws-cdk/node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/aws-cdk/node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", @@ -4056,19 +4293,50 @@ "is-buffer": "~1.1.6" } }, + "node_modules/aws-cdk/node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/aws-cdk/node_modules/memoizee/node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, "node_modules/aws-cdk/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "node_modules/aws-cdk/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.0.tgz#281d8402aaaeed18a9e8406ad99c46a19206c6ef", + "integrity": "sha512-EU+GCVjXD00yOUf1TwAHVP7v3fBD3A8RkkPYsWWKGWesxM/572sL53wJQnHxquHlRhYUV36wHkqrN8cdikKc2g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" + } + }, + "node_modules/aws-cdk/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/aws-cdk/node_modules/ms": { @@ -4089,6 +4357,12 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true }, + "node_modules/aws-cdk/node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "node_modules/aws-cdk/node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", @@ -4152,6 +4426,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "node_modules/aws-cdk/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "node_modules/aws-cdk/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", @@ -4159,9 +4439,9 @@ "dev": true }, "node_modules/aws-cdk/node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", "dev": true }, "node_modules/aws-cdk/node_modules/process-nextick-args": { @@ -4229,13 +4509,13 @@ "dev": true }, "node_modules/aws-cdk/node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -4284,6 +4564,24 @@ "minimatch": "^3.0.4" } }, + "node_modules/aws-cdk/node_modules/readdir-glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + } + }, + "node_modules/aws-cdk/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + } + }, "node_modules/aws-cdk/node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", @@ -4324,9 +4622,9 @@ } }, "node_modules/aws-cdk/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/aws-cdk/node_modules/slice-ansi": { @@ -4347,13 +4645,13 @@ "dev": true }, "node_modules/aws-cdk/node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "dependencies": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" } }, "node_modules/aws-cdk/node_modules/socks-proxy-agent": { @@ -4374,9 +4672,9 @@ "dev": true }, "node_modules/aws-cdk/node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", @@ -4428,13 +4726,12 @@ } }, "node_modules/aws-cdk/node_modules/table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "dependencies": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", @@ -4454,10 +4751,35 @@ "readable-stream": "^3.1.1" } }, + "node_modules/aws-cdk/node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/aws-cdk/node_modules/timers-ext/node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + } + }, "node_modules/aws-cdk/node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "node_modules/aws-cdk/node_modules/tslib": { @@ -4466,6 +4788,12 @@ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, + "node_modules/aws-cdk/node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "node_modules/aws-cdk/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", @@ -4525,10 +4853,14 @@ "dev": true }, "node_modules/aws-cdk/node_modules/vm2": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.4.tgz#2e118290fefe7bd8ea09ebe2f5faf53730dbddaa", - "integrity": "sha512-sOdharrJ7KEePIpHekiWaY1DwgueuiBeX/ZBJUPgETsVlJsXuEx0K0/naATq2haFvJrvZnRiORQRubR0b7Ye6g==", - "dev": true + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.8.tgz#e99c000db042735cd2f94d8db6c42163a17be04e", + "integrity": "sha512-/1PYg/BwdKzMPo8maOZ0heT7DLI0DAFTm7YQaz/Lim9oIaFZsJs3EdtalvXuBfZwczNwsYhju75NW4d6E+4q+w==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + } }, "node_modules/aws-cdk/node_modules/word-wrap": { "version": "1.2.3", @@ -4637,19 +4969,29 @@ "readable-stream": "^3.6.0" } }, + "node_modules/aws-jwt-verify": { + "version": "2.1.3", + "resolved": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-89svd8F/yNG6XkK6xYYfASzfXBHe5Y5wVA/tONQEtDY8N0mZkZgc2pbxjJ+lTAnJuPx/kSWSGsQymTeyhW7fKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/babel-jest": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz", - "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, "dependencies": { - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { @@ -4660,15 +5002,15 @@ } }, "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" }, "engines": { @@ -4676,9 +5018,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -4714,12 +5056,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.2.0", + "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -4732,7 +5074,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bowser": { "version": "2.11.0", @@ -4743,6 +5086,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4811,9 +5155,9 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/callsites": { "version": "3.1.0", @@ -4934,15 +5278,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4958,7 +5293,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/constructs": { "version": "3.3.97", @@ -5116,9 +5452,9 @@ } }, "node_modules/diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5177,6 +5513,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5231,9 +5576,9 @@ } }, "node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -5281,34 +5626,20 @@ } }, "node_modules/expect": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz", - "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-regex-util": "^27.0.6" + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5391,6 +5722,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -5401,14 +5733,6 @@ "node": ">=10" } }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5504,9 +5828,10 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/has": { "version": "1.0.3", @@ -5596,9 +5921,9 @@ } }, "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -5609,6 +5934,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -5636,28 +5964,22 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.1.1" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -5724,23 +6046,24 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "engines": { @@ -5762,9 +6085,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -5772,13 +6095,13 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -5789,14 +6112,14 @@ } }, "node_modules/jest": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz", - "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, "dependencies": { - "@jest/core": "^27.2.4", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.2.4" + "jest-cli": "^27.5.1" }, "bin": { "jest": "bin/jest.js" @@ -5814,12 +6137,12 @@ } }, "node_modules/jest-changed-files": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz", - "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -5828,27 +6151,27 @@ } }, "node_modules/jest-circus": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz", - "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.2.4", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5858,21 +6181,21 @@ } }, "node_modules/jest-cli": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz", - "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "dev": true, "dependencies": { - "@jest/core": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "prompts": "^2.0.1", "yargs": "^16.2.0" }, @@ -5892,32 +6215,35 @@ } }, "node_modules/jest-config": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz", - "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.2.4", - "@jest/types": "^27.2.4", - "babel-jest": "^27.2.4", + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.2.4", - "jest-environment-jsdom": "^27.2.4", - "jest-environment-node": "^27.2.4", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-runner": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "micromatch": "^4.0.4", - "pretty-format": "^27.2.4" + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5932,24 +6258,24 @@ } }, "node_modules/jest-diff": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz", - "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -5959,33 +6285,33 @@ } }, "node_modules/jest-each": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz", - "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz", - "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" }, "engines": { @@ -5993,47 +6319,47 @@ } }, "node_modules/jest-environment-node": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz", - "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", - "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz", - "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -6045,28 +6371,27 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz", - "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.2.4", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.2.4", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "throat": "^6.0.1" }, "engines": { @@ -6074,46 +6399,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz", - "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dev": true, "dependencies": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz", - "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.2.4", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz", - "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.2.4", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -6122,12 +6447,12 @@ } }, "node_modules/jest-mock": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz", - "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*" }, "engines": { @@ -6152,29 +6477,29 @@ } }, "node_modules/jest-regex-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz", - "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { @@ -6182,45 +6507,44 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz", - "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.2.4" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz", - "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", "dev": true, "dependencies": { - "@jest/console": "^27.2.4", - "@jest/environment": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.2.4", - "jest-environment-node": "^27.2.4", - "jest-haste-map": "^27.2.4", - "jest-leak-detector": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -6229,85 +6553,78 @@ } }, "node_modules/jest-runtime": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz", - "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.2.4", - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/globals": "^27.2.4", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", - "@types/yargs": "^16.0.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", - "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-mock": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" + "strip-bom": "^4.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, "dependencies": { "@types/node": "*", - "graceful-fs": "^4.2.4" + "graceful-fs": "^4.2.9" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz", - "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.2.4", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.2.4", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-util": "^27.2.4", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.2.4", + "pretty-format": "^27.5.1", "semver": "^7.3.2" }, "engines": { @@ -6330,16 +6647,16 @@ } }, "node_modules/jest-util": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz", - "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, "engines": { @@ -6347,26 +6664,26 @@ } }, "node_modules/jest-validate": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz", - "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.2.4" + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" @@ -6376,17 +6693,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz", - "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dev": true, "dependencies": { - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.2.4", + "jest-util": "^27.5.1", "string-length": "^4.0.1" }, "engines": { @@ -6394,9 +6711,9 @@ } }, "node_modules/jest-worker": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz", - "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "dependencies": { "@types/node": "*", @@ -6499,6 +6816,12 @@ "node": ">=4" } }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -6524,6 +6847,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -6531,14 +6855,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -6570,6 +6886,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6588,6 +6910,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -6628,12 +6956,12 @@ "dev": true }, "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "node_modules/md5": { @@ -6667,21 +6995,21 @@ } }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -6700,6 +7028,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6737,15 +7066,6 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/node-releases": { "version": "1.1.77", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", @@ -6856,6 +7176,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -6908,13 +7246,10 @@ } }, "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, "engines": { "node": ">= 6" } @@ -6941,12 +7276,11 @@ } }, "node_modules/pretty-format": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz", - "integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "@jest/types": "^27.2.4", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -6968,9 +7302,9 @@ } }, "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { "kleur": "^3.0.3", @@ -6990,6 +7324,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { "node": ">=6" } @@ -7019,13 +7354,17 @@ } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7052,6 +7391,15 @@ "node": ">=8" } }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7095,6 +7443,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -7167,9 +7516,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -7250,6 +7599,18 @@ "node": ">=6" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7275,6 +7636,18 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -7374,6 +7747,15 @@ "node": ">=6" } }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", @@ -7387,16 +7769,16 @@ } }, "node_modules/ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "version": "27.1.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", + "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", - "lodash": "4.x", + "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" @@ -7411,6 +7793,7 @@ "@babel/core": ">=7.0.0-beta.0 <8", "@types/jest": "^27.0.0", "babel-jest": ">=27.0.0 <28", + "esbuild": "~0.14.0", "jest": "^27.0.0", "typescript": ">=3.8 <5.0" }, @@ -7423,6 +7806,9 @@ }, "babel-jest": { "optional": true + }, + "esbuild": { + "optional": true } } }, @@ -7442,12 +7828,12 @@ } }, "node_modules/ts-node": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", - "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", + "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "0.6.1", + "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -7458,6 +7844,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", "yn": "3.1.1" }, "bin": { @@ -7467,9 +7854,6 @@ "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=12.0.0" - }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", @@ -7551,9 +7935,9 @@ } }, "node_modules/typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7564,12 +7948,12 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/uri-js": { @@ -7589,10 +7973,16 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -7634,12 +8024,12 @@ } }, "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "node_modules/webidl-conversions": { @@ -7740,9 +8130,9 @@ } }, "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", "dev": true, "engines": { "node": ">=8.3.0" @@ -7826,156 +8216,168 @@ }, "dependencies": { "@aws-cdk/assert": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.129.0.tgz", - "integrity": "sha512-d3IPScg+MnXfiDHF44mkWj/hWt0m4WUbcQrUKi5SBFKcnKkrZk2QiLuowOtwre/zhcAX0bCQYfuZI+yS0yVNHQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.145.0.tgz", + "integrity": "sha512-jFxl938cUswXCvj1Mb5av7uHEGud3X1hPPRSGVlrq/XBtgjyvMkuU4ptBb6iM9YUJ+C+duJ6Xu7A6KOeRYLP/A==", "dev": true, "requires": { - "@aws-cdk/cloudformation-diff": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/cloudformation-diff": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.129.0.tgz", - "integrity": "sha512-4WwTTTLl/phl69HBcP1oOVOLEn9oR3Tc3E0V8aabsjERaVF47CidnZZWcRPnxC40XJVc8CucKLlALsTPnZecFA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.145.0.tgz", + "integrity": "sha512-bH9r316qFz4l07mpE9vLWoo/B8ancFyFQciW9VcAcs6cq4fgvSijhOsVW6Tscshx3s22KCrtkaPCIarkJ6x7cw==", + "requires": { + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-acmpca": { + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-acmpca/-/aws-acmpca-1.145.0.tgz", + "integrity": "sha512-aMFd5WbJzNJGW+wcjQylsCDW9uoxZHdRHmPCAYue+qVTkEqAY3Hs5HqBKYlceQqCdwNK3/WpMRbvoz+xcVQS1A==", "requires": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigatewayv2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.129.0.tgz", - "integrity": "sha512-mticPe0PMnmMg3VeortnlCx++qX0HQsiiewqlfctJZzr8QFePu7cWaeIVqceA7xnE/crBs21bi1wR4Oew5GZtg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.145.0.tgz", + "integrity": "sha512-QFA+ZEbbnVFu0zppdebmKIWP0YxRGUM9qcW57K2WzqoLEmetdKJk0/dwSCIlCUz8rhw2myi/SjLUL9Vj4PCXNg==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigatewayv2-authorizers": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-authorizers/-/aws-apigatewayv2-authorizers-1.129.0.tgz", - "integrity": "sha512-cL4HDu2jiilAxK9+JnnxPfgiT8CDBvxDXcdJ58oqXqtMPlTUx2MopM46D7O4O+SEjL3PVRstC0P/pZu9nQfq/Q==", - "requires": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-cognito": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-authorizers/-/aws-apigatewayv2-authorizers-1.145.0.tgz", + "integrity": "sha512-+cQ+l3glBF9aQNKMymM2+aEh4StwNUlKWoo0Jqg8yRbB3+/IuhohtJ/hA2B1y+/ikOuQ9LT83Q0XUJA/LNbJwA==", + "requires": { + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-cognito": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigatewayv2-integrations": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.129.0.tgz", - "integrity": "sha512-2TlAFyFqd3moLgWDhpl11QbaKfI7tmvu78KFj8N1BVPI63qFj1urCWJe2YFFfKju2M2vWEjlweR+ZZdM77yPxw==", - "requires": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-servicediscovery": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.145.0.tgz", + "integrity": "sha512-T0N66rN326zaxsDFXfeuhGkyetmYmiXYR2+3HkTrRDjn8jUqLZcXT//inv+kj2qMRkYO2gNiEZr2BEfogQWANw==", + "requires": { + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-servicediscovery": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-applicationautoscaling": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.129.0.tgz", - "integrity": "sha512-YhKgkDRRtT4aMONUVaL97te/K2MkCvCrGNPQzBYJn9WlX/eshlBrlZ1i4eY5DtrXW3mxwT42ynC6Mqq4EfiC7g==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.145.0.tgz", + "integrity": "sha512-j7ua2C2WI9VGAvJxo+oZHCFGT+0zEl3WRpRXhRr2aNErjtWpGei0GohTVzq3rsVyihX51aiKGHCW6u14SbFJOg==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-autoscaling-common": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.129.0.tgz", - "integrity": "sha512-KaCkT7j7vzW8UByZouJ3iU2VZul4BBx8PmptM+OeghNB9fZuwPohT5p2ZP9N9PJEA9k1T2JJshUFgjQcclofdQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.145.0.tgz", + "integrity": "sha512-JIQPi79sosiviF/XfjowGjEwRnappgdRjCZzcEO5qzMvn/1dZvomBcg+2S5Ro3aT7TQkFzRc13+J72bxrzRK/Q==", "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-certificatemanager": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.129.0.tgz", - "integrity": "sha512-zEVcXGPlsMHDqblnfxDt1rZT6+Gx0fsUzWFenR8NwsGhEX0r8/dydS9HDjl9jJtqCs73C7RaKcGRH/K6UvV47g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.145.0.tgz", + "integrity": "sha512-GpNotWz50Ab4DAGqC1l1IL5479Ck1mE7+YUtzZ6F951kSlqwVQ159FY9k7xTwnopwRGmZ0UiC1MtWlxZG0RAjg==", + "requires": { + "@aws-cdk/aws-acmpca": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-cloudformation": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.129.0.tgz", - "integrity": "sha512-e894qmNaXpflhlmygvb9p5d77FcDuhG7vZosgW8kVF6IvRYAwK1mQ83RhVpbWaaUi5S3HzLR+pJjnCa4zeCJrQ==", - "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.145.0.tgz", + "integrity": "sha512-+AZQZk2nE9I1zt57DnPrj40FyIUHLf7nWC8+Lrar7U8/GLXuFNTLNYm+Dcb61ou06UUaeOToOVpDMlKFDdsHDQ==", + "requires": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-cloudwatch": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.129.0.tgz", - "integrity": "sha512-b5ZLfkbhMe6U36ESucV/4Eja5YIKShrVrSviDozsVFCK1TXAyEvcLCOqx+Uq3JCryytmAYhg/iAf70M+q5mKDQ==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.145.0.tgz", + "integrity": "sha512-RRAz/q7mcUQJdkao3GSpmV08Qn0Ip9IKJ/iBP7FmmIlIA0k/9hI9XlYXi1NxDrsAExaC7Vvq/pfct7rZ3SrRfQ==", "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-codeguruprofiler": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.129.0.tgz", - "integrity": "sha512-G8ngfNI3UgmM7YRrbqrsd+mQ3F5w9meclDTOW23oNZlGHNsoPhp/vLcL1iyYrWZh9NLE3eMdJmGlZLgQfA/U9A==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.145.0.tgz", + "integrity": "sha512-xVFk1u0B+CRTkuNPJScEHY9cVxLugrZayvlvnwwocS08QJhxsNGuLvrzCjAl5xIdeRv5vW9lw7FsjYuksTrKyA==", "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-codestarnotifications": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.129.0.tgz", - "integrity": "sha512-D1ZgvPSanMQbQxsu8DMOFJTzDVFTfGcbFhZTm5au6cRGiCGo+WR1zbADn1LaGYNvpGyAUintZvtQTin3asaHVg==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.145.0.tgz", + "integrity": "sha512-h//6GBwPeEZ/G1EjHQ2q5HEEfOpaOXO5ym9s92YWL44k5wgN3vOuysS67wUYmhGOI4d3V5QKtzSc4QuqjFaXGw==", "requires": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-cognito": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.129.0.tgz", - "integrity": "sha512-oNQaneEIfEM6ZSgV8mEQzEqdVmZCsVeT4ye4q11/lD69oSPy4pwXrQj8D0Yffg4iYJKDgfuJWIYNvO59Lw68mQ==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.145.0.tgz", + "integrity": "sha512-N4zu8BeahpuGjAauC03jbDBJ6Hk3c5hGr3eirZEZLkOze+6BVBD/sCmHZYvyfwOCw22FieEZWpjRo2vullYO1g==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69", "punycode": "^2.1.1" }, @@ -7987,283 +8389,260 @@ } }, "@aws-cdk/aws-ec2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.129.0.tgz", - "integrity": "sha512-7yLLW4ubbxWOYc+Dwd/Rc6OYNU07DMqgXnWChNjqoQ6dzKo4M8N52OGqVl06Eq7gqtCM+DOVQv3uID/y1Ym/1A==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-ssm": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.145.0.tgz", + "integrity": "sha512-+dlxu0UvEso5O+xXnt+1cYCdcBmKX0O9Psqp5lVto+vM8sX8zvKR+KJZV6URXjMmwM0Ms0NpEtEtz28q3jD5UQ==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-ssm": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-ecr": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.129.0.tgz", - "integrity": "sha512-hUiYepHCmvC3u9XphsvZpo2ygiH7AczUOmDbE16kc9U+oPBV/pjfTkBWpkzOcapsU2pfBUm/kc2WMu1DEFU7OQ==", - "requires": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.145.0.tgz", + "integrity": "sha512-upsrNKsbJefYugFZeUGNVvDHN14icSY4s+27GQEuwUGX9YEspx3Ke3axIwHRHtrLT5r0URLNh37bBjIjLXCvPQ==", + "requires": { + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-ecr-assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.129.0.tgz", - "integrity": "sha512-ejw7e3Pj8IICZxnD8PbHzDUOSKoA9mMtyU+E5VhhgqP0trQQBfYrRm4IL90dPK6ZMepw63vqxaHjklhIAHx53g==", - "requires": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "constructs": "^3.3.69", - "minimatch": "^3.0.4" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.145.0.tgz", + "integrity": "sha512-TZ3UczCs9qe3BZYwd/1cHJsDHPimNYlMuwLUUkUmFaQCxb8AnMRkj64/XIn6U5OuKvokEUy9Lepec3jtY+6cYg==", + "requires": { + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-efs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.129.0.tgz", - "integrity": "sha512-L0FxdInKOZQunUskJWT+fGbyUiBvu8IhSRwiWLEg+KjZhkI+vOUIvY57u1nb+U1Ig7rd6vUjKRIPPpqzErjBww==", - "requires": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.145.0.tgz", + "integrity": "sha512-aMhDwUVvx7u/9SQOlHJ03oXv+MnJnWRfIKUXJleDbeodUr3RR9uvHo7nuloLIEpek+B/RoUmIGe8olGgOnxqgg==", + "requires": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.129.0.tgz", - "integrity": "sha512-by+Wjp4FbZnLSkydHetPj1gg5AyNYBL/wEiY1aE+ioybKtnTVb5FxVjeZ3ctwh9xOTRnepcIwfQuZqDA12A8zg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.145.0.tgz", + "integrity": "sha512-0ugrw7jMsKeQdxY9Nq5QKS0t/KbFiQoEa5oBO5K5I7/XG/AmEyUJ2f95NuC+OTQvIadPRfhFF+txD59GymIXXQ==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-events": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.129.0.tgz", - "integrity": "sha512-q4+g4ugQV1maomOZ+HpQynBxw5NcMJGjIRHkfgxa4xl0/LQ4W5ReEHXz73gD5h7tSwCJUsVys9DpQG793R/CSA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.145.0.tgz", + "integrity": "sha512-wxAqedwn5rtCziDE6HeW0sB4Tsfti2c43i04YiwdrrFLm9h5a6Tda9xLaid/fXWUClsiNCubGG8nMHKtbtdP4Q==", "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/core": "1.129.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-iam": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.129.0.tgz", - "integrity": "sha512-SjLrFldOpPYogldJOtJROudcy3ttHaKu49u4cr6MYq3U9dbYmYfQTz2pkKGoAErN9jj2yIpuN5locNBmVzpIcA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.145.0.tgz", + "integrity": "sha512-hRGOO4Ci9xrBakg7REQ/ZkkLJ8KgbH06N+Wq98qpmIeySPnMvMGenVMl1qmhw0hjazzuAuCouM7/TyWMxoEDbw==", "requires": { - "@aws-cdk/core": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-kms": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.129.0.tgz", - "integrity": "sha512-rscNj7cikIAEtmW3W/5REmTotXvPsm6MtgRMHvd68m87wTbEezdwnx5lgbtqCDZ0pg+v699OsvMWT+kGtNoDXw==", - "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.145.0.tgz", + "integrity": "sha512-CTwvjeIkscbfBlRM2BKSsw6/ZWPL1qNARhZ8riCD2wJvbSiy4vqnTtAaqqNe2xJDSbzHRkmmAeBZb6YKtCVYEw==", + "requires": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-lambda": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.129.0.tgz", - "integrity": "sha512-h15c2QUF86fTAPDxobgqojcyyrOxWZjMTLVtwkxrhGlUC7l/989/W5QflILJgxCPq1x6716+6epY3eerUnbGZQ==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.129.0", - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codeguruprofiler": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-ecr": "1.129.0", - "@aws-cdk/aws-ecr-assets": "1.129.0", - "@aws-cdk/aws-efs": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/aws-signer": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.145.0.tgz", + "integrity": "sha512-yRuIFiVsCb+0hoaqFFyvtb77/JRtcNN1Pgip7FFaZsE5HCflMWLqGdOu1a2nPMSQB4+EvqTGyYmE4C6MXelHvw==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.145.0", + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codeguruprofiler": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-ecr": "1.145.0", + "@aws-cdk/aws-ecr-assets": "1.145.0", + "@aws-cdk/aws-efs": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/aws-signer": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-logs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.129.0.tgz", - "integrity": "sha512-E/N9Aj1Xxz6y0r48g1v4BrRK/uhtRjN1poc6xCN+GzIPXrSuiEDV71N9ShqpH38LtapJQSGCq3ou2lvjX7hH0g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3-assets": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.145.0.tgz", + "integrity": "sha512-9SirJ0puNjjvjp+dyzfKHUmVWrqolo6Hv8H1pMi/wkxquQzL/hGWdH/sMp9+VIfNzF7crcvl9+lZB4at9gUFdA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3-assets": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-route53": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.129.0.tgz", - "integrity": "sha512-ogAqoOTFV5ppk/S6lYmgTLw6ds1kLZZxKy9a9t32RqHCdSJpzuRKkW4jLutNVK605DBqiK3mXBuKRGCz19Z67Q==", - "requires": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.145.0.tgz", + "integrity": "sha512-D0x5x1NveA9OhqrvmJeb4RzL++174R83NV8Mz36KUzTqGnPrrq51HmGxIvNqfP7CfT1jh5d0F8icyglIJnMUGQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-s3": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.129.0.tgz", - "integrity": "sha512-8Ql9P16HfR1qeWcSp+I5eScD6q/gOtcioQqPlRowFOany5E563w01x9ghKurGQLVgYOZWQKvYWHxFs0vDeXPUw==", - "requires": { - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.145.0.tgz", + "integrity": "sha512-rlYGo49PhNbWqRr1nlVf3WGIHpBivZ8vE9y6eANZrAlGRUSDtvhedX+BiPBPbp7Zkuyj8F6jKhtQ37QMvXOMSQ==", + "requires": { + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-s3-assets": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.129.0.tgz", - "integrity": "sha512-klFuPAaSQs6qC7EB3QN7lqHu8MN4H6JxNcCl21ce3/jwQvqMDsNObrv5nPt2aQkiLlbCcr4ukZC5EsMA4+mguA==", - "requires": { - "@aws-cdk/assets": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-s3": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.145.0.tgz", + "integrity": "sha512-jKEvfF/Qx1ghPH6wfcWWAFVEQYwoxof19zZIUkkljmGeyyj3OHsKyBKLUQFzldjcX1rm9RdNZE7A0cJYJs026A==", + "requires": { + "@aws-cdk/assets": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-s3": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-servicediscovery": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.129.0.tgz", - "integrity": "sha512-sZ3PuQx14ZJXpYiC+3QLxXnb4x7eptShavERptMxZXAhHsS9K6NDJ6idSPfaNwp0jMglAanLMVeKxbjl6fIfLg==", - "requires": { - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", - "@aws-cdk/aws-route53": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.145.0.tgz", + "integrity": "sha512-xk/BB5lZGcDyRxHkA22Jai/ke5rEepreSKskJio8DtfEQkWzYJ6g4qxoY0STcMve1on4j2HyHjn1vt+OPdfalg==", + "requires": { + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.145.0", + "@aws-cdk/aws-route53": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-signer": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.129.0.tgz", - "integrity": "sha512-5ocJJQO06u9k9Q6NHDOko8rVGLwNi90Sv7RYNd3wA8NFNpS+kI5W65XqVPcAS7NtjKlAr4VYMSpbCpGRfisEOg==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.145.0.tgz", + "integrity": "sha512-xM38SMX2h1nSTcD63FgiipBOvnmEHGyE87H06D+lD9R8o0APwqXTO2q0mpzJG0CNcBSD5oK1bo1JHUINzTdh5w==", "requires": { - "@aws-cdk/core": "1.129.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-sns": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.129.0.tgz", - "integrity": "sha512-17TiuAYY8ELrlPfrkEhJH7BPvviIADLWd3SuU6ViXTNXA89DkRVw7j5SWb5xeTgcN1PwP6tBgOekGKsr6W+6lw==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-codestarnotifications": "1.129.0", - "@aws-cdk/aws-events": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/aws-sqs": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.145.0.tgz", + "integrity": "sha512-i2AQEZLIJH/5cNw3i4uqPDWhqqcZ4uzGLbZigTs3NTa63WYAkfDdwvtfZWNBNHzm5g0JIV4y1eT/INLXrmtjpQ==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-codestarnotifications": "1.145.0", + "@aws-cdk/aws-events": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/aws-sqs": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-sqs": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.129.0.tgz", - "integrity": "sha512-DyqQr1RbviDvXqOjtKr1bM0cBrmv05PvQf7U5GNw+BRsFIy7S97F58FFaKrVF1RhVPD9P/DwY3s2LJ/K0/13fA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.145.0.tgz", + "integrity": "sha512-jMhd+8CQ74akrJd07fZ4JKIZ/ZelmZb8VOusvuLtdkAU1uXEKw10BUtWYKzKD5Z25+qKJ95l2YO4qGqfZbGLYQ==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/aws-ssm": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.129.0.tgz", - "integrity": "sha512-cderNJdbnomX3QqNuEANtBVJVqlPL2tLvwjfimrkWXl6iWllt69sm8QHscclUKuWv+DsescdGShVFY9DzViBYg==", - "requires": { - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-kms": "1.129.0", - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.145.0.tgz", + "integrity": "sha512-4Sl2d0aDMrNXI7qn+SgZOEJkF4Z4JbNNhSTJetlRpvPXuCPnOmSGiqk88tBbhHrJere5pB7PP4uUmWchFSwBlw==", + "requires": { + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-kms": "1.145.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/cfnspec": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.129.0.tgz", - "integrity": "sha512-0WsNvuF0Lem/TpcjxvVN4VrZpvdXPJQVI38qVvm6+tiKj2h6qaOaY0luxZntccTbX43S7wo54tHy5qOl8lDBMw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.145.0.tgz", + "integrity": "sha512-ikpOzPUovrbkDUpFfPBCnSdB+GS/xFDBPprnxAhEBjct/SlIp+1xATsB07awfqRaaUn+pQyLq2fPaaAck8r1KQ==", "dev": true, "requires": { "fs-extra": "^9.1.0", @@ -8271,9 +8650,9 @@ } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.129.0.tgz", - "integrity": "sha512-1GRxfRrC6p+Jafl12ALkzJ+sV47pM3V8MMQNDQS5XFl7M3+x7kScwYBSNptjC0H6VxywVksN5AMzlY4FXEyV1Q==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.145.0.tgz", + "integrity": "sha512-gj1nNRkORld0ed081Z9cFvTaZF/uEnQAtpH+36ud0yLaGXF9epwaZ4bhCcBoESw+5Ob8kPiSx63d1+j+c5DTkQ==", "requires": { "jsonschema": "^1.4.0", "semver": "^7.3.5" @@ -8304,18 +8683,18 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.129.0.tgz", - "integrity": "sha512-1Wbp03YLXnkFyVafjhwYWUJa+qlkdBuzzKJKbTz6gjApl4+0uUPI2m0IeqgOVEmqyAuSErvcTPWSI8ZmjzjQ5g==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.145.0.tgz", + "integrity": "sha512-CkkPSXaVa2YDy2IQHitPxfPp2095jaMWs8S8nW5fJgBt87R6DVwlrBZl7PIuw6ad44onJVV2SHdj8SW+1e+jHw==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.129.0", + "@aws-cdk/cfnspec": "1.145.0", "@types/node": "^10.17.60", - "colors": "^1.4.0", + "chalk": "^4", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.3", - "table": "^6.7.2" + "table": "^6.8.0" }, "dependencies": { "@types/node": { @@ -8327,18 +8706,18 @@ } }, "@aws-cdk/core": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.129.0.tgz", - "integrity": "sha512-dv+IhyqPbyvgBWGtc1PboCO318PW54llRVyenItt1KxnE5PiGgj/9UFdFi4on+yogRr9GWlNes6OzaLq8+T0xw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.145.0.tgz", + "integrity": "sha512-9eHDg4M/5XuFvZKRIAzXCPcyWay93gAZOZ5Fexvk5W+XcKrnP9d969RVHcFEjjQ1Kgt5130MQ7uMaHTz6Izp6w==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", "@balena/dockerignore": "^1.0.2", "constructs": "^3.3.69", "fs-extra": "^9.1.0", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" + "ignore": "^5.2.0", + "minimatch": "^3.1.2" }, "dependencies": { "@balena/dockerignore": { @@ -8376,11 +8755,11 @@ } }, "graceful-fs": { - "version": "4.2.8", + "version": "4.2.9", "bundled": true }, "ignore": { - "version": "5.1.8", + "version": "5.2.0", "bundled": true }, "jsonfile": { @@ -8392,7 +8771,7 @@ } }, "minimatch": { - "version": "3.0.4", + "version": "3.1.2", "bundled": true, "requires": { "brace-expansion": "^1.1.7" @@ -8405,26 +8784,26 @@ } }, "@aws-cdk/custom-resources": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.129.0.tgz", - "integrity": "sha512-s0lGYzc5/bVOgiLV1rot9p40ZCFuLxwLl7MJjpD36J0OBPsKwO5Wkp86zAyo5bwYzR7SIbqslbma7ZyGmA5Jaw==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.129.0", - "@aws-cdk/aws-ec2": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/aws-logs": "1.129.0", - "@aws-cdk/aws-sns": "1.129.0", - "@aws-cdk/core": "1.129.0", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.145.0.tgz", + "integrity": "sha512-S2NWVkgBcyFXMd0fJMqOI+L0KLwnBiACOGmoHKDHkXf+WqyIn5c13wwiemh65LgU8war6oM42KEFEAtx1AFTbw==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.145.0", + "@aws-cdk/aws-ec2": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/aws-logs": "1.145.0", + "@aws-cdk/aws-sns": "1.145.0", + "@aws-cdk/core": "1.145.0", "constructs": "^3.3.69" } }, "@aws-cdk/cx-api": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.129.0.tgz", - "integrity": "sha512-3orTh2xAYh2OFtPyabXNKWpyke49Qk7jLjVaT8ZasUL1yJYi9fvqVOcA1sZLtag66l1x+JAheYheTeD7WudjGw==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.145.0.tgz", + "integrity": "sha512-EeI3eDtj3Nm1PJVlP4weI4MlhW6Tc2wV5x5OzsZxUZz81VLhjuPd6BPpQC+Kf0dIZS2sIVPMavq1h6oBFVx08Q==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", "semver": "^7.3.5" }, "dependencies": { @@ -8449,14 +8828,14 @@ } }, "@aws-cdk/region-info": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.129.0.tgz", - "integrity": "sha512-4GMx9ipgdDsf8PXR3Jw3vqiFdhdKVEz9oYOjQVfja7zcpOv7ol1WISVG1CBa0vU7QiZk/NpGxArTAs1G1ViKRg==" + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.145.0.tgz", + "integrity": "sha512-zaFXT3hccng7tbUVldKj31PKNUDxFlAWW61sIhmDzKdooyaJta3xBLTDGa9kn9dI4/pHb+zAaTWzb3Yh+BGGLg==" }, "@aws-crypto/ie11-detection": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz", - "integrity": "sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz", + "integrity": "sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA==", "requires": { "tslib": "^1.11.1" }, @@ -8469,16 +8848,17 @@ } }, "@aws-crypto/sha256-browser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.2.1.tgz", - "integrity": "sha512-WX/Wp6sXPhcBWx/w1aSJv3bDJL0ut5Ik6hl7yfqA1pn3cfsahl4rgHzRRXqYfJ+hnhnCqdgadS17wyBbVPsK+w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", + "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", "requires": { - "@aws-crypto/ie11-detection": "^1.0.0", - "@aws-crypto/sha256-js": "^1.2.1", - "@aws-crypto/supports-web-crypto": "^1.0.0", - "@aws-crypto/util": "^1.2.1", + "@aws-crypto/ie11-detection": "^2.0.0", + "@aws-crypto/sha256-js": "^2.0.0", + "@aws-crypto/supports-web-crypto": "^2.0.0", + "@aws-crypto/util": "^2.0.0", "@aws-sdk/types": "^3.1.0", "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" }, "dependencies": { @@ -8490,11 +8870,11 @@ } }, "@aws-crypto/sha256-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.1.tgz", - "integrity": "sha512-KtZ4qFDWZy6pKcky6RvwSytR/I8vPX9Z47pXh9sOuTcxjjtcegzS2uupg9vo0vbFcAWkSHVOEmNPh6ygiC3VFQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", + "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", "requires": { - "@aws-crypto/util": "^1.2.1", + "@aws-crypto/util": "^2.0.0", "@aws-sdk/types": "^3.1.0", "tslib": "^1.11.1" }, @@ -8507,9 +8887,9 @@ } }, "@aws-crypto/supports-web-crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz", - "integrity": "sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz", + "integrity": "sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA==", "requires": { "tslib": "^1.11.1" }, @@ -8522,9 +8902,9 @@ } }, "@aws-crypto/util": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.1.tgz", - "integrity": "sha512-H6Qrl28lzGGXZgLkdP7DQpJ3D3jJagQJugziThcqZCJVUT0HABHJt9EQMiiuf93KcUV/MMoisl56UfCxCFfmWQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.1.tgz", + "integrity": "sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ==", "requires": { "@aws-sdk/types": "^3.1.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -8539,579 +8919,618 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.34.0.tgz", - "integrity": "sha512-+Qz8/e5sieViXW2qKbfGsXt73Mo87duI2n8HwfDmshjPRXBjpaN478bFHmAjvq9L4MbvW3hSL0mEGrpPErP9Tw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.52.0.tgz", + "integrity": "sha512-Z+4uVtgwbKSChruh6R/WIrGb5uvvXi/d6EQ7zC6hyghtn9EGQc+WJ3BVB4bIUshwMunlgjA3nDiPb5V3t5zv8Q==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/client-cognito-identity-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.34.0.tgz", - "integrity": "sha512-WfJ/xRBqngltOy/L9dbotbNq4dVGW6FEpxzqvWNH9Q1h6uEyX1by9HG3aBTYRxStVBCc7MiDskqm/zViPJHeqg==", - "requires": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/client-sts": "3.34.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/credential-provider-node": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.52.0.tgz", + "integrity": "sha512-AnJ0iCxt+wEKVLRlIpSeHLHB8pC0xMqwoe+e+ZJb4WPA8de+J0c0UK2+8D16BrieLrO1DJaIETG7ao3TlXkchg==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/client-sts": "3.52.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-node": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/client-sso": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.34.0.tgz", - "integrity": "sha512-2eBbOF1AssSSYCCelTYdJabyY46dvc5AjHWzAhCPI4mpvKp5UtIxjmV8MmlKhS3WmPHZEpUNYnjou9uc86MCqA==", - "requires": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.52.0.tgz", + "integrity": "sha512-IvtZlZopWlWg6xnKSXAodWQaPcRySNBJLj68K6HJ8OVvBCgcXr53nNREArgPi0+KDzLsXqAZTRxvU5do/99PrA==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/client-sts": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.34.0.tgz", - "integrity": "sha512-jC+Z779fOyU8kk+Xlbu0Mox2mku91X40jZ0TAxNNEhe0i5mOxv8/L2SkE2daKTQxXBem/gTctQmrZ9g4fRm7dw==", - "requires": { - "@aws-crypto/sha256-browser": "^1.0.0", - "@aws-crypto/sha256-js": "^1.0.0", - "@aws-sdk/config-resolver": "3.34.0", - "@aws-sdk/credential-provider-node": "3.34.0", - "@aws-sdk/fetch-http-handler": "3.34.0", - "@aws-sdk/hash-node": "3.34.0", - "@aws-sdk/invalid-dependency": "3.34.0", - "@aws-sdk/middleware-content-length": "3.34.0", - "@aws-sdk/middleware-host-header": "3.34.0", - "@aws-sdk/middleware-logger": "3.34.0", - "@aws-sdk/middleware-retry": "3.34.0", - "@aws-sdk/middleware-sdk-sts": "3.34.0", - "@aws-sdk/middleware-serde": "3.34.0", - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/middleware-user-agent": "3.34.0", - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/node-http-handler": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/smithy-client": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", - "@aws-sdk/util-base64-node": "3.34.0", - "@aws-sdk/util-body-length-browser": "3.34.0", - "@aws-sdk/util-body-length-node": "3.34.0", - "@aws-sdk/util-user-agent-browser": "3.34.0", - "@aws-sdk/util-user-agent-node": "3.34.0", - "@aws-sdk/util-utf8-browser": "3.34.0", - "@aws-sdk/util-utf8-node": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.52.0.tgz", + "integrity": "sha512-tPLHYY9RdWehBQlyrwOaw4B31PqW1HmNNKJ3+Hc6KnEaiOwMAwQd8L7BFbSVG8ajQBDAEBUTDAkSaZ8jTYdfQQ==", + "requires": { + "@aws-crypto/sha256-browser": "2.0.0", + "@aws-crypto/sha256-js": "2.0.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-node": "3.52.0", + "@aws-sdk/fetch-http-handler": "3.52.0", + "@aws-sdk/hash-node": "3.52.0", + "@aws-sdk/invalid-dependency": "3.52.0", + "@aws-sdk/middleware-content-length": "3.52.0", + "@aws-sdk/middleware-host-header": "3.52.0", + "@aws-sdk/middleware-logger": "3.52.0", + "@aws-sdk/middleware-retry": "3.52.0", + "@aws-sdk/middleware-sdk-sts": "3.52.0", + "@aws-sdk/middleware-serde": "3.52.0", + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/middleware-user-agent": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/node-http-handler": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/smithy-client": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", + "@aws-sdk/util-base64-node": "3.52.0", + "@aws-sdk/util-body-length-browser": "3.52.0", + "@aws-sdk/util-body-length-node": "3.52.0", + "@aws-sdk/util-defaults-mode-browser": "3.52.0", + "@aws-sdk/util-defaults-mode-node": "3.52.0", + "@aws-sdk/util-user-agent-browser": "3.52.0", + "@aws-sdk/util-user-agent-node": "3.52.0", + "@aws-sdk/util-utf8-browser": "3.52.0", + "@aws-sdk/util-utf8-node": "3.52.0", "entities": "2.2.0", "fast-xml-parser": "3.19.0", "tslib": "^2.3.0" } }, "@aws-sdk/config-resolver": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.34.0.tgz", - "integrity": "sha512-goAv4oFpDhsnCJehf0Cr0s4bCxOmfj5fz/SZXsLJbW3rGh8CE+s9hxkFqa1JBR/AN+OBDZ8NRRFIYwnftq9+xw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.52.0.tgz", + "integrity": "sha512-XKUCpPLMwdlqPtwutdMfAHWqGEPTDd14Dp01WyNhVtmTmsHkpFfLPpELLO1BczDS+jyoMUj+UDj9jHm4YLvXXg==", "requires": { - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-config-provider": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-env": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.34.0.tgz", - "integrity": "sha512-vbsLvcZ1gPnjcToSNYMmc0YR1xz4WzkubpFGVXfwcG3iJcQnu+gKXWeCVEfVrjprlNHuqWXnCCi0rNIncKVavQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.52.0.tgz", + "integrity": "sha512-9R8kTMQ3udNz7fyY/0rkU6Yhu0ALYQJZQ0lFCrxtNo2Nlo9taQtZgxhtRcv+EeqbTcJs91voNNz70HLbedtBUw==", "requires": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-imds": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.34.0.tgz", - "integrity": "sha512-f56md7Xpd7nzkvRFoAaGf3VCXLuNN0jHh9HQFx4VnrQtp9dcVJK1G/2hYl1dlHFIvHBupWKOnzuUplyxyV55pQ==", - "requires": { - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/url-parser": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.52.0.tgz", + "integrity": "sha512-939kfHSkMLsOfQtO2nBqC/zAE1ecTOCAs72pKvVxrluGzDry4UtwlyQ4YGC04pYBRQeRIqvIOoVbADYJy4XjmQ==", + "requires": { + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/url-parser": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-ini": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.34.0.tgz", - "integrity": "sha512-8SPeje+0tnGPbQ21+TESNE7B8PaIuEGxbkvbMSCm+cKij8Oo6N+StSGZh+0FJhlh+QptWjR/yaH0MKYpIUFUGw==", - "requires": { - "@aws-sdk/credential-provider-env": "3.34.0", - "@aws-sdk/credential-provider-imds": "3.34.0", - "@aws-sdk/credential-provider-sso": "3.34.0", - "@aws-sdk/credential-provider-web-identity": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.52.0.tgz", + "integrity": "sha512-MCzWWPYoZjZ3C/X8UXXf9eRqgGJc3Y1QyFXIuQzNrVhffrFkYOkOUQsG4s5TuDr1MmGfxe83XtHQgATJ0fe3zw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/credential-provider-sso": "3.52.0", + "@aws-sdk/credential-provider-web-identity": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.34.0.tgz", - "integrity": "sha512-aZkBWHe9bVNraQlhHageKPaxrZGGIFBTKJ1WT19cHZVnCj8ufCoogvct28eW1SEucn1jPBWPFhaX3/0y16Bc6Q==", - "requires": { - "@aws-sdk/credential-provider-env": "3.34.0", - "@aws-sdk/credential-provider-imds": "3.34.0", - "@aws-sdk/credential-provider-ini": "3.34.0", - "@aws-sdk/credential-provider-process": "3.34.0", - "@aws-sdk/credential-provider-sso": "3.34.0", - "@aws-sdk/credential-provider-web-identity": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.52.0.tgz", + "integrity": "sha512-SUl+t2S7xKHxAkIfuyvucKQ/JemJ/bCsuCk2qtjTSiVjrLx65Rnfw14j+44JU8U5mP+xodpKNCpgIF5PHu1kKQ==", + "requires": { + "@aws-sdk/credential-provider-env": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/credential-provider-ini": "3.52.0", + "@aws-sdk/credential-provider-process": "3.52.0", + "@aws-sdk/credential-provider-sso": "3.52.0", + "@aws-sdk/credential-provider-web-identity": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-process": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.34.0.tgz", - "integrity": "sha512-4n07qYfLLzjTLyrQTT7iuZTlKZLYyKT4yFjnKyJT3dOoFyW4jWFWjZyicY9TNg4D4f2ya6P3w+H+03DGof0Opw==", - "requires": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.52.0.tgz", + "integrity": "sha512-DGaSprlcEGgFuCiXNH9moksa6/1vBmX/G/tt/ulpgFEJmKljoazIEgUse/6oPJT7t5jazydAqMRVp1HK3Jp/0A==", + "requires": { + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-sso": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.34.0.tgz", - "integrity": "sha512-/xyUHA8o5dIaMoKVigjeIgGI1ofGBsVmb1cK16m3w0CDDUgyoEeQD+pust68rYiyuuhgaRqnRtVvjysPPJPMaA==", - "requires": { - "@aws-sdk/client-sso": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-credentials": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.52.0.tgz", + "integrity": "sha512-8Q0X4wro+sPMYkbZE/ZW+CBpjxGq/x/vv4yQh7zdHpNfANhqjTSR8tUCApemVcfPtwNhQNPpW8KrlWUIMguHdg==", + "requires": { + "@aws-sdk/client-sso": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-credentials": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.34.0.tgz", - "integrity": "sha512-4YvuKL2TOyEuktU7v1objIc9PoDMSm2Fxp90KJckitcGnLMsdcaoIV9GgF5nIZrZ7tOUg2ultamCJUkUFZYLMA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.52.0.tgz", + "integrity": "sha512-+4qz0PZn9u6HRRNBO9YfIixdItukixPOtLP8tNlgriCh66BC6M1mAXXP/uq2x7kIaMRZtTo3Eey4T/tA0QMkOg==", "requires": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/fetch-http-handler": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.34.0.tgz", - "integrity": "sha512-evcyWkI0xsQYjSZOzYy+1ke8CwzOaUpg0+tCLPQwG4GKC+GmRWd0ABrxs8OmPBo4SHPQvDpUakX0CRiZu/gm/g==", - "requires": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/querystring-builder": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-base64-browser": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.52.0.tgz", + "integrity": "sha512-pFXkCeEIcrgH8esRyUab1nnIo1cjUjrheqwb/MK3gJ363/kenT6IqYXOq0UO4mF7bn6IOz/yxODlhQIU6i1Vww==", + "requires": { + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/querystring-builder": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-base64-browser": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/hash-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.34.0.tgz", - "integrity": "sha512-gAPr7p+MgLJ75YRQSELidq0bU/RduPI+kjyY516Od79CNwwe9DEN2JeQakXN3lUfExgp38P9onsRr1d6wKP4EQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.52.0.tgz", + "integrity": "sha512-pN2dSSyyy0emFFtK6jgmzYXcJHITbfdPqR7UTQ1fj1wFvbURPN19C1f4uYbVDjuiUQX01hLclJDLnPy1BIzTGQ==", "requires": { - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/invalid-dependency": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.34.0.tgz", - "integrity": "sha512-Seaiu1fT9k7F03KVi/rVf+buRAyAEAzg66ryg14GQW/cei/b/uD4+Gohyk+mRnMqDh4nNluCaktzhr7wSZGeVA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.52.0.tgz", + "integrity": "sha512-TjRzfFFiY4i/a9ry5llCQMiIwpyhIyriM2QuPgAdRaRPM076I01FohUzlAc7zgwwhCa5rpI4zRZ+auGPrU44Gw==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/is-array-buffer": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.34.0.tgz", - "integrity": "sha512-YOblEaT5Fq7qHys8mSrNdJS3ZUsLviYyOk6q3ixmHPFcFpO3etGr5AnlDSFqlSm0jnX/0irmp3fbF96kMKLtUg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.52.0.tgz", + "integrity": "sha512-5Pe9QKrOeSZb9Z8gtlx9CDMfxH8EiNdClBfXBbc6CiUM7y6l7UintYHkm133zM5XTqtMRYY1jaD8svVAoRPApA==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/middleware-content-length": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.34.0.tgz", - "integrity": "sha512-+5NnSDEDxcAWXDQSXe1P+Dywrb6sYKSaoiu+kNcYB21mTwG3i9St1A2Q0wNMsdRMRVwSg/lJV5MbY5Mbk0+D5w==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.52.0.tgz", + "integrity": "sha512-U+aa8UswtEvEdt4vvX+C4b+vetSpG6PZVeGN/hZ2J0j3jQxODQtjKHU3VIO+Fvp8m9rSCtcfAPly5CcejHLeKw==", "requires": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-host-header": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.34.0.tgz", - "integrity": "sha512-3ZcBTicauGp0reKQ8Pw8ardk9kRTO7/lWAKGV7f0PnfOoGn+zUqVP0qvaHL3VNVdTJEz6fkkU7pJ0duCVCnpmA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.52.0.tgz", + "integrity": "sha512-t7y0gtJyFNrS6bwluR7N2LtppA7B0SDk+uNlvOJOYnJRms89fXltyMJWl8wrv8IHHvrhRLwNEP22vvOhn3hriA==", "requires": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-logger": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.34.0.tgz", - "integrity": "sha512-EBVp3tkEbMSW9ikMzejucYLOf+G98+vGqWSkvGbR0N8lBHs2za+fufBqknEY8lD7a8RLFQ3enevl8DMJ9d75pA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.52.0.tgz", + "integrity": "sha512-YbFuJAsOPvbYe64gpqmS6XmEQXwyAGwH3Y4iOp3CnrGAz/zXbwWwzb653Uby+h4PVkTZ1+RviCO/A6si9bUkhw==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-retry": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.34.0.tgz", - "integrity": "sha512-PKWlJWhr7b3jEsTDRBXf7mIUkjnGMQiYvNs3G1kdwrySbii2yEOlwy7KXAAo/TCwuL10W+HZG7EZwkwXNg7LTQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.52.0.tgz", + "integrity": "sha512-O+4mfn7OPv1POYagKwOgdlc16AQFWa4bY05g6Y94KZ2400ywNpK+Y2cwdskyNU3OTGOlluVGR21W5eO1b+XhNg==", "requires": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/service-error-classification": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/service-error-classification": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0", "uuid": "^8.3.2" } }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.34.0.tgz", - "integrity": "sha512-tJPkij4H0z4AbjOnRlcUP99dJud4SlH9fYfnxQ1CeG1PO0Zz1zTEc+2Sc93068bS4K4nrD4QaVsoOokvjW/4MQ==", - "requires": { - "@aws-sdk/middleware-signing": "3.34.0", - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.52.0.tgz", + "integrity": "sha512-NB1wHvOp+I6DXi5fPutyl9dAWvJYqzRqdi8lMeu02ub/d6nybrAjoB56za1LvGblcoEiYClf1A6dTKtmydgzFQ==", + "requires": { + "@aws-sdk/middleware-signing": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-serde": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.34.0.tgz", - "integrity": "sha512-oU2oa6hy1+DrFROD+K00NkRNdrsNgryay6rCA/jSUfwGEFmvN3iANTgXkEEvEKCSYqyh/ai998jk+6v60ChFBQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.52.0.tgz", + "integrity": "sha512-4ZooINTdOI4+T6pEiu8xte5EEhOqbE/wqOwBzvOASk3JKElZ93u6xKP2u7UKVD6asBBYK2mDrYSy1PsU4fNl4A==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-signing": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.34.0.tgz", - "integrity": "sha512-dlxyxIg6Mrjx6GzUVQoQV9M/n3kEvs6aMEzR3DTF0i8CGqWtKXE5OZhsjLVRflVOejONM7NEXwNeFHr+lQ4Z9w==", - "requires": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/signature-v4": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.52.0.tgz", + "integrity": "sha512-7FUqmZQ5DzaDJYCJ3YmOHRFEyFeohtsDQ1akWD2qekcjp16ftBtk05Fi9am5/L7pO8svVzobji/wg00Tlq183A==", + "requires": { + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/signature-v4": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/middleware-stack": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.34.0.tgz", - "integrity": "sha512-7WI+spzWcTYWIP0MwTDlE+LsWGlpZq44mvRGnNHDjnTjqfr5C3kWSc86fedujvbaW5ZGTes5NGmKQf/PqAmUqQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.52.0.tgz", + "integrity": "sha512-4OTbQ+tWc6Le7es3kSnXBzCyddcUw6Sk2GupR/1+PD9v4/qvtKXXK+uD4bMDDMfi6dTNV+2riOGBniOtBVsayw==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/middleware-user-agent": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.34.0.tgz", - "integrity": "sha512-EZBy0fNhuenzxlVAx2GcgBFOGCTyHs1Gg1GB/qUIhqZ2MHY66Yogj4BqPkiOg+zo7nFwCjWQ9LRypYZYXCWMLw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.52.0.tgz", + "integrity": "sha512-sfdJvAp/f4PHmQvSklFAuCpD7gqloG502gSmBAMrXKqYykvQ5SAGyr6sCZPWf8CZxKtn5n4ftg8CLKywwrKwmg==", "requires": { - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/node-config-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.34.0.tgz", - "integrity": "sha512-VPDYLNkwvhAlhSWecMbmiXpa/n20i9S4z0/+pSB4kXT73MvH3us77ecYXD5g8IIRrAR+Oaq8hrQLDP88bbte9g==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.52.0.tgz", + "integrity": "sha512-vfeTzkfVtGaNQrnhCRMObqid0shxFtNFEnnU1Nnx7HsgBfag2/T6fnsDzdVGaliQ6nmfg+RMrhzw2VECyBTHQQ==", "requires": { - "@aws-sdk/property-provider": "3.34.0", - "@aws-sdk/shared-ini-file-loader": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/node-http-handler": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.34.0.tgz", - "integrity": "sha512-Fyf0VsgatDr3puqIA4CHTqVKUPBveq0skQhXyPDXxXIllxExpqcrWu8fFqE2DalCqiDiDC7zR8Yh56syiBxmvA==", - "requires": { - "@aws-sdk/abort-controller": "3.34.0", - "@aws-sdk/protocol-http": "3.34.0", - "@aws-sdk/querystring-builder": "3.34.0", - "@aws-sdk/types": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.52.0.tgz", + "integrity": "sha512-MjLkndwLuWye1kavyFnDw5BvK8Rg4YpMULTne++OL/uEsxWO786K+QQMyLWkirPe+ELMEYu/3eOrQTly2tqHsA==", + "requires": { + "@aws-sdk/abort-controller": "3.52.0", + "@aws-sdk/protocol-http": "3.52.0", + "@aws-sdk/querystring-builder": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/property-provider": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.34.0.tgz", - "integrity": "sha512-Xkj6l14bYhKnzUXenBn8TANvR5p4pzLZF8Uk/pCVYZFgotOd5gVTC89SAQa4Lw2PzwoTqOsWKglS7CWi4KaBDg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.52.0.tgz", + "integrity": "sha512-Ooam7CvGefHKhMwQ413MiEtDTFw70xbCduJCF7Bg1F0WKrf700M/Yte+q3E0ljlXWJ28rwJNgwW3ptZaSXMGPg==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/protocol-http": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.34.0.tgz", - "integrity": "sha512-VPzI/VcDXqoWcyJNc0p/ee1pjGXFC8PmaZwK7PO3FkNEa8BE/9IbfVg3AGIekEDIXwpdZAjQeLCmOsMx866S2Q==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.52.0.tgz", + "integrity": "sha512-L6ITU9NG0L6nyYfzhSLa0EsgDlyL1vHNz+Om9o7TayUUF7O0f3UiZToWf2hdETQ04Os8625aZt0VH92ZnYyeEw==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/querystring-builder": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.34.0.tgz", - "integrity": "sha512-lDkJPvDsR+Ou0NIWUJlVCpi6vDNaPVgxtP2r/4kktoSYzwFz4UCkmKcDRdL4cxEZ6LYA0QkjtkyfQotoZMuIXA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.52.0.tgz", + "integrity": "sha512-RfNXqKeR6mdg2n2LO5Vs2Bz+f47/KN5k36HWk04bSwIbhnBtslXBp0F1KgSPkeP56KEgmmUWldRD7g8BvDkgAw==", "requires": { - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-uri-escape": "3.34.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-uri-escape": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/querystring-parser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.34.0.tgz", - "integrity": "sha512-IMpHNQOSPVk7qaDDaFL6xmTW4VuMbTxyhRdrVmxZXWWgRvMRs2chjXdq3iyTtpnKq5GNnEdPY7udjfWqYoaN8A==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.52.0.tgz", + "integrity": "sha512-/A6PauieStZajbkxX3sZSBBDacGDc3I/Sk7rjJulmg1GnizeVcUgx1OUdDh1JasdqA1h9E3ks/Y2Lu3xUMctLw==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/service-error-classification": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.34.0.tgz", - "integrity": "sha512-RYmgfrGSfULduJf753rMlK0E+NoK6PUaACb5eiVKoGyo8NpzDFcDWVL2yAb40tAqI7ahhWz1uqGzb1sRPWSAIg==" + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.52.0.tgz", + "integrity": "sha512-2bpSIZCx5VGp2CBTeXK6PxlBYWrn2wiqxBVYstDRExZ8P7edcwPRgWi8qaKgPM2wvstZwJieF774niiuLddIpg==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.34.0.tgz", - "integrity": "sha512-zh238/JYpP9+7FkCODH+UYqL1StbBtidFOt8Vmo4MNdh10R31XImnL0npdhRLiZSkOoatpHc+ViCOeH+I67QiQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.52.0.tgz", + "integrity": "sha512-tALb8u8IVcI4pT7yFZpl4O6kgeY5EAXyphZoRPgQSCDhmEyFUIi/sXbCN8HQiHjnHdWfXdaNE1YsZcW3GpcuoQ==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/signature-v4": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.34.0.tgz", - "integrity": "sha512-oKW5Frsu4TMc/8eLcRE4kdgKj1XqsVCry9VdjDgNpx37aeH7oggg75YDU+UZuhdF++hDr6uCa+DYxtluQ8g9sg==", - "requires": { - "@aws-sdk/is-array-buffer": "3.34.0", - "@aws-sdk/types": "3.34.0", - "@aws-sdk/util-hex-encoding": "3.34.0", - "@aws-sdk/util-uri-escape": "3.34.0", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.52.0.tgz", + "integrity": "sha512-lSlDASXGLup5v12kclzT2ZLoUnnVLknSRcMXrTVjnX7spmHMbs6s7LOcN0RXZzFIACs7vW+930KUzhBxt8UiFQ==", + "requires": { + "@aws-sdk/is-array-buffer": "3.52.0", + "@aws-sdk/types": "3.52.0", + "@aws-sdk/util-hex-encoding": "3.52.0", + "@aws-sdk/util-uri-escape": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/smithy-client": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.34.0.tgz", - "integrity": "sha512-nhLNpqehOYuBVr2f2LodMbO1j8J97WBTjfiyosUhVh36WDmSCPu4LjAJuzOLPF6LXp4fBK0BA04rJQA6nyFC0g==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.52.0.tgz", + "integrity": "sha512-GuOJuoA1kky/v2p7byOZGq7YOiu2Ov8DA3d58gM6L/q7XavBjnzwNB/BYU7SPU3Ly6S7qGxBJFeadufic4bCYg==", "requires": { - "@aws-sdk/middleware-stack": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/middleware-stack": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/types": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.34.0.tgz", - "integrity": "sha512-rx9mJp+yKEgb6HVyMtytG+45xwiX3eaHy1VrPC0RV/Uxym1iGyFmpHYo+0/UgL1BTRrJXLA9gTfj15H5kyZ6/Q==" + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.52.0.tgz", + "integrity": "sha512-5deI1v6Fr7/a+TT9hPuiy6I/L/7uJTda3q3DEvUd0CsGbBB/fcDXJg8jlnMHcmw7mkfP9vE553ZJQS3Cb0v4vg==" }, "@aws-sdk/url-parser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.34.0.tgz", - "integrity": "sha512-RqF5vQ3+kTRhNmsT7V9KqPnfrDsHZg8XjgEFdr29iKXEupOockQlJBVGTesy73y9nvnMueNKNZkk4VLeHEW6cg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.52.0.tgz", + "integrity": "sha512-/9OJwol/384jsISiAs5JX7fkgd9mv7hJsHFCVXnByim5qTZu1V9fMcJYJ1L3iRmfCRy0w75UDJljIx2RZnwAYw==", "requires": { - "@aws-sdk/querystring-parser": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/querystring-parser": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-base64-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.34.0.tgz", - "integrity": "sha512-3ScDOSlrX4EnwWzYnDfKa3GjiLYnHfk2YEV5G+f/NOEKhsuTsj++PGvdLqbXc4m03rLiDBoMgN204tz78rSgsA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.52.0.tgz", + "integrity": "sha512-xjv/cQ4goWXAiGEC/AIL/GtlHg4p4RkQKs6/zxn9jOxo1OnbppLMJ0LjCtv4/JVYIVGHrx0VJ8Exyod7Ln+NeA==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-base64-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.34.0.tgz", - "integrity": "sha512-r7tPqydtuzjMH9BBPw34l8zlN84O8EuJPl2mx1JXFrDE+ADUx1VBU+KK1pnIFoFVb7/FWMVPeaKz1u0EjsSKRQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.52.0.tgz", + "integrity": "sha512-V96YIXBuIiVu7Zk72Y9dly7Io9cYOT30Hjf77KAkBeizlFgT5gWklWYGcytPY8FxLuEy4dPLeHRmgwQnlDwgPA==", "requires": { - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-body-length-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.34.0.tgz", - "integrity": "sha512-Av7x9dKoygju9QBuTIGa7JITxGlIj7NhN22CxX3FThIIJofp5qbnTTiLURivM6jw6Wvf2sZ4mpP34xEeDvXG/A==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.52.0.tgz", + "integrity": "sha512-8omOgIGmopUtwg3XaeyvqacxrIrCsDKUVQp5n+8iLmyYt5mQM70vXbUC273GJzKDtibGDfxiN4FqSLBlo9F/oQ==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-body-length-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.34.0.tgz", - "integrity": "sha512-slrlSnPNQd/6pvTpvK0Z8z7hbrND0dEA+0/4Y3l47hBftznxhiKbLKiCg5a3iBjTxUB0qSQ03YNY/fK3DtPJTA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.52.0.tgz", + "integrity": "sha512-1WWsGh0hip4y1uvOLFV2v3Nvq3W35dmW5YniCi0gQDBLc5JHES8Zka7yoCDYOfaYFUodVH5mC/jFBjGRQ3TpDw==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-buffer-from": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.34.0.tgz", - "integrity": "sha512-G1XXPD3IfHYXEGwknC2ogn2CylxrYcdwwWbS1vGji9zP6YX8C/gf+moLtJz3bDlMwSHTLdzdH/RWBIL75djGKg==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.52.0.tgz", + "integrity": "sha512-hsG0lMlHjJUFoXIy59QLn6x4QU/vp/e0t3EjdD0t8aymB9iuJ43UeLjYTZdrOgtbWb8MXEF747vwg+P6n+4Lxw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.52.0", + "tslib": "^2.3.0" + } + }, + "@aws-sdk/util-config-provider": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.52.0.tgz", + "integrity": "sha512-1wonBNkOOLJpMZnz2Kn69ToFgSoTTyGzJInir8WC5sME3zpkb5j41kTuEVbImNJhVv9MKjmGYrMeZbBVniLRPw==", "requires": { - "@aws-sdk/is-array-buffer": "3.34.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-credentials": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-credentials/-/util-credentials-3.34.0.tgz", - "integrity": "sha512-Spb7MtRMmAeHekaju85m5WOO8/C277+6pWvBQlh3vADwmxsBdyvDCIZtXLhlqW/zeUUKvr7atkuhW5h2Ck+gfw==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-credentials/-/util-credentials-3.52.0.tgz", + "integrity": "sha512-fNcm2cNzDHWt5Pr6xD2FXA40jkcgClsbumuI0VBhLEyNLfoetwPImKTpqbxo1XfWVxhqIbT/ELnrbS2OYBRIXg==", + "requires": { + "@aws-sdk/shared-ini-file-loader": "3.52.0", + "tslib": "^2.3.0" + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.52.0.tgz", + "integrity": "sha512-N2/DHJ/OfiQ5zP97k9cJ8jSGiWDjtR7oFqXR+wbKZzKOww6vencMPYlndU6v1uZOKEjoj+NBr5N0jPEjCz+6+g==", + "requires": { + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", + "bowser": "^2.11.0", + "tslib": "^2.3.0" + } + }, + "@aws-sdk/util-defaults-mode-node": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.52.0.tgz", + "integrity": "sha512-vmbvirg5edfNKBin8Mup2noxgqIYzYPnvk+BgIx3jFPvwT57WGRs/ahOMNqHgv/6xAdVaUjz8g7gw9Yy3mwP3A==", "requires": { - "@aws-sdk/shared-ini-file-loader": "3.34.0", + "@aws-sdk/config-resolver": "3.52.0", + "@aws-sdk/credential-provider-imds": "3.52.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/property-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-hex-encoding": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.34.0.tgz", - "integrity": "sha512-eM1jKmD1SOCluLMqOxmbJRqPbuSyDGp1HELEAYt1zG2xy1pAugiJK7zyCcNZ8Wt/1RQQA1QnPnSTtQFK1GVzbA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.52.0.tgz", + "integrity": "sha512-YYMZg8odn/hBURgL/w82ay2mvPqXHMdujlSndT1ddUSTRoZX67N3hfYYf36nOalDOjNcanIvFHe4Fe8nw+8JiA==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-locate-window": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.34.0.tgz", - "integrity": "sha512-/xZs6dJ+00H/vNi4+tRoj32XfkhDCYWiASI/wVMzpZG/F15SOipe9MWxUWrH7FAm+BSp5cHcdnLtzFoJmI5cCQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.52.0.tgz", + "integrity": "sha512-l10U2cLko6070A9DYLJG4NMtwYH8JBG2J/E+RH8uY3lad2o6fGEIkJU0jQbWbUeHYLG3IWuCxT47V4gxYrFj7g==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-uri-escape": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.34.0.tgz", - "integrity": "sha512-UxB5LfwB4BWdQyLJkkHz/U/gigQBkkfVhQHJx0Sg/yMH/PnTuUqdj+MWhezca/9VQShx24uBewXWV4ToybYULA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.52.0.tgz", + "integrity": "sha512-W9zw5tE8syjg17jiCYtyF99F0FgDIekQdLg+tQGobw9EtCxlUdg48UYhifPfnjvVyADRX2ntclHF9NmhusOQaQ==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-user-agent-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.34.0.tgz", - "integrity": "sha512-7bSk/d0LPzGnYLkKI0Z91dsoPudoayRywrYjdEbTbD85d+2VDKuxszhACVV4hbcQSc7x0zCumRJE7rx3c2weIQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.52.0.tgz", + "integrity": "sha512-zmw9pJ91QAr1oF3uqLKuo/3++NrSEagLwz3xnuID5wN8WLAgbC6MkvM7FG+r11CHSoUX3IeB6YDqoBMQW8en8w==", "requires": { - "@aws-sdk/types": "3.34.0", + "@aws-sdk/types": "3.52.0", "bowser": "^2.11.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-user-agent-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.34.0.tgz", - "integrity": "sha512-EupJGySosLRk9NWYajE4x6gEEW+ZiW4cdNlDUkDWng+qruxNJDxLIO2xRrPBFiA+s/DMy6HRXWROBWpGnqLB5w==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.52.0.tgz", + "integrity": "sha512-jqbyb6R4goWOTIESizmNPy1i3Xa25Q3QG0xt6Pct0DwLQUSVpnPHw07NmfRhql+eYBoD4uxpXDX9lWsuLUBi0w==", "requires": { - "@aws-sdk/node-config-provider": "3.34.0", - "@aws-sdk/types": "3.34.0", + "@aws-sdk/node-config-provider": "3.52.0", + "@aws-sdk/types": "3.52.0", "tslib": "^2.3.0" } }, "@aws-sdk/util-utf8-browser": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.34.0.tgz", - "integrity": "sha512-auB09BoFk5mPA444WmBpF5dZN+59ojrmpAcJf4zc0S/UfsWzAQDj7Lsj2aSu9O0xWoDmtzUWxfiwQqNIEqcNIA==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.52.0.tgz", + "integrity": "sha512-LuOMa9ajWu5fQuYkmvTlQZfHaITkSle+tM/vhbU4JquRN44VUKACjRGT7UEhoU3lCL1BD0JFGMQGHI+5Mmuwfg==", "requires": { "tslib": "^2.3.0" } }, "@aws-sdk/util-utf8-node": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.34.0.tgz", - "integrity": "sha512-Okarq9OUG99UOcen3dYUQCw62Fm9DQk3zyt/7MMgbt9G6Sz6kQ6s1vtC4Ip+HxhALBQPFj8THcf2ijh55L6unQ==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.52.0.tgz", + "integrity": "sha512-fujr7zeobZ2y5nnOnQZrCPPc+lCAhtNF/LEVslsQfd+AQ0bYWiosrKNetodQVWlfh10E2+i6/5g+1SBJ5kjsLw==", "requires": { - "@aws-sdk/util-buffer-from": "3.34.0", + "@aws-sdk/util-buffer-from": "3.52.0", "tslib": "^2.3.0" } }, @@ -9265,9 +9684,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, "@babel/helper-replace-supers": { @@ -9507,12 +9926,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/template": { @@ -9566,9 +9985,9 @@ "dev": true }, "@cspotcode/source-map-support": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", - "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "requires": { "@cspotcode/source-map-consumer": "0.8.0" @@ -9594,49 +10013,49 @@ "dev": true }, "@jest/console": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz", - "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.2.4", - "jest-util": "^27.2.4", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz", - "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, "requires": { - "@jest/console": "^27.2.4", - "@jest/reporters": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.2.4", - "jest-config": "^27.2.4", - "jest-haste-map": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-resolve-dependencies": "^27.2.4", - "jest-runner": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", - "jest-watcher": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -9644,67 +10063,68 @@ } }, "@jest/environment": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz", - "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4" + "jest-mock": "^27.5.1" } }, "@jest/fake-timers": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz", - "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.2.4", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "@jest/globals": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz", - "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, "requires": { - "@jest/environment": "^27.2.4", - "@jest/types": "^27.2.4", - "expect": "^27.2.4" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" } }, "@jest/reporters": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz", - "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -9713,67 +10133,67 @@ } }, "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, "requires": { "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "source-map": "^0.6.0" } }, "@jest/test-result": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz", - "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, "requires": { - "@jest/console": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz", - "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dev": true, "requires": { - "@jest/test-result": "^27.2.4", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-runtime": "^27.2.4" + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" } }, "@jest/transform": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz", - "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.2.4", - "babel-plugin-istanbul": "^6.0.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", - "pirates": "^4.0.1", + "pirates": "^4.0.4", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" } }, "@jest/types": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz", - "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -9793,9 +10213,9 @@ } }, "@sinonjs/fake-timers": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", - "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -9832,9 +10252,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -9845,9 +10265,9 @@ } }, "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -9906,9 +10326,9 @@ } }, "@types/jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", - "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", + "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", "dev": true, "requires": { "jest-diff": "^27.0.0", @@ -9916,15 +10336,15 @@ } }, "@types/node": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", - "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==", + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", + "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==", "dev": true }, "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", + "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", "dev": true }, "@types/stack-utils": { @@ -9955,9 +10375,9 @@ "dev": true }, "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-globals": { @@ -9994,9 +10414,9 @@ } }, "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -10069,34 +10489,37 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, "aws-cdk": { - "version": "1.129.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.129.0.tgz", - "integrity": "sha512-9Se35i7mtRB2m0gbrdgQmDjFS6NeI+72wsXaOJQg0xMIX+vnl5mXdmCy7SDJEtYUBTz/Db7wcuXJ46t0+rRLyA==", + "version": "1.145.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.145.0.tgz", + "integrity": "sha512-mr1Zr67r1n84a87WEOz1qixhWmQIK9P7Vj3/jKKkHsfWD6Wo2U89FNZHEX3eR4FKLgKTQyWaDLFTcSOjJnGoog==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cloudformation-diff": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", - "@aws-cdk/region-info": "1.129.0", - "@jsii/check-node": "1.40.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cloudformation-diff": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", + "@aws-cdk/region-info": "1.145.0", + "@jsii/check-node": "1.54.0", "archiver": "^5.3.0", "aws-sdk": "^2.979.0", - "camelcase": "^6.2.0", - "cdk-assets": "1.129.0", - "colors": "^1.4.0", + "camelcase": "^6.3.0", + "cdk-assets": "1.145.0", + "chalk": "^4", + "chokidar": "^3.5.3", "decamelize": "^5.0.1", "fs-extra": "^9.1.0", "glob": "^7.2.0", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", + "json-diff": "^0.7.1", + "minimatch": ">=3.1", "promptly": "^3.2.0", "proxy-agent": "^5.0.0", "semver": "^7.3.5", - "source-map-support": "^0.5.20", - "table": "^6.7.2", + "source-map-support": "^0.5.21", + "strip-ansi": "^6.0.1", + "table": "^6.8.0", "uuid": "^8.3.2", "wrap-ansi": "^7.0.0", "yaml": "1.10.2", @@ -10104,7 +10527,7 @@ }, "dependencies": { "@aws-cdk/cfnspec": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "requires": { "fs-extra": "^9.1.0", @@ -10112,7 +10535,7 @@ } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "requires": { "jsonschema": "^1.4.0", @@ -10120,34 +10543,34 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.129.0", + "@aws-cdk/cfnspec": "1.145.0", "@types/node": "^10.17.60", - "colors": "^1.4.0", + "chalk": "^4", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.3", - "table": "^6.7.2" + "table": "^6.8.0" } }, "@aws-cdk/cx-api": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", "semver": "^7.3.5" } }, "@aws-cdk/region-info": { - "version": "1.129.0", + "version": "1.145.0", "dev": true }, "@jsii/check-node": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.40.0.tgz#49882a61ad1b3a37cd35c35fa1a2301955f1c058", - "integrity": "sha512-rk0hFXxFQR8rDGUfsZT9ua6OufOpnLQWsNFyFU86AvpoKQ0ciw2KlGdWs7OYFnzPq8sQGhSS+iuBrUboaHW3jg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.54.0.tgz#6cee236d2267c1d4df4cd58aacffdf7fbf87ebe7", + "integrity": "sha512-pogNR1vgiXgBK2DQF+RsCnJQ9QPe+y7lyoRlsTtUplIFB6ryWnSsmCyzkInSVoKAKCo5CHkuDy190MbYL4Ns4Q==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -10166,6 +10589,18 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", @@ -10176,9 +10611,9 @@ } }, "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -10202,6 +10637,16 @@ "color-convert": "^2.0.1" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "archiver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", @@ -10268,9 +10713,9 @@ "dev": true }, "async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, "at-least-node": { @@ -10280,15 +10725,15 @@ "dev": true }, "aws-sdk": { - "version": "2.1006.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1006.0.tgz#fc2f7e267d19a6297f732e19449461bb944682af", - "integrity": "sha512-lwXAy706+1HVQqMnHaahdeBZZbdu6TWrtTY0ydeG0qanwldTFNMLczwnETTZWYsqNAU+wjl1VzmFdMO4gePLNQ==", + "version": "2.1074.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1074.0.tgz#be3283f781b3060cd67d5abef50d1edacefede70", + "integrity": "sha512-tD478mkukglutjs+mq5FQmYFzz+l/wddl5u3tTMWTNa+j1eSL+AqaHPFM1rC3O9h98QqpKKzeKbLrPhGDvYaRg==", "dev": true, "requires": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", - "jmespath": "0.15.0", + "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", @@ -10341,6 +10786,12 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", @@ -10362,6 +10813,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", @@ -10385,27 +10845,27 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "cdk-assets": { - "version": "1.129.0", + "version": "1.145.0", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.129.0", - "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.145.0", + "@aws-cdk/cx-api": "1.145.0", "archiver": "^5.3.0", "aws-sdk": "^2.848.0", "glob": "^7.2.0", - "mime": "^2.5.2", + "mime": "^2.6.0", "yargs": "^16.2.0" } }, @@ -10425,13 +10885,32 @@ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "cli-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.1.tgz#93e3491308691f1e46beb78b63d0fb2585e42ba6", + "integrity": "sha512-eBbxZF6fqPUNnf7CLAFOersUnyYzv83tHFLSlts+OAHsNendaqv2tHCq+/MO+b3Y+9JeoUlIvobyxG/Z8GNeOg==", "dev": true, "requires": { - "es5-ext": "0.8.x" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" } }, "cliui": { @@ -10460,12 +10939,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d", @@ -10491,13 +10964,13 @@ "dev": true }, "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", "dev": true, "requires": { "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" + "printj": "~1.3.1" } }, "crc32-stream": { @@ -10516,6 +10989,16 @@ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", @@ -10523,9 +11006,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -10577,9 +11060,9 @@ } }, "dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz#5bcc80be7097e45fc489c342405ab68140a8c1d9", + "integrity": "sha1-W8yAvnCX5F/EicNCQFq2gUCowdk=", "dev": true, "requires": { "wordwrap": ">=0.0.2" @@ -10601,10 +11084,48 @@ } }, "es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", - "dev": true + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } }, "escalade": { "version": "3.1.1", @@ -10642,6 +11163,16 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", @@ -10654,6 +11185,23 @@ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "dev": true }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true + } + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", @@ -10672,6 +11220,15 @@ "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", @@ -10789,12 +11346,32 @@ "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "has-flag": { @@ -10804,22 +11381,22 @@ "dev": true }, "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true }, "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.4", - "setprototypeof": "1.1.1", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "http-proxy-agent": { @@ -10880,18 +11457,54 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", @@ -10899,20 +11512,20 @@ "dev": true }, "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true }, "json-diff": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.7.1.tgz#0f1a87d281174c1a62c8714a208d0d24725a8169", + "integrity": "sha512-/LxjcgeDIZwFB1HHTShKAYs2NaxAgwUQjXKvrFLDvw3KqvbffFmy5ZeeamxoSLgQG89tRs9+CFKiR3lJAPPhDw==", "dev": true, "requires": { - "cli-color": "~0.1.6", + "cli-color": "^2.0.0", "difflib": "~0.2.1", - "dreamopt": "~0.6.0" + "dreamopt": "~0.8.0" } }, "json-schema-traverse": { @@ -10937,9 +11550,9 @@ "dev": true }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "requires": { "readable-stream": "^2.0.5" @@ -10972,12 +11585,6 @@ "type-check": "~0.3.2" } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", @@ -11023,6 +11630,15 @@ "yallist": "^4.0.0" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, + "requires": { + "es5-ext": "~0.10.2" + } + }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", @@ -11034,19 +11650,54 @@ "is-buffer": "~1.1.6" } }, + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "dependencies": { + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + } + } + }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.0.tgz#281d8402aaaeed18a9e8406ad99c46a19206c6ef", + "integrity": "sha512-EU+GCVjXD00yOUf1TwAHVP7v3fBD3A8RkkPYsWWKGWesxM/572sL53wJQnHxquHlRhYUV36wHkqrN8cdikKc2g==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } } }, "ms": { @@ -11067,6 +11718,12 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", @@ -11130,6 +11787,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", @@ -11137,9 +11800,9 @@ "dev": true }, "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", "dev": true }, "process-nextick-args": { @@ -11209,13 +11872,13 @@ "dev": true }, "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -11264,6 +11927,26 @@ "dev": true, "requires": { "minimatch": "^3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" } }, "require-directory": { @@ -11306,9 +11989,9 @@ } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "slice-ansi": { @@ -11329,13 +12012,13 @@ "dev": true }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { @@ -11356,9 +12039,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -11410,13 +12093,12 @@ } }, "table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", @@ -11436,10 +12118,37 @@ "readable-stream": "^3.1.1" } }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + }, + "dependencies": { + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tslib": { @@ -11448,6 +12157,12 @@ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", @@ -11509,10 +12224,14 @@ "dev": true }, "vm2": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.4.tgz#2e118290fefe7bd8ea09ebe2f5faf53730dbddaa", - "integrity": "sha512-sOdharrJ7KEePIpHekiWaY1DwgueuiBeX/ZBJUPgETsVlJsXuEx0K0/naATq2haFvJrvZnRiORQRubR0b7Ye6g==", - "dev": true + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.8.tgz#e99c000db042735cd2f94d8db6c42163a17be04e", + "integrity": "sha512-/1PYg/BwdKzMPo8maOZ0heT7DLI0DAFTm7YQaz/Lim9oIaFZsJs3EdtalvXuBfZwczNwsYhju75NW4d6E+4q+w==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + } }, "word-wrap": { "version": "1.2.3", @@ -11625,39 +12344,44 @@ } } }, + "aws-jwt-verify": { + "version": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-89svd8F/yNG6XkK6xYYfASzfXBHe5Y5wVA/tONQEtDY8N0mZkZgc2pbxjJ+lTAnJuPx/kSWSGsQymTeyhW7fKw==", + "dev": true + }, "babel-jest": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz", - "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, "requires": { - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" } }, "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -11687,19 +12411,20 @@ } }, "babel-preset-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.2.0", + "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "bowser": { "version": "2.11.0", @@ -11710,6 +12435,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11762,9 +12488,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "callsites": { "version": "3.1.0", @@ -11856,12 +12582,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -11874,7 +12594,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "constructs": { "version": "3.3.97", @@ -11999,9 +12720,9 @@ "dev": true }, "diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, "domexception": { @@ -12044,6 +12765,15 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -12076,9 +12806,9 @@ "dev": true }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -12111,25 +12841,15 @@ "dev": true }, "expect": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz", - "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, "requires": { - "@jest/types": "^27.2.4", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-regex-util": "^27.0.6" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" } }, "fast-deep-equal": { @@ -12198,18 +12918,12 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } } }, "fs.realpath": { @@ -12276,9 +12990,10 @@ "dev": true }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "has": { "version": "1.0.3", @@ -12347,9 +13062,9 @@ } }, "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -12378,25 +13093,22 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -12445,20 +13157,21 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, @@ -12474,9 +13187,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -12485,9 +13198,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -12495,265 +13208,267 @@ } }, "jest": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz", - "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, "requires": { - "@jest/core": "^27.2.4", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.2.4" + "jest-cli": "^27.5.1" } }, "jest-changed-files": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz", - "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz", - "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dev": true, "requires": { - "@jest/environment": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.2.4", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz", - "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "dev": true, "requires": { - "@jest/core": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "prompts": "^2.0.1", "yargs": "^16.2.0" } }, "jest-config": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz", - "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.2.4", - "@jest/types": "^27.2.4", - "babel-jest": "^27.2.4", + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.2.4", - "jest-environment-jsdom": "^27.2.4", - "jest-environment-node": "^27.2.4", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-runner": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "micromatch": "^4.0.4", - "pretty-format": "^27.2.4" + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz", - "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz", - "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-environment-jsdom": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz", - "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, "requires": { - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz", - "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dev": true, "requires": { - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.2.4", - "jest-util": "^27.2.4" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "jest-get-type": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", - "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "dev": true }, "jest-haste-map": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz", - "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz", - "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.2.4", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.2.4", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "pretty-format": "^27.2.4", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz", - "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dev": true, "requires": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-matcher-utils": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz", - "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.2.4", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.4" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-message-util": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz", - "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.2.4", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz", - "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*" } }, @@ -12765,144 +13480,136 @@ "requires": {} }, "jest-regex-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true }, "jest-resolve": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz", - "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz", - "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, "requires": { - "@jest/types": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.2.4" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" } }, "jest-runner": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz", - "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", "dev": true, "requires": { - "@jest/console": "^27.2.4", - "@jest/environment": "^27.2.4", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.2.4", - "jest-environment-node": "^27.2.4", - "jest-haste-map": "^27.2.4", - "jest-leak-detector": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-runtime": "^27.2.4", - "jest-util": "^27.2.4", - "jest-worker": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz", - "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==", - "dev": true, - "requires": { - "@jest/console": "^27.2.4", - "@jest/environment": "^27.2.4", - "@jest/fake-timers": "^27.2.4", - "@jest/globals": "^27.2.4", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.4", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", - "@types/yargs": "^16.0.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", - "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-mock": "^27.2.4", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.4", - "jest-snapshot": "^27.2.4", - "jest-util": "^27.2.4", - "jest-validate": "^27.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" + "strip-bom": "^4.0.0" } }, "jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, "requires": { "@types/node": "*", - "graceful-fs": "^4.2.4" + "graceful-fs": "^4.2.9" } }, "jest-snapshot": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz", - "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.2.4", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.2.4", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.2.4", - "jest-matcher-utils": "^27.2.4", - "jest-message-util": "^27.2.4", - "jest-resolve": "^27.2.4", - "jest-util": "^27.2.4", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.2.4", + "pretty-format": "^27.5.1", "semver": "^7.3.2" }, "dependencies": { @@ -12918,60 +13625,60 @@ } }, "jest-util": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz", - "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "jest-validate": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz", - "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, "requires": { - "@jest/types": "^27.2.4", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.2.4" + "pretty-format": "^27.5.1" }, "dependencies": { "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true } } }, "jest-watcher": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz", - "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dev": true, "requires": { - "@jest/test-result": "^27.2.4", - "@jest/types": "^27.2.4", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.2.4", + "jest-util": "^27.5.1", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz", - "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", @@ -13047,6 +13754,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -13066,16 +13779,10 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } } }, "kleur": { @@ -13100,6 +13807,12 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -13115,6 +13828,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -13146,12 +13865,12 @@ "dev": true }, "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "md5": { @@ -13182,18 +13901,18 @@ } }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -13206,6 +13925,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -13240,12 +13960,6 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, "node-releases": { "version": "1.1.77", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", @@ -13329,6 +14043,18 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -13366,13 +14092,10 @@ "dev": true }, "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -13390,12 +14113,11 @@ "dev": true }, "pretty-format": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz", - "integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { - "@jest/types": "^27.2.4", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -13410,9 +14132,9 @@ } }, "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -13428,7 +14150,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "react-is": { "version": "17.0.2", @@ -13449,13 +14172,14 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -13473,6 +14197,12 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13506,7 +14236,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -13558,9 +14289,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13623,6 +14354,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13642,6 +14379,12 @@ "supports-color": "^7.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -13718,6 +14461,14 @@ "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } } }, "tr46": { @@ -13730,16 +14481,16 @@ } }, "ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "version": "27.1.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", + "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", - "lodash": "4.x", + "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" @@ -13757,12 +14508,12 @@ } }, "ts-node": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", - "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", + "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", "dev": true, "requires": { - "@cspotcode/source-map-support": "0.6.1", + "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -13773,6 +14524,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", "yn": "3.1.1" }, "dependencies": { @@ -13826,15 +14578,15 @@ } }, "typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "uri-js": { @@ -13851,10 +14603,16 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -13889,12 +14647,12 @@ } }, "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "webidl-conversions": { @@ -13974,9 +14732,9 @@ } }, "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", "dev": true, "requires": {} }, diff --git a/tests/cognito/package.json b/tests/cognito/package.json index 77cf580..8919f49 100644 --- a/tests/cognito/package.json +++ b/tests/cognito/package.json @@ -9,28 +9,29 @@ "watch": "tsc -w", "test": "if [ -f outputs.json ]; then jest; else echo \"ERROR: Deploy stack with AWS resources first: cdk deploy -O outputs.json --toolkit-stack-name AwsJwtVerifyTest-toolkit\"; exit 1; fi", "cdk": "cdk", - "postinstall": "(cd ../.. && npm run pack-for-tests) && cd lib/lambda-authorizer && npm install --no-save --force --no-package-lock ../../../../aws-jwt-verify.tgz" + "postinstall": "cd lib/lambda-authorizer && npm install --no-save --force --no-package-lock ../../../../aws-jwt-verify.tgz" }, "devDependencies": { - "@aws-cdk/assert": "1.129.0", - "@types/jest": "^27.0.2", - "@types/node": "16.10.2", - "aws-cdk": "1.129.0", - "jest": "^27.2.4", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.1", - "typescript": "~4.4.3" + "@aws-cdk/assert": "1.145.0", + "@types/jest": "^27.4.0", + "@types/node": "17.0.19", + "aws-cdk": "1.145.0", + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", + "jest": "^27.5.1", + "ts-jest": "^27.1.3", + "ts-node": "^10.5.0", + "typescript": "~4.5.5" }, "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.129.0", - "@aws-cdk/aws-apigatewayv2-authorizers": "1.129.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.129.0", - "@aws-cdk/aws-cognito": "1.129.0", - "@aws-cdk/aws-iam": "1.129.0", - "@aws-cdk/aws-lambda": "1.129.0", - "@aws-cdk/core": "1.129.0", - "@aws-cdk/custom-resources": "1.129.0", - "@aws-sdk/client-cognito-identity-provider": "^3.34.0", - "source-map-support": "^0.5.20" + "@aws-cdk/aws-apigatewayv2": "1.145.0", + "@aws-cdk/aws-apigatewayv2-authorizers": "1.145.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.145.0", + "@aws-cdk/aws-cognito": "1.145.0", + "@aws-cdk/aws-iam": "1.145.0", + "@aws-cdk/aws-lambda": "1.145.0", + "@aws-cdk/core": "1.145.0", + "@aws-cdk/custom-resources": "1.145.0", + "@aws-sdk/client-cognito-identity-provider": "^3.52.0", + "source-map-support": "^0.5.21" } } diff --git a/tests/cognito/test/cognito.test.ts b/tests/cognito/test/cognito.test.ts index 5f525d5..f93e784 100644 --- a/tests/cognito/test/cognito.test.ts +++ b/tests/cognito/test/cognito.test.ts @@ -1,7 +1,6 @@ import * as outputs from "../outputs.json"; -import { CognitoJwtVerifier } from "../../../src/cognito-verifier"; -import { fetchJson } from "../../../src/https"; -import { JsonObject } from "../../../src/safe-json-parse"; +import { CognitoJwtVerifier } from "aws-jwt-verify"; +import { fetchJson } from "aws-jwt-verify/https"; import { CognitoIdentityProviderClient, InitiateAuthCommand, @@ -50,7 +49,7 @@ async function getJWTsForUser() { } async function getAccessTokenForClientCredentials() { - return fetchJson( + return fetchJson<{ access_token: string }>( `${hostedUIUrl}/oauth2/token`, { method: "POST", @@ -64,7 +63,7 @@ async function getAccessTokenForClientCredentials() { Buffer.from( `grant_type=client_credentials&scope=${encodeURIComponent(scope)}` ) - ).then((res) => ({ access: (res as JsonObject)["access_token"] as string })); + ).then((res) => ({ access: res["access_token"] })); } test("Verify ID token for user: happy flow", async () => { diff --git a/tests/installation-and-basic-usage/run-tests.sh b/tests/installation-and-basic-usage/run-tests.sh index 684d209..c18a2a5 100755 --- a/tests/installation-and-basic-usage/run-tests.sh +++ b/tests/installation-and-basic-usage/run-tests.sh @@ -7,8 +7,8 @@ main() { DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" cd $DIR - # Install aws-jwt-verify , since package-lock.json would not be generate prior, we use install instead of ci - npm i + # Install aws-jwt-verify + npm install --force # Compile test files npx tsc diff --git a/tests/installation-and-basic-usage/test-script.ts b/tests/installation-and-basic-usage/test-script.ts index 511d18d..23fe520 100644 --- a/tests/installation-and-basic-usage/test-script.ts +++ b/tests/installation-and-basic-usage/test-script.ts @@ -1,6 +1,6 @@ import { RequestOptions } from "http"; import { JwtRsaVerifier } from "aws-jwt-verify"; -import { generateKeyPair, signJwt } from "../unit/test-util"; +import { generateKeyPair, signJwt } from "./test-util"; import { SimpleJwksCache } from "aws-jwt-verify/jwk"; import { SimpleJsonFetcher } from "aws-jwt-verify/https"; import { createServer } from "https"; @@ -9,13 +9,16 @@ import { join } from "path"; const issuer = "https://example.com/idp"; const audience = "myaudience"; -const keypair = generateKeyPair(); -const validJwt = signJwt( - { kid: keypair.jwk.kid }, - { hello: "world", iss: issuer, aud: audience }, - keypair.privateKey -); -const invalidJwt = signJwt({}, { hello: "world" }, keypair.privateKey, false); +const { privateKey, jwk, jwks } = generateKeyPair(); +const jwtHeader = { kid: jwk.kid, alg: "RS256" }; +const jwtPayload = { + hello: "world", + iss: issuer, + aud: audience, + exp: Math.floor(Date.now() / 1000 + 1000), +}; +const validJwt = signJwt(jwtHeader, jwtPayload, privateKey); +const invalidJwt = signJwt(jwtHeader, jwtPayload, privateKey, false); const verifier = JwtRsaVerifier.create( { issuer: "https://example.com/idp", @@ -44,7 +47,7 @@ function startJwksServer() { req.destroy(); } else { res.setHeader("Content-Type", "application/json"); - res.write(JSON.stringify(keypair.jwks)); + res.write(JSON.stringify(jwks)); res.end(); } induceTcpError = !induceTcpError; // toggle value diff --git a/tests/installation-and-basic-usage/test-util.ts b/tests/installation-and-basic-usage/test-util.ts new file mode 100644 index 0000000..25881c1 --- /dev/null +++ b/tests/installation-and-basic-usage/test-util.ts @@ -0,0 +1,69 @@ +/** + * Stand-alone and trimmed down copy of tests/unit/test-util.ts + * Copied here so that the test in this dir is fully independent of aws-jwt-verify sources, + * and only depends on the aws-jwt-verify package + */ + +import { createSign, generateKeyPairSync, KeyObject } from "crypto"; +import { deconstructPublicKeyInDerFormat } from "aws-jwt-verify/asn1"; +import { Jwk, Jwks } from "aws-jwt-verify/jwk"; + +export function generateKeyPair() { + const { privateKey, publicKey } = generateKeyPairSync("rsa", { + modulusLength: 4096, + publicExponent: 0x10001, + }); + const jwk = publicKeyToJwk(publicKey); + + return { + privateKey, + jwks: { keys: [jwk] } as Jwks, + jwk, + }; +} + +export function publicKeyToJwk(publicKey: KeyObject) { + const { n, e } = deconstructPublicKeyInDerFormat( + publicKey.export({ format: "der", type: "spki" }) + ); + return { + kid: "testkid", + alg: "RS256", + kty: "RSA", + use: "sig", + n: Buffer.from(n).toString("base64"), + e: Buffer.from(e).toString("base64"), + } as Jwk; +} + +export function signJwt( + header: { kid: string; alg: string }, + payload: { [key: string]: any }, + privateKey: KeyObject, + produceValidSignature = true +) { + const toSign = [ + base64url(JSON.stringify(header)), + base64url(JSON.stringify(payload)), + ].join("."); + const sign = createSign("RSA-SHA256"); + sign.write(toSign); + sign.end(); + const signature = sign.sign(privateKey); + if (!produceValidSignature) { + signature[0] = ~signature[0]; // swap first byte + } + const signedJwt = [toSign, base64url(signature)].join("."); + return signedJwt; +} + +export function base64url(x: string | Buffer) { + if (typeof x === "string") { + x = Buffer.from(x); + } + return x + .toString("base64") + .replace(/=/g, "") + .replace(/\+/g, "-") + .replace(/\//g, "_"); +} diff --git a/tests/installation-and-basic-usage/tsconfig.json b/tests/installation-and-basic-usage/tsconfig.json index bb542f3..8a2cb81 100644 --- a/tests/installation-and-basic-usage/tsconfig.json +++ b/tests/installation-and-basic-usage/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.json", - "include": ["."] + "files": ["./test-script.ts"] } diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index da3eed0..406b8d6 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -5,7 +5,11 @@ const path = require("path"); const srcPath = path.join(__dirname, "..", "src"); module.exports = (request, options) => { if (options.basedir.startsWith(srcPath)) { - request = request.replace(/\.js$/, ".ts"); + if (request.endsWith("node-web-compat.js")) { + request = request.replace(/\.js$/, ".cjs"); + } else { + request = request.replace(/\.js$/, ".ts"); + } } return options.defaultResolver(request, options); }; diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index 72ecf31..87e99c0 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -1,5 +1,3 @@ -/* istanbul ignore file */ - import { createSign, generateKeyPairSync, KeyObject } from "crypto"; import nock from "nock"; import { URL } from "url"; From 85cf28f5039bc493e85163d6f91afd2395cb5583 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 15:12:43 +0100 Subject: [PATCH 05/59] Ending newline --- src/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/.gitignore b/src/.gitignore index d4302f5..6ec572a 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1 @@ -!node-web-compat.d.ts \ No newline at end of file +!node-web-compat.d.ts From a2f145a67710aab31cad1f6346245dc0266527f6 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 15:13:58 +0100 Subject: [PATCH 06/59] Tweaked comment --- src/https-node.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/https-node.ts b/src/https-node.ts index bf1dec9..9b1dec3 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -1,7 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 // -// Utilities for fetching the JWKS URI, to get the public keys with which to verify JWTs +// NodeJS implementation for fetching JSON documents over HTTPS import { request } from "https"; import { IncomingHttpHeaders, RequestOptions } from "http"; From 43bc338107e67d641ee940daa81c854d460a1820 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 15:42:12 +0100 Subject: [PATCH 07/59] Tweaks to package locks --- package.json | 4 ++-- tests/cognito/package-lock.json | 16 ---------------- tests/cognito/package.json | 2 +- tests/installation-and-basic-usage/package.json | 6 +++--- tests/installation-and-basic-usage/run-tests.sh | 2 +- .../installation-and-basic-usage/test-script.ts | 3 +-- 6 files changed, 8 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index e3b3444..3898bf6 100644 --- a/package.json +++ b/package.json @@ -97,12 +97,12 @@ "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", "lint": "eslint . --fix --ignore-path .gitignore --max-warnings 0", - "pack-for-tests": "rm -f 'aws-jwt-verify-?.?.?.tgz' && npm pack && mv aws-jwt-verify-*.tgz aws-jwt-verify.tgz", + "pack-for-tests": "rm -f aws-jwt-verify.tgz 'aws-jwt-verify-?.?.?.tgz' && npm pack && mv aws-jwt-verify-*.tgz aws-jwt-verify.tgz", "prepack": "npm run dist", "prettier:check": "prettier --check .", "prettier": "prettier -w .", "test:all": "npm run prettier:check && npm run test:unit && npm run test:install && npm run test:import && npm run test:speed && npm run test:cognito", - "test:cognito": "cd tests/cognito && npm install --force && npm run test", + "test:cognito": "cd tests/cognito && npm install --no-package-lock --force ../../aws-jwt-verify.tgz && npm run test", "test:import": "cd tests/import-tests && rm -rf node_modules package-lock.json && npm install && node esm.mjs && node commonjs.cjs && tsc && node typescript.js && COMPILE_ERRORS=$(2>&1 tsc -p tsconfig-should-not-compile.json || true) && ([ \"$COMPILE_ERRORS\" != \"\" ] || (echo \"Ooops I did compile successfully :(\"; false))", "test:install": "./tests/installation-and-basic-usage/run-tests.sh", "test:speed": "jest -t \"speed\"", diff --git a/tests/cognito/package-lock.json b/tests/cognito/package-lock.json index 615b5f1..641d533 100644 --- a/tests/cognito/package-lock.json +++ b/tests/cognito/package-lock.json @@ -28,7 +28,6 @@ "@types/jest": "^27.4.0", "@types/node": "17.0.19", "aws-cdk": "1.145.0", - "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", "jest": "^27.5.1", "ts-jest": "^27.1.3", "ts-node": "^10.5.0", @@ -4969,16 +4968,6 @@ "readable-stream": "^3.6.0" } }, - "node_modules/aws-jwt-verify": { - "version": "2.1.3", - "resolved": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-89svd8F/yNG6XkK6xYYfASzfXBHe5Y5wVA/tONQEtDY8N0mZkZgc2pbxjJ+lTAnJuPx/kSWSGsQymTeyhW7fKw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -12344,11 +12333,6 @@ } } }, - "aws-jwt-verify": { - "version": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-89svd8F/yNG6XkK6xYYfASzfXBHe5Y5wVA/tONQEtDY8N0mZkZgc2pbxjJ+lTAnJuPx/kSWSGsQymTeyhW7fKw==", - "dev": true - }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", diff --git a/tests/cognito/package.json b/tests/cognito/package.json index 8919f49..73afc51 100644 --- a/tests/cognito/package.json +++ b/tests/cognito/package.json @@ -16,7 +16,6 @@ "@types/jest": "^27.4.0", "@types/node": "17.0.19", "aws-cdk": "1.145.0", - "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", "jest": "^27.5.1", "ts-jest": "^27.1.3", "ts-node": "^10.5.0", @@ -32,6 +31,7 @@ "@aws-cdk/core": "1.145.0", "@aws-cdk/custom-resources": "1.145.0", "@aws-sdk/client-cognito-identity-provider": "^3.52.0", + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", "source-map-support": "^0.5.21" } } diff --git a/tests/installation-and-basic-usage/package.json b/tests/installation-and-basic-usage/package.json index 1221e98..68e198c 100644 --- a/tests/installation-and-basic-usage/package.json +++ b/tests/installation-and-basic-usage/package.json @@ -10,11 +10,11 @@ "keywords": [], "author": "", "license": "ISC", - "dependencies": { - "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" - }, "devDependencies": { "@types/node": "^16.10.2", "typescript": "^4.4.3" + }, + "dependencies": { + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" } } diff --git a/tests/installation-and-basic-usage/run-tests.sh b/tests/installation-and-basic-usage/run-tests.sh index c18a2a5..c870c0c 100755 --- a/tests/installation-and-basic-usage/run-tests.sh +++ b/tests/installation-and-basic-usage/run-tests.sh @@ -8,7 +8,7 @@ main() { cd $DIR # Install aws-jwt-verify - npm install --force + npm install --no-package-lock --force ../../aws-jwt-verify.tgz # Compile test files npx tsc diff --git a/tests/installation-and-basic-usage/test-script.ts b/tests/installation-and-basic-usage/test-script.ts index 23fe520..4bd175a 100644 --- a/tests/installation-and-basic-usage/test-script.ts +++ b/tests/installation-and-basic-usage/test-script.ts @@ -1,4 +1,3 @@ -import { RequestOptions } from "http"; import { JwtRsaVerifier } from "aws-jwt-verify"; import { generateKeyPair, signJwt } from "./test-util"; import { SimpleJwksCache } from "aws-jwt-verify/jwk"; @@ -30,7 +29,7 @@ const verifier = JwtRsaVerifier.create( fetcher: new SimpleJsonFetcher({ defaultRequestOptions: { rejectUnauthorized: false, // ignore SSL errors because we use a self-signed cert for the test - } as RequestOptions, // explicit cast because the Node.js types don't recognize `rejectUnauthorized` + }, }), }), } From 93c197c8b4e4fdfaf50619adaeabf03dc671a73f Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 17:44:31 +0100 Subject: [PATCH 08/59] One more Buffer removed --- src/jwt-rsa.ts | 6 +++--- src/jwt.ts | 5 +++-- src/node-web-compat.cjs | 8 +++++--- src/node-web-compat.mjs | 17 ++++++++++++----- src/node-web-compat.ts | 5 ++++- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index c449683..fdd46a1 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -6,7 +6,7 @@ import { createVerify, createPublicKey, KeyObject, - uint8ArrayFromString, + uint8ArrayFromB64String, } from "./node-web-compat.js"; import { SimpleJwksCache, @@ -739,8 +739,8 @@ export type JwkToKeyObjectTransformer = ( export const transformJwkToKeyObject: JwkToKeyObjectTransformer = (jwk: Jwk) => createPublicKey({ key: constructPublicKeyInDerFormat( - uint8ArrayFromString(jwk.n, "base64"), - uint8ArrayFromString(jwk.e, "base64") + uint8ArrayFromB64String(jwk.n), + uint8ArrayFromB64String(jwk.e) ), format: "der", type: "spki", diff --git a/src/jwt.ts b/src/jwt.ts index f30508a..ace2819 100644 --- a/src/jwt.ts +++ b/src/jwt.ts @@ -16,6 +16,7 @@ import { JwtParseError, ParameterValidationError, } from "./error.js"; +import { utf8StringFromB64String } from "./node-web-compat.js"; /** * Assert that the argument is a valid JWT header object. @@ -112,8 +113,8 @@ export function decomposeJwt(jwt: unknown): { const [headerB64, payloadB64, signatureB64] = jwt.split("."); // B64 decode header and payload - const [headerString, payloadString] = [headerB64, payloadB64].map((b64) => - Buffer.from(b64, "base64").toString("utf8") + const [headerString, payloadString] = [headerB64, payloadB64].map( + utf8StringFromB64String ); // Parse header diff --git a/src/node-web-compat.cjs b/src/node-web-compat.cjs index dc67a6b..d315f57 100644 --- a/src/node-web-compat.cjs +++ b/src/node-web-compat.cjs @@ -9,18 +9,20 @@ Object.defineProperty(exports, "__esModule", { value: true }); const concatUint8Arrays = (...arrays) => Buffer.concat(arrays); const numberFromUint8ArrayBE = (uint8Array, length) => Buffer.from(uint8Array).readUIntBE(0, length); -const uint8ArrayFromString = (uint8Array, encoding) => - Buffer.from(uint8Array, encoding); +const uint8ArrayFromB64String = (b64) => Buffer.from(b64, "base64"); const { createVerify, createPublicKey } = require("crypto"); const { join } = require("path"); const { fetchJson } = require("./https-node.js"); +const utf8StringFromB64String = (b64) => + Buffer.from(b64, "base64").toString("utf8"); module.exports = { concatUint8Arrays, numberFromUint8ArrayBE, - uint8ArrayFromString, + uint8ArrayFromB64String, createVerify, createPublicKey, join, fetchJson, + utf8StringFromB64String, }; diff --git a/src/node-web-compat.mjs b/src/node-web-compat.mjs index 8a70e73..40278df 100644 --- a/src/node-web-compat.mjs +++ b/src/node-web-compat.mjs @@ -28,18 +28,20 @@ export let createVerify, join, concatUint8Arrays, numberFromUint8ArrayBE, - uint8ArrayFromString, - fetchJson; + uint8ArrayFromB64String, + fetchJson, + utf8StringFromB64String; if (runningInNode) { concatUint8Arrays = (...arrays) => Buffer.concat(arrays); numberFromUint8ArrayBE = (uint8Array, length) => Buffer.from(uint8Array).readUIntBE(0, length); - uint8ArrayFromString = (uint8Array, encoding) => - Buffer.from(uint8Array, encoding); + uint8ArrayFromB64String = (b64) => Buffer.from(b64, "base64"); ({ createVerify, createPublicKey } = await import("crypto")); ({ join } = await import("path")); ({ fetchJson } = await import("./https-node.js")); + utf8StringFromB64String = (b64) => + Buffer.from(b64, "base64").toString("utf8"); } else if (runningInBrowser) { concatUint8Arrays = (...arrays) => { const concatenatedLength = arrays.reduce( @@ -56,7 +58,12 @@ if (runningInNode) { fetchJson = (uri, requestOptions, data) => // eslint-disable-next-line no-undef fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); - throw new Error("Not implemented"); + join = (args) => args.map((arg) => arg.replace("/$", "")).join("/"); + // eslint-disable-next-line no-undef + utf8StringFromB64String = (b64) => window.atob(b64); + uint8ArrayFromB64String = (b64) => + // eslint-disable-next-line no-undef + Uint8Array.from(window.atob(b64), (c) => c.charCodeAt(0)); } else { throw new Error( "Unknown environment: only Node.js and Browser are supported" diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 139137c..6a9a9c0 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -30,7 +30,10 @@ export let join: (...segments: string[]) => string; // Buffer (Uint8) functions export let concatUint8Arrays: (...arrays: Uint8Array[]) => Uint8Array; export let numberFromUint8ArrayBE: (_: Uint8Array, length: number) => number; -export let uint8ArrayFromString: (_: string, encoding: "base64") => Uint8Array; +export let uint8ArrayFromB64String: (_: string) => Uint8Array; + +// Convert base64 to UTF8 +export let utf8StringFromB64String: (b64: string) => string; // Fetch JSON export let fetchJson: ( From e06a590a31097c1c846cef2846cb1df03b0decd3 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 21 Feb 2022 17:48:45 +0100 Subject: [PATCH 09/59] tweak --- src/node-web-compat.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/node-web-compat.mjs b/src/node-web-compat.mjs index 40278df..59212ea 100644 --- a/src/node-web-compat.mjs +++ b/src/node-web-compat.mjs @@ -61,9 +61,9 @@ if (runningInNode) { join = (args) => args.map((arg) => arg.replace("/$", "")).join("/"); // eslint-disable-next-line no-undef utf8StringFromB64String = (b64) => window.atob(b64); - uint8ArrayFromB64String = (b64) => - // eslint-disable-next-line no-undef - Uint8Array.from(window.atob(b64), (c) => c.charCodeAt(0)); + uint8ArrayFromB64String = (b64) => { + throw new Error("Not yet implemented"); + }; } else { throw new Error( "Unknown environment: only Node.js and Browser are supported" From 80608650c7b4cb2da1d3b2bbebea740391422e57 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 24 Feb 2022 17:30:11 +0100 Subject: [PATCH 10/59] Fixes and simplified --- .gitignore | 2 +- package.json | 7 +- src/asn1.ts | 121 +++++++++---------- src/assert.ts | 6 +- src/https-node.ts | 2 +- src/jwt-rsa.ts | 224 +++++++++++++++++------------------ src/node-web-compat-node.ts | 61 ++++++++++ src/node-web-compat-web.ts | 140 ++++++++++++++++++++++ src/node-web-compat.cjs | 28 ----- src/node-web-compat.mjs | 71 ----------- src/node-web-compat.ts | 38 ++---- src/typing-util.ts | 13 ++ tests/.gitignore | 2 +- tests/jest-ts-js-resolver.js | 2 +- tests/unit/jwt-rsa.test.ts | 88 +++++++------- tests/unit/test-util.ts | 2 +- tests/web/index.html | 29 +++++ 17 files changed, 475 insertions(+), 361 deletions(-) create mode 100644 src/node-web-compat-node.ts create mode 100644 src/node-web-compat-web.ts delete mode 100644 src/node-web-compat.cjs delete mode 100644 src/node-web-compat.mjs create mode 100644 tests/web/index.html diff --git a/.gitignore b/.gitignore index a0d24b3..dd56702 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ jwk.d.ts jwt-model.d.ts jwt-rsa.d.ts jwt.d.ts -node-web-compat.d.ts +node-web-compat*.d.ts safe-json-parse.d.ts test-util.d.ts typing-util.d.ts diff --git a/package.json b/package.json index 3898bf6..83c431a 100644 --- a/package.json +++ b/package.json @@ -91,10 +91,11 @@ "typescript": "^4.4.3" }, "scripts": { - "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && cp src/node-web-compat.cjs dist/cjs/node-web-compat.js", - "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json && cp src/node-web-compat.mjs dist/esm/node-web-compat.js", + "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && mv dist/cjs/node-web-compat-node.js dist/cjs/node-web-compat.js && rm dist/cjs/node-web-compat-web.js", + "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json && mv dist/esm/node-web-compat-node.js dist/esm/node-web-compat.js && rm dist/esm/node-web-compat-web.js", + "dist:web": "tsc --module ES2020 --outDir dist/web && echo '{\"type\":\"module\"}' > dist/esm/package.json && mv dist/web/node-web-compat-web.js dist/web/node-web-compat.js && rm dist/web/node-web-compat-node.js", "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly", - "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:types", + "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:web && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", "lint": "eslint . --fix --ignore-path .gitignore --max-warnings 0", "pack-for-tests": "rm -f aws-jwt-verify.tgz 'aws-jwt-verify-?.?.?.tgz' && npm pack && mv aws-jwt-verify-*.tgz aws-jwt-verify.tgz", diff --git a/src/asn1.ts b/src/asn1.ts index 04d9411..7ea4707 100644 --- a/src/asn1.ts +++ b/src/asn1.ts @@ -4,10 +4,6 @@ // Utility to encode RSA public keys (a pair of modulus (n) and exponent (e)) into DER-encoding, per ASN.1 specification. import { Asn1DecodingError } from "./error.js"; -import { - concatUint8Arrays, - numberFromUint8ArrayBE, -} from "./node-web-compat.js"; /** Enum with possible values for supported ASN.1 classes */ enum Asn1Class { @@ -41,14 +37,14 @@ interface Identifier { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.1.2 * * @param identifier - The ASN.1 identifier - * @returns The Uint8Array + * @returns The buffer */ function encodeIdentifier(identifier: Identifier) { const identifierAsNumber = (identifier.class << 7) | (identifier.primitiveOrConstructed << 5) | identifier.tag; - return Uint8Array.from([identifierAsNumber]); + return Buffer.from([identifierAsNumber]); } /** @@ -56,11 +52,11 @@ function encodeIdentifier(identifier: Identifier) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.1.3 * * @param length - The length of the ASN.1 type - * @returns The Uint8Array + * @returns The buffer */ function encodeLength(length: number) { if (length < 128) { - return Uint8Array.from([length]); + return Buffer.from([length]); } const integers: number[] = []; while (length > 0) { @@ -68,26 +64,26 @@ function encodeLength(length: number) { length = length >> 8; } integers.reverse(); - return Uint8Array.from([128 | integers.length, ...integers]); + return Buffer.from([128 | integers.length, ...integers]); } /** - * Encode a Uint8Array (that represent an integer) as integer per ASN.1 spec (DER-encoding) + * Encode a buffer (that represent an integer) as integer per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.3 * - * @param Uint8Array - The Uint8Array that represent an integer to encode - * @returns The Uint8Array + * @param buffer - The buffer that represent an integer to encode + * @returns The buffer */ -function encodeUint8ArrayAsInteger(Uint8Array: Uint8Array) { - return concatUint8Arrays( +function encodeBufferAsInteger(buffer: Buffer) { + return Buffer.concat([ encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.Integer, }), - encodeLength(Uint8Array.length), - Uint8Array - ); + encodeLength(buffer.length), + buffer, + ]); } /** @@ -95,7 +91,7 @@ function encodeUint8ArrayAsInteger(Uint8Array: Uint8Array) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.19 * * @param oid - The object identifier to encode - * @returns The Uint8Array + * @returns The buffer */ function encodeObjectIdentifier(oid: string) { const oidComponents = oid.split(".").map((i) => parseInt(i)); @@ -112,39 +108,39 @@ function encodeObjectIdentifier(oid: string) { bytes.map((b, index) => (index ? b + 128 : b)).reverse() ); }, [] as number[]); - const oidUint8Array = Uint8Array.from([ + const oidBuffer = Buffer.from([ firstSubidentifier, ...subsequentSubidentifiers, ]); - return concatUint8Arrays( + return Buffer.concat([ encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.ObjectIdentifier, }), - encodeLength(oidUint8Array.length), - oidUint8Array - ); + encodeLength(oidBuffer.length), + oidBuffer, + ]); } /** - * Encode a Uint8Array as bit string per ASN.1 spec (DER-encoding) + * Encode a buffer as bit string per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.6 * - * @param uint8Array - The Uint8Array to encode - * @returns The Uint8Array + * @param buffer - The buffer to encode + * @returns The buffer */ -function encodeUint8ArrayAsBitString(uint8Array: Uint8Array) { - const bitString = concatUint8Arrays(new Uint8Array(1), uint8Array); - return concatUint8Arrays( +function encodeBufferAsBitString(buffer: Buffer) { + const bitString = Buffer.concat([Buffer.from([0]), buffer]); + return Buffer.concat([ encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.BitString, }), encodeLength(bitString.length), - bitString - ); + bitString, + ]); } /** @@ -152,36 +148,36 @@ function encodeUint8ArrayAsBitString(uint8Array: Uint8Array) { * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.9 * * @param sequenceItems - The sequence of DER-encoded items - * @returns The Uint8Array + * @returns The buffer */ -function encodeSequence(sequenceItems: Uint8Array[]) { - const concatenated = concatUint8Arrays(...sequenceItems); - return concatUint8Arrays( +function encodeSequence(sequenceItems: Buffer[]) { + const concatenated = Buffer.concat(sequenceItems); + return Buffer.concat([ encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Constructed, tag: Asn1Tag.Sequence, }), encodeLength(concatenated.length), - concatenated - ); + concatenated, + ]); } /** * Encode null per ASN.1 spec (DER-encoding) * See https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf chapter 8.8 * - * @returns The Uint8Array + * @returns The buffer */ function encodeNull() { - return concatUint8Arrays( + return Buffer.concat([ encodeIdentifier({ class: Asn1Class.Universal, primitiveOrConstructed: Asn1Encoding.Primitive, tag: Asn1Tag.Null, }), - encodeLength(0) - ); + encodeLength(0), + ]); } /** @@ -207,23 +203,17 @@ const ALGORITHM_RSA_ENCRYPTION = encodeSequence([ /** * Transform an RSA public key, which is a pair of modulus (n) and exponent (e), - * into a Uint8Array per ASN.1 spec (DER-encoding) + * into a buffer per ASN.1 spec (DER-encoding) * - * @param n - The modulus of the public key as Uint8Array - * @param e - The exponent of the public key as Uint8Array - * @returns The Uint8Array, which is the public key encoded per ASN.1 spec (DER-encoding) + * @param n - The modulus of the public key as buffer + * @param e - The exponent of the public key as buffer + * @returns The buffer, which is the public key encoded per ASN.1 spec (DER-encoding) */ -export function constructPublicKeyInDerFormat( - n: Uint8Array, - e: Uint8Array -): Uint8Array { +export function constructPublicKeyInDerFormat(n: Buffer, e: Buffer): Buffer { return encodeSequence([ ALGORITHM_RSA_ENCRYPTION, - encodeUint8ArrayAsBitString( - encodeSequence([ - encodeUint8ArrayAsInteger(n), - encodeUint8ArrayAsInteger(e), - ]) + encodeBufferAsBitString( + encodeSequence([encodeBufferAsInteger(n), encodeBufferAsInteger(e)]) ), ]); } @@ -256,7 +246,7 @@ function decodeIdentifier(identifier: number) { * @param blockOfLengthValues - The ASN.1 length value * @returns The length and byte range of the first included length value */ -function decodeLengthValue(blockOfLengthValues: Uint8Array) { +function decodeLengthValue(blockOfLengthValues: Buffer) { if (!(blockOfLengthValues[0] & 0b10000000)) { return { length: blockOfLengthValues[0], @@ -265,10 +255,9 @@ function decodeLengthValue(blockOfLengthValues: Uint8Array) { }; } const nrLengthOctets = blockOfLengthValues[0] & 0b01111111; - const length = numberFromUint8ArrayBE( - Uint8Array.from(blockOfLengthValues.slice(1, 1 + 1 + nrLengthOctets)), - nrLengthOctets - ); + const length = Buffer.from( + blockOfLengthValues.slice(1, 1 + 1 + nrLengthOctets) + ).readUIntBE(0, nrLengthOctets); return { length, firstByteOffset: 1 + nrLengthOctets, @@ -280,7 +269,7 @@ function decodeLengthValue(blockOfLengthValues: Uint8Array) { interface ILV { identifier: Identifier; length: number; - value: Uint8Array; + value: Buffer; } /** @@ -290,7 +279,7 @@ interface ILV { * @param sequenceValue - The ASN.1 sequence value * @returns Array of identifier-length-value triplets */ -function decodeSequence(sequence: Uint8Array) { +function decodeSequence(sequence: Buffer) { const { tag } = decodeIdentifier(sequence[0]); if (tag !== Asn1Tag.Sequence) { throw new Asn1DecodingError( @@ -307,7 +296,7 @@ function decodeSequence(sequence: Uint8Array) { const parts: ILV[] = []; let offset = 0; while (offset < sequenceValue.length) { - // Silence false postive: accessing an octet in a Uint8Array at a particular index + // Silence false postive: accessing an octet in a Buffer at a particular index // is to be done with index operator: [index] // eslint-disable-next-line security/detect-object-injection const identifier = decodeIdentifier(sequenceValue[offset]); @@ -330,7 +319,7 @@ function decodeSequence(sequence: Uint8Array) { * @param bitStringValue - The ASN.1 bit string value * @returns Array of identifier-length-value triplets */ -function decodeBitStringWrappedSequenceValue(bitStringValue: Uint8Array) { +function decodeBitStringWrappedSequenceValue(bitStringValue: Buffer) { const wrappedSequence = bitStringValue.slice(1); return decodeSequence(wrappedSequence); } @@ -341,9 +330,9 @@ function decodeBitStringWrappedSequenceValue(bitStringValue: Uint8Array) { * @param publicKey - The ASN.1 DER-encoded public key * @returns Object with modulus (n) and exponent (e) */ -export function deconstructPublicKeyInDerFormat(publicKey: Uint8Array): { - n: Uint8Array; - e: Uint8Array; +export function deconstructPublicKeyInDerFormat(publicKey: Buffer): { + n: Buffer; + e: Buffer; } { const [, pubkeyinfo] = decodeSequence(publicKey); const [n, e] = decodeBitStringWrappedSequenceValue(pubkeyinfo.value); diff --git a/src/assert.ts b/src/assert.ts index e3762e5..e5534d5 100644 --- a/src/assert.ts +++ b/src/assert.ts @@ -19,7 +19,7 @@ export function assertStringEquals( actual: unknown, expected: string, errorConstructor: AssertionErrorConstructor = FailedAssertionError -): void { +): asserts actual is string { if (!actual) { throw new errorConstructor( `Missing ${name}. Expected: ${expected}`, @@ -58,7 +58,7 @@ export function assertStringArrayContainsString( actual: unknown, expected: string | string[], errorConstructor: AssertionErrorConstructor = FailedAssertionError -): void { +): asserts actual is string { if (!actual) { throw new errorConstructor( `Missing ${name}. ${expectationMessage(expected)}`, @@ -94,7 +94,7 @@ export function assertStringArraysOverlap( actual: unknown, expected: string | string[], errorConstructor: AssertionErrorConstructor = FailedAssertionError -): void { +): asserts actual is string[] { if (!actual) { throw new errorConstructor( `Missing ${name}. ${expectationMessage(expected)}`, diff --git a/src/https-node.ts b/src/https-node.ts index 9b1dec3..351ab0f 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -29,7 +29,7 @@ type FetchRequestOptions = RequestOptions & { export async function fetchJson( uri: string, requestOptions?: FetchRequestOptions, - data?: Buffer + data?: Uint8Array ): Promise { let responseTimeout: NodeJS.Timeout; return new Promise((resolve, reject) => { diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index fdd46a1..9ee434f 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -1,13 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { - join, - createVerify, - createPublicKey, - KeyObject, - uint8ArrayFromB64String, -} from "./node-web-compat.js"; import { SimpleJwksCache, JwksCache, @@ -17,14 +10,13 @@ import { isJwks, fetchJwk, } from "./jwk.js"; -import { constructPublicKeyInDerFormat } from "./asn1.js"; import { assertIsNotPromise, assertStringArrayContainsString, assertStringEquals, } from "./assert.js"; import { JwtHeader, JwtPayload } from "./jwt-model.js"; -import { Properties } from "./typing-util.js"; +import { AsAsync, Properties } from "./typing-util.js"; import { decomposeJwt, DecomposedJwt, validateJwtFields } from "./jwt.js"; import { JwkInvalidKtyError, @@ -37,6 +29,12 @@ import { ParameterValidationError, } from "./error.js"; import { JsonObject } from "./safe-json-parse.js"; +import { + transformJwkToKeyObjectSync, + verifySignatureSync, + transformJwkToKeyObjectAsync, + verifySignatureAsync, +} from "./node-web-compat.js"; /** Interface for JWT verification properties */ export interface VerifyProperties { @@ -149,36 +147,17 @@ export type JwtRsaVerifierMultiIssuer< true >; -/** - * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names - */ -export enum JwtSignatureAlgorithms { - RS256 = "RSA-SHA256", - RS384 = "RSA-SHA384", - RS512 = "RSA-SHA512", -} +export type JwsSignatureVerificationFunctionSync = (props: { + keyObject: GenericKeyObject; + alg: "RS256" | "RS384" | "RS512"; + jwsSigningInput: string; + signature: string; +}) => boolean; -/** - * Verify a JWTs signature agains a JWK. This function throws an error if the JWT is not valid - * - * @param header The decoded and JSON parsed JWT header - * @param headerB64 The JWT header in base64 encoded form - * @param payload The decoded and JSON parsed JWT payload - * @param payloadB64 The JWT payload in base64 encoded form - * @param signatureB64 The JWT signature in base64 encoded form - * @param jwk The JWK with which the JWT was signed - * @param jwkToKeyObjectTransformer Function to transform the JWK into a Node.js native key object - * @returns void - */ -function verifySignatureAgainstJwk( - header: JwtHeader, - headerB64: string, - payload: JwtPayload, - payloadB64: string, - signatureB64: string, - jwk: Jwk, - jwkToKeyObjectTransformer: JwkToKeyObjectTransformer = transformJwkToKeyObject -) { +export type JwsSignatureVerificationFunctionAsync = + AsAsync; + +function validateJwtHeaderAndJwk(header: JwtHeader, jwk: Jwk) { // Check JWK use assertStringEquals("JWK use", jwk.use, "sig", JwkInvalidUseError); @@ -202,19 +181,6 @@ function verifySignatureAgainstJwk( ["RS256", "RS384", "RS512"], JwtInvalidSignatureAlgorithmError ); - - // Convert JWK modulus and exponent into DER public key - const publicKey = jwkToKeyObjectTransformer(jwk, payload.iss, header.kid); - - // Verify the JWT signature - const valid = createVerify( - JwtSignatureAlgorithms[header.alg as keyof typeof JwtSignatureAlgorithms] - ) - .update(`${headerB64}.${payloadB64}`) - .verify(publicKey, signatureB64, "base64"); - if (!valid) { - throw new JwtInvalidSignatureError("Invalid signature"); - } } /** @@ -241,17 +207,9 @@ export async function verifyJwt( jwk: Jwk; }) => Promise | void; includeRawJwtInErrors?: boolean; - }, - jwkFetcher?: (jwksUri: string, decomposedJwt: DecomposedJwt) => Promise, - jwkToKeyObjectTransformer?: JwkToKeyObjectTransformer + } ): Promise { - return verifyDecomposedJwt( - decomposeJwt(jwt), - jwksUri, - options, - jwkFetcher, - jwkToKeyObjectTransformer - ); + return verifyDecomposedJwt(decomposeJwt(jwt), jwksUri, options); } /** @@ -283,23 +241,34 @@ async function verifyDecomposedJwt( jwksUri: string, decomposedJwt: DecomposedJwt ) => Promise = fetchJwk, - jwkToKeyObjectTransformer?: JwkToKeyObjectTransformer + transformJwkToKeyObjectFn: JwkToKeyObjectTransformerAsync = transformJwkToKeyObjectAsync ) { const { header, headerB64, payload, payloadB64, signatureB64 } = decomposedJwt; const jwk = await jwkFetcher(jwksUri, decomposedJwt); - verifySignatureAgainstJwk( - header, - headerB64, - payload, - payloadB64, - signatureB64, + validateJwtHeaderAndJwk(decomposedJwt.header, jwk); + + // Transform the JWK to native key format, that can be used with verifySignature + const keyObject = await transformJwkToKeyObjectFn( jwk, - jwkToKeyObjectTransformer + header.alg as "RS256" | "RS384" | "RS512", + payload.iss, + header.kid ); + // Verify the JWT signature + const valid = await verifySignatureAsync({ + jwsSigningInput: `${headerB64}.${payloadB64}`, + signature: signatureB64, + alg: header.alg as "RS256" | "RS384" | "RS512", + keyObject, + }); + if (!valid) { + throw new JwtInvalidSignatureError("Invalid signature"); + } + try { validateJwtFields(payload, options); if (options.customJwtCheck) { @@ -339,13 +308,13 @@ export function verifyJwtSync( }) => void; includeRawJwtInErrors?: boolean; }, - jwkToKeyObjectTransformer?: JwkToKeyObjectTransformer + transformJwkToKeyObjectFn: JwkToKeyObjectTransformerSync = transformJwkToKeyObjectSync ): JwtPayload { return verifyDecomposedJwtSync( decomposeJwt(jwt), jwkOrJwks, options, - jwkToKeyObjectTransformer + transformJwkToKeyObjectFn ); } @@ -373,7 +342,7 @@ function verifyDecomposedJwtSync( }) => void; includeRawJwtInErrors?: boolean; }, - jwkToKeyObjectTransformer?: JwkToKeyObjectTransformer + transformJwkToKeyObjectFn: JwkToKeyObjectTransformerSync ) { const { header, headerB64, payload, payloadB64, signatureB64 } = decomposedJwt; @@ -398,16 +367,27 @@ function verifyDecomposedJwtSync( ); } - verifySignatureAgainstJwk( - header, - headerB64, - payload, - payloadB64, - signatureB64, + validateJwtHeaderAndJwk(decomposedJwt.header, jwk); + + // Transform the JWK to native key format, that can be used with verifySignature + const keyObject = transformJwkToKeyObjectFn( jwk, - jwkToKeyObjectTransformer + header.alg as "RS256" | "RS384" | "RS512", + payload.iss, + header.kid ); + // Verify the JWT signature + const valid = verifySignatureSync({ + jwsSigningInput: `${headerB64}.${payloadB64}`, + signature: signatureB64, + alg: header.alg as "RS256" | "RS384" | "RS512", + keyObject, + }); + if (!valid) { + throw new JwtInvalidSignatureError("Invalid signature"); + } + try { validateJwtFields(payload, options); if (options.customJwtCheck) { @@ -573,7 +553,7 @@ export abstract class JwtRsaVerifierBase< decomposedJwt, jwk, verifyProperties, - this.publicKeyCache.transformJwkToKeyObject.bind(this.publicKeyCache) + this.publicKeyCache.transformJwkToKeyObjectSync.bind(this.publicKeyCache) ); } @@ -612,7 +592,7 @@ export abstract class JwtRsaVerifierBase< jwksUri, verifyProperties, this.jwksCache.getJwk.bind(this.jwksCache), - this.publicKeyCache.transformJwkToKeyObject.bind(this.publicKeyCache) + this.publicKeyCache.transformJwkToKeyObjectAsync.bind(this.publicKeyCache) ); } @@ -662,12 +642,10 @@ export abstract class JwtRsaVerifierBase< if (config.jwksUri) { return config as IssuerConfig & { jwksUri: string }; } - const issuerUri = new URL(config.issuer); + const issuerUri = new URL(config.issuer).pathname.replace(/\/$/, ""); return { - jwksUri: new URL( - join(issuerUri.pathname, "/.well-known/jwks.json"), - config.issuer - ).href, + jwksUri: new URL(`${issuerUri}/.well-known/jwks.json`, config.issuer) + .href, ...config, }; } @@ -723,67 +701,85 @@ export class JwtRsaVerifier< } } -/** Interface for functions that can transform a JWK into an RSA public key in Node.js native key object format */ -export type JwkToKeyObjectTransformer = ( +type GenericKeyObject = any; + +/** Interface for functions that can transform a JWK into an RSA public key in native key object format */ +export type JwkToKeyObjectTransformerSync = ( jwk: Jwk, + alg?: "RS256" | "RS384" | "RS512", issuer?: string, kid?: string -) => KeyObject; +) => GenericKeyObject; -/** - * Transform the JWK into an RSA public key in Node.js native key object format - * - * @param jwk: the JWK - * @returns the RSA public key in Node.js native key object format - */ -export const transformJwkToKeyObject: JwkToKeyObjectTransformer = (jwk: Jwk) => - createPublicKey({ - key: constructPublicKeyInDerFormat( - uint8ArrayFromB64String(jwk.n), - uint8ArrayFromB64String(jwk.e) - ), - format: "der", - type: "spki", - }); +export type JwkToKeyObjectTransformerAsync = ( + jwk: Jwk, + alg?: "RS256" | "RS384" | "RS512", + issuer?: string, + kid?: string +) => Promise; /** - * Class representing a cache of RSA public keys in Node.js native key object format + * Class representing a cache of RSA public keys in native key object format * - * Because it takes a bit of compute time to turn a JWK into Node.js native key object format, + * Because it takes a bit of compute time to turn a JWK into native key object format, * we want to cache this computation. */ export class KeyObjectCache { - private publicKeys: Map> = new Map(); + private publicKeys: Map> = new Map(); constructor( - public jwkToKeyObjectTransformer: JwkToKeyObjectTransformer = transformJwkToKeyObject + public transformJwkToKeyObjectSyncFn: JwkToKeyObjectTransformerSync = transformJwkToKeyObjectSync, + public transformJwkToKeyObjectAsyncFn: JwkToKeyObjectTransformerAsync = transformJwkToKeyObjectAsync ) {} /** - * Transform the JWK into an RSA public key in Node.js native key object format. + * Transform the JWK into an RSA public key in native key object format. * If the transformed JWK is already in the cache, it is returned from the cache instead. * The cache keys are: issuer, JWK kid (key id) * * @param jwk: the JWK * @param issuer: the issuer that uses the JWK for signing JWTs - * @returns the RSA public key in Node.js native key object format + * @returns the RSA public key in native key object format */ - transformJwkToKeyObject(jwk: Jwk, issuer?: Issuer): KeyObject { + transformJwkToKeyObjectSync(jwk: Jwk, issuer?: Issuer): GenericKeyObject { + if (!issuer) { + return this.transformJwkToKeyObjectSyncFn(jwk); + } + const fromCache = this.getFromCache(jwk, issuer); + if (fromCache) return fromCache; + const publicKey = this.transformJwkToKeyObjectSyncFn(jwk); + this.putInCache(jwk, issuer, publicKey); + return publicKey; + } + + async transformJwkToKeyObjectAsync( + jwk: Jwk, + issuer?: Issuer + ): Promise { if (!issuer) { - return this.jwkToKeyObjectTransformer(jwk); + return this.transformJwkToKeyObjectAsyncFn(jwk); } + const fromCache = this.getFromCache(jwk, issuer); + if (fromCache) return fromCache; + const publicKey = await this.transformJwkToKeyObjectAsyncFn(jwk); + this.putInCache(jwk, issuer, publicKey); + return publicKey; + } + + private getFromCache(jwk: Jwk, issuer: Issuer) { const cachedPublicKey = this.publicKeys.get(issuer)?.get(jwk.kid); if (cachedPublicKey) { return cachedPublicKey; } - const publicKey = this.jwkToKeyObjectTransformer(jwk); + } + + private putInCache(jwk: Jwk, issuer: string, publicKey: GenericKeyObject) { const cachedIssuer = this.publicKeys.get(issuer); if (cachedIssuer) { cachedIssuer.set(jwk.kid, publicKey); } else { this.publicKeys.set(issuer, new Map([[jwk.kid, publicKey]])); } - return publicKey; } clearCache(issuer: Issuer): void { diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts new file mode 100644 index 0000000..7a5cd99 --- /dev/null +++ b/src/node-web-compat-node.ts @@ -0,0 +1,61 @@ +"use strict"; +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { createPublicKey, createVerify } from "crypto"; +import { + JwkToKeyObjectTransformerSync, + JwsSignatureVerificationFunctionSync, +} from "./jwt-rsa"; +import { Jwk } from "./jwk.js"; +import { constructPublicKeyInDerFormat } from "./asn1.js"; +export { fetchJson } from "./https-node.js"; +import { wrapResultInPromise } from "./typing-util.js"; + +/** + * Transform the JWK into an RSA public key in Node.js native key object format + * + * @param jwk: the JWK + * @returns the RSA public key in Node.js native key object format + */ +export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = ( + jwk: Jwk +) => + createPublicKey({ + key: constructPublicKeyInDerFormat( + Buffer.from(jwk.n, "base64"), + Buffer.from(jwk.e, "base64") + ), + format: "der", + type: "spki", + }); + +export const transformJwkToKeyObjectAsync = wrapResultInPromise( + transformJwkToKeyObjectSync +); + +/** + * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names + */ +export enum JwtSignatureAlgorithms { + RS256 = "RSA-SHA256", + RS384 = "RSA-SHA384", + RS512 = "RSA-SHA512", +} + +export const verifySignatureSync: JwsSignatureVerificationFunctionSync = ({ + alg, + keyObject, + jwsSigningInput, + signature, +}) => { + // eslint-disable-next-line security/detect-object-injection + return createVerify(JwtSignatureAlgorithms[alg]) + .update(jwsSigningInput) + .verify(keyObject, signature, "base64"); +}; + +export const verifySignatureAsync = wrapResultInPromise(verifySignatureSync); + +export const utf8StringFromB64String = (b64: string): string => + Buffer.from(b64, "base64").toString("utf8"); diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts new file mode 100644 index 0000000..bdca02b --- /dev/null +++ b/src/node-web-compat-web.ts @@ -0,0 +1,140 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { + JwkToKeyObjectTransformerSync, + JwkToKeyObjectTransformerAsync, + JwsSignatureVerificationFunctionSync, + JwsSignatureVerificationFunctionAsync, +} from "./jwt-rsa"; +import { Jwk } from "./jwk"; +import { Json } from "./safe-json-parse"; + +export const fetchJson: ( + uri: string, + requestOptions?: Record, + data?: Uint8Array +) => Promise = (uri, requestOptions, data) => + // eslint-disable-next-line no-undef + fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); + +export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = + () => { + throw new Error("Sync not implemented"); + }; +export const verifySignatureSync: JwsSignatureVerificationFunctionSync = () => { + throw new Error("Sync not implemented"); +}; + +/** + * Transform the JWK into an RSA public key in WebCrypto native key object format + * + * @param jwk: the JWK + * @returns the RSA public key in EbCrypto native key object format + */ +export const transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync = ( + jwk: Jwk +) => { + return window.crypto.subtle.importKey( + "jwk", + jwk, + { + name: "RSASSA-PKCS1-v1_5", + hash: { + name: JwtSignatureAlgorithmsWebCrypto[ + jwk.alg as keyof typeof JwtSignatureAlgorithmsWebCrypto + ], + }, + }, + false, + ["verify"] + ); +}; + +/** + * Enum to map supported JWT signature algorithms with WebCrypto message digest algorithm names + */ +enum JwtSignatureAlgorithmsWebCrypto { + RS256 = "SHA-256", + RS384 = "SHA-384", + RS512 = "SHA-512", +} + +export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ + alg, + jwsSigningInput, + keyObject, + signature, +}) => + window.crypto.subtle.verify( + // eslint-disable-next-line security/detect-object-injection + JwtSignatureAlgorithmsWebCrypto[alg], + keyObject, + fromBase64url(signature), + new TextEncoder().encode(jwsSigningInput) + ); + +export const utf8StringFromB64String = (b64: string): string => { + return new TextDecoder().decode(fromBase64url(b64)); +}; + +// modified version of MIT licensed https://github.com/niklasvh/base64-arraybuffer +// TODO reimplement +/** +Copyright (c) 2012 Niklas von Hertzen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + */ +const chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; +const lookup = new Uint8Array(256); +for (let i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; +} +export const fromBase64url = (base64url: string): ArrayBuffer => { + const len = base64url.length; + let bufferLength = len * 0.75, + i, + p = 0, + encoded1, + encoded2, + encoded3, + encoded4; + if (base64url[len - 1] === "=") { + bufferLength--; + if (base64url[len - 2] === "=") { + bufferLength--; + } + } + const arraybuffer = new ArrayBuffer(bufferLength), + bytes = new Uint8Array(arraybuffer); + for (i = 0; i < len; i += 4) { + encoded1 = lookup[base64url.charCodeAt(i)]; + encoded2 = lookup[base64url.charCodeAt(i + 1)]; + encoded3 = lookup[base64url.charCodeAt(i + 2)]; + encoded4 = lookup[base64url.charCodeAt(i + 3)]; + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + return arraybuffer; +}; diff --git a/src/node-web-compat.cjs b/src/node-web-compat.cjs deleted file mode 100644 index d315f57..0000000 --- a/src/node-web-compat.cjs +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Compatibility layer, to make this lib work in both Node.js and Web -/* eslint-disable @typescript-eslint/no-var-requires */ - -Object.defineProperty(exports, "__esModule", { value: true }); -const concatUint8Arrays = (...arrays) => Buffer.concat(arrays); -const numberFromUint8ArrayBE = (uint8Array, length) => - Buffer.from(uint8Array).readUIntBE(0, length); -const uint8ArrayFromB64String = (b64) => Buffer.from(b64, "base64"); -const { createVerify, createPublicKey } = require("crypto"); -const { join } = require("path"); -const { fetchJson } = require("./https-node.js"); -const utf8StringFromB64String = (b64) => - Buffer.from(b64, "base64").toString("utf8"); - -module.exports = { - concatUint8Arrays, - numberFromUint8ArrayBE, - uint8ArrayFromB64String, - createVerify, - createPublicKey, - join, - fetchJson, - utf8StringFromB64String, -}; diff --git a/src/node-web-compat.mjs b/src/node-web-compat.mjs deleted file mode 100644 index 59212ea..0000000 --- a/src/node-web-compat.mjs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Compatibility layer, to make this lib work in both Node.js and Web - -const runningInNode = (function () { - try { - return ( - typeof process !== undefined && - process.versions != null && - process.versions.node != null - ); - } catch { - return false; - } -})(); -const runningInBrowser = (function () { - try { - // eslint-disable-next-line no-undef - return typeof window !== undefined && typeof window.document !== undefined; - } catch { - return false; - } -})(); - -export let createVerify, - createPublicKey, - join, - concatUint8Arrays, - numberFromUint8ArrayBE, - uint8ArrayFromB64String, - fetchJson, - utf8StringFromB64String; - -if (runningInNode) { - concatUint8Arrays = (...arrays) => Buffer.concat(arrays); - numberFromUint8ArrayBE = (uint8Array, length) => - Buffer.from(uint8Array).readUIntBE(0, length); - uint8ArrayFromB64String = (b64) => Buffer.from(b64, "base64"); - ({ createVerify, createPublicKey } = await import("crypto")); - ({ join } = await import("path")); - ({ fetchJson } = await import("./https-node.js")); - utf8StringFromB64String = (b64) => - Buffer.from(b64, "base64").toString("utf8"); -} else if (runningInBrowser) { - concatUint8Arrays = (...arrays) => { - const concatenatedLength = arrays.reduce( - (length, array) => length + array.length, - 0 - ); - const concatenated = new Uint8Array(concatenatedLength); - arrays.reduce((currentLength, array) => { - concatenated.set(array, currentLength); - return currentLength + array.length; - }, 0); - return concatenated; - }; - fetchJson = (uri, requestOptions, data) => - // eslint-disable-next-line no-undef - fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); - join = (args) => args.map((arg) => arg.replace("/$", "")).join("/"); - // eslint-disable-next-line no-undef - utf8StringFromB64String = (b64) => window.atob(b64); - uint8ArrayFromB64String = (b64) => { - throw new Error("Not yet implemented"); - }; -} else { - throw new Error( - "Unknown environment: only Node.js and Browser are supported" - ); -} diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 6a9a9c0..e944923 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -4,33 +4,12 @@ // Compatibility layer, to make this lib work in both Node.js and Web import { Json } from "./safe-json-parse.js"; - -// Crypto functions -export let createVerify: (algorithm: string) => { - update: (payload: string) => { - verify: ( - keyObject: KeyObject, - signature: string, - encoding: "base64" - ) => boolean; - }; -}; -export let createPublicKey: (_: { - key: Uint8Array; - format: "der"; - type: "spki"; -}) => KeyObject; -export type KeyObject = { - export: (_: { format: "der"; type: "spki" }) => unknown; -}; - -// Path functions -export let join: (...segments: string[]) => string; - -// Buffer (Uint8) functions -export let concatUint8Arrays: (...arrays: Uint8Array[]) => Uint8Array; -export let numberFromUint8ArrayBE: (_: Uint8Array, length: number) => number; -export let uint8ArrayFromB64String: (_: string) => Uint8Array; +import { + JwkToKeyObjectTransformerSync, + JwkToKeyObjectTransformerAsync, + JwsSignatureVerificationFunctionSync, + JwsSignatureVerificationFunctionAsync, +} from "./jwt-rsa"; // Convert base64 to UTF8 export let utf8StringFromB64String: (b64: string) => string; @@ -41,3 +20,8 @@ export let fetchJson: ( requestOptions?: Record, data?: Uint8Array ) => Promise; + +export let transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; +export let transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync; +export let verifySignatureSync: JwsSignatureVerificationFunctionSync; +export let verifySignatureAsync: JwsSignatureVerificationFunctionAsync; diff --git a/src/typing-util.ts b/src/typing-util.ts index cf260db..7a8f4fc 100644 --- a/src/typing-util.ts +++ b/src/typing-util.ts @@ -53,3 +53,16 @@ export type Properties = StillToProvideProperties< Provided > & Partial; + +export type AsAsync any> = ( + ...args: Parameters +) => Promise>; + +export function wrapResultInPromise any>( + toWrap: T +) { + return function (...args: Parameters): Promise> { + const res = toWrap(...args) as ReturnType; + return Promise.resolve(res); + }; +} diff --git a/tests/.gitignore b/tests/.gitignore index 3532104..61afee1 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1 +1 @@ -!jest-ts-js-resolver.js +!jest-ts-js-resolver*.js diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index 406b8d6..f47f33e 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -6,7 +6,7 @@ const srcPath = path.join(__dirname, "..", "src"); module.exports = (request, options) => { if (options.basedir.startsWith(srcPath)) { if (request.endsWith("node-web-compat.js")) { - request = request.replace(/\.js$/, ".cjs"); + request = request.replace("node-web-compat.js", "node-web-compat-node.ts"); } else { request = request.replace(/\.js$/, ".ts"); } diff --git a/tests/unit/jwt-rsa.test.ts b/tests/unit/jwt-rsa.test.ts index f452614..eceedd5 100644 --- a/tests/unit/jwt-rsa.test.ts +++ b/tests/unit/jwt-rsa.test.ts @@ -28,8 +28,8 @@ import { verifyJwt, verifyJwtSync, KeyObjectCache, - transformJwkToKeyObject, } from "../../src/jwt-rsa"; +import { transformJwkToKeyObjectSync } from "../../src/node-web-compat-node"; import { JwksCache, Jwks } from "../../src/jwk"; import { performance } from "perf_hooks"; @@ -912,20 +912,18 @@ describe("unit tests jwt verifier", () => { const header = { alg: "RS256", kid: keypair.jwk.kid }; const payload = { hello: "world", exp: exp.valueOf() / 1000 }; const signedJwt = signJwt(header, payload, keypair.privateKey); + mockHttpsUri("https://example.com/some/path/to/jwks.json", { + responsePayload: JSON.stringify(keypair.jwks), + }); const statement = () => - verifyJwt( - signedJwt, - "https://example.com/some/path/to/jwks.json", - { - audience: null, - issuer: null, - includeRawJwtInErrors: true, - }, - async () => Promise.resolve(keypair.jwk) - ); + verifyJwt(signedJwt, "https://example.com/some/path/to/jwks.json", { + audience: null, + issuer: null, + includeRawJwtInErrors: true, + }); expect.assertions(2); - await expect(statement).rejects.toThrow(JwtExpiredError); return statement().catch((err) => { + expect(err).toBeInstanceOf(JwtExpiredError); expect((err as JwtInvalidClaimError).rawJwt).toEqual({ header, payload, @@ -937,19 +935,17 @@ describe("unit tests jwt verifier", () => { const header = { alg: "RS256", kid: keypair.jwk.kid }; const payload = { hello: "world", exp }; const signedJwt = signJwt(header, payload, keypair.privateKey); + mockHttpsUri("https://example.com/some/path/to/jwks.json", { + responsePayload: JSON.stringify(keypair.jwks), + }); const statement = () => - verifyJwt( - signedJwt, - "https://example.com/some/path/to/jwks.json", - { - audience: null, - issuer: null, - }, - async () => Promise.resolve(keypair.jwk) - ); + verifyJwt(signedJwt, "https://example.com/some/path/to/jwks.json", { + audience: null, + issuer: null, + }); expect.assertions(2); - await expect(statement).rejects.toThrow(JwtExpiredError); return statement().catch((err) => { + expect(err).toBeInstanceOf(JwtExpiredError); expect((err as JwtInvalidClaimError).rawJwt).toBe(undefined); }); }); @@ -959,25 +955,23 @@ describe("unit tests jwt verifier", () => { const exp = Date.now() / 1000 + 10; // Expires in 10 secs const payload = { hello: "world", exp }; const signedJwt = signJwt(header, payload, keypair.privateKey); + mockHttpsUri("https://example.com/some/path/to/jwks.json", { + responsePayload: JSON.stringify(keypair.jwks), + }); const statement = () => - verifyJwt( - signedJwt, - "https://example.com/some/path/to/jwks.json", - { - audience: null, - issuer: null, - includeRawJwtInErrors: true, - customJwtCheck: () => { - throw new CustomError("Oops", "actualValue"); - }, + verifyJwt(signedJwt, "https://example.com/some/path/to/jwks.json", { + audience: null, + issuer: null, + includeRawJwtInErrors: true, + customJwtCheck: () => { + throw new CustomError("Oops", "actualValue"); }, - async () => Promise.resolve(keypair.jwk) - ); + }); expect.assertions(2); - await expect(statement).rejects.toThrow(CustomError); try { await statement(); } catch (err) { + expect(err).toBeInstanceOf(CustomError); expect((err as CustomError).rawJwt).toEqual({ header, payload, @@ -1465,29 +1459,35 @@ describe("unit tests jwt verifier", () => { describe("public key cache", () => { test("happy flow with cache", () => { - const jwkToKeyObjectTransformerSpy = jest.fn(transformJwkToKeyObject); + const jwkToKeyObjectTransformerSpy = jest.fn(transformJwkToKeyObjectSync); const pubkeyCache = new KeyObjectCache(jwkToKeyObjectTransformerSpy); const issuer = "testissuer"; - const pubkey = pubkeyCache.transformJwkToKeyObject(keypair.jwk, issuer); + const pubkey = pubkeyCache.transformJwkToKeyObjectSync( + keypair.jwk, + issuer + ); expect(pubkey.export({ format: "der", type: "spki" })).toEqual( keypair.publicKeyDer ); - pubkeyCache.transformJwkToKeyObject(keypair.jwk, "testissuer"); // same JWK, same issuer, transform from cache - pubkeyCache.transformJwkToKeyObject(keypair.jwk, "othertestissuer"); + pubkeyCache.transformJwkToKeyObjectSync(keypair.jwk, "testissuer"); // same JWK, same issuer, transform from cache + pubkeyCache.transformJwkToKeyObjectSync(keypair.jwk, "othertestissuer"); // Using a different JWK (with other kid) forces the transformer to run expect(jwkToKeyObjectTransformerSpy).toHaveBeenCalledTimes(2); const otherKeyPair = generateKeyPair({ kid: "otherkid" }); - pubkeyCache.transformJwkToKeyObject(otherKeyPair.jwk, "testissuer"); - pubkeyCache.transformJwkToKeyObject(otherKeyPair.jwk, "testissuer"); // same JWK, same issuer, transform from cache - pubkeyCache.transformJwkToKeyObject(otherKeyPair.jwk, "othertestissuer"); + pubkeyCache.transformJwkToKeyObjectSync(otherKeyPair.jwk, "testissuer"); + pubkeyCache.transformJwkToKeyObjectSync(otherKeyPair.jwk, "testissuer"); // same JWK, same issuer, transform from cache + pubkeyCache.transformJwkToKeyObjectSync( + otherKeyPair.jwk, + "othertestissuer" + ); expect(jwkToKeyObjectTransformerSpy).toHaveBeenCalledTimes(4); pubkeyCache.clearCache(issuer); - pubkeyCache.transformJwkToKeyObject(otherKeyPair.jwk, "testissuer"); // Cache is empty, so must be regenerated + pubkeyCache.transformJwkToKeyObjectSync(otherKeyPair.jwk, "testissuer"); // Cache is empty, so must be regenerated expect(jwkToKeyObjectTransformerSpy).toHaveBeenCalledTimes(5); }); test("no issuer and kid", () => { const pubkeyCache = new KeyObjectCache(); - const pubkey = pubkeyCache.transformJwkToKeyObject(keypair.jwk); + const pubkey = pubkeyCache.transformJwkToKeyObjectSync(keypair.jwk); expect(pubkey.export({ format: "der", type: "spki" })).toEqual( keypair.publicKeyDer ); diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index 87e99c0..3da639d 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -3,7 +3,7 @@ import nock from "nock"; import { URL } from "url"; import { deconstructPublicKeyInDerFormat } from "../../src/asn1"; import { Jwk, Jwks } from "../../src/jwk"; -import { JwtSignatureAlgorithms } from "../../src/jwt-rsa"; +import { JwtSignatureAlgorithms } from "../../src/node-web-compat-node"; export function disallowAllRealNetworkTraffic() { nock.disableNetConnect(); diff --git a/tests/web/index.html b/tests/web/index.html new file mode 100644 index 0000000..f9e8c85 --- /dev/null +++ b/tests/web/index.html @@ -0,0 +1,29 @@ + + + + + aws-jwt-verify + + + +

Let's verify some JWTs!

+ + From 6bc1aa5c7d7e3b07411b18c36fb7d87a84ae5b2a Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 24 Feb 2022 17:33:42 +0100 Subject: [PATCH 11/59] Fix verify call in web --- src/node-web-compat-web.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index bdca02b..056768f 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -68,7 +68,9 @@ export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ }) => window.crypto.subtle.verify( // eslint-disable-next-line security/detect-object-injection - JwtSignatureAlgorithmsWebCrypto[alg], + { + name: "RSASSA-PKCS1-v1_5", + }, keyObject, fromBase64url(signature), new TextEncoder().encode(jwsSigningInput) From 97fc706b26654e0cddf7b9dfa53add66e8ebcfc4 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 11:43:05 +0100 Subject: [PATCH 12/59] Tweaks for web --- package.json | 7 ++- src/error.ts | 6 +++ src/node-web-compat-node.ts | 2 +- src/node-web-compat-web.ts | 98 ++++++++++++------------------------- src/node-web-compat.ts | 2 + tests/unit/test-util.ts | 7 ++- tests/web/index.html | 6 ++- 7 files changed, 56 insertions(+), 72 deletions(-) diff --git a/package.json b/package.json index 83c431a..bfd31c5 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "url": "https://aws.amazon.com" }, "main": "dist/cjs/index.js", + "browser": "dist/web/bundle.js", "type": "commonjs", "types": "index.d.ts", "module": "dist/esm/index.js", @@ -79,6 +80,7 @@ "@types/jest": "^27.0.2", "@typescript-eslint/eslint-plugin": "^4.32.0", "@typescript-eslint/parser": "^4.32.0", + "esbuild": "^0.14.23", "eslint": "^7.32.0", "eslint-plugin-security": "^1.4.0", "jest": "^27.2.4", @@ -93,9 +95,10 @@ "scripts": { "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && mv dist/cjs/node-web-compat-node.js dist/cjs/node-web-compat.js && rm dist/cjs/node-web-compat-web.js", "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json && mv dist/esm/node-web-compat-node.js dist/esm/node-web-compat.js && rm dist/esm/node-web-compat-web.js", - "dist:web": "tsc --module ES2020 --outDir dist/web && echo '{\"type\":\"module\"}' > dist/esm/package.json && mv dist/web/node-web-compat-web.js dist/web/node-web-compat.js && rm dist/web/node-web-compat-node.js", + "dist:web": "tsc --module ES2020 --outDir dist/web && echo '{\"type\":\"module\"}' > dist/web/package.json && mv dist/web/node-web-compat-web.js dist/web/node-web-compat.js && rm dist/web/node-web-compat-node.js", + "dist:web-bundle": "cd dist/web && esbuild index.js --bundle --outfile=bundle.js --sourcemap --format=esm && ls *.js | grep -v bundle | xargs rm", "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly", - "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:web && npm run dist:types", + "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:web && npm run dist:web-bundle && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", "lint": "eslint . --fix --ignore-path .gitignore --max-warnings 0", "pack-for-tests": "rm -f aws-jwt-verify.tgz 'aws-jwt-verify-?.?.?.tgz' && npm pack && mv aws-jwt-verify-*.tgz aws-jwt-verify.tgz", diff --git a/src/error.ts b/src/error.ts index 256978a..26db294 100644 --- a/src/error.ts +++ b/src/error.ts @@ -139,3 +139,9 @@ export class FetchError extends JwtBaseError { } export class NonRetryableFetchError extends FetchError {} + +/** + * Web compatibility errors + */ + +export class NotSupportedError extends JwtBaseError {} diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 7a5cd99..f7bd160 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -37,7 +37,7 @@ export const transformJwkToKeyObjectAsync = wrapResultInPromise( /** * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names */ -export enum JwtSignatureAlgorithms { +enum JwtSignatureAlgorithms { RS256 = "RSA-SHA256", RS384 = "RSA-SHA384", RS512 = "RSA-SHA512", diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 056768f..0f34564 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -9,21 +9,25 @@ import { } from "./jwt-rsa"; import { Jwk } from "./jwk"; import { Json } from "./safe-json-parse"; +import { NotSupportedError } from "./error"; export const fetchJson: ( uri: string, requestOptions?: Record, data?: Uint8Array ) => Promise = (uri, requestOptions, data) => - // eslint-disable-next-line no-undef fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = () => { - throw new Error("Sync not implemented"); + throw new NotSupportedError( + "Synchronously transforming a JWK into a key object is not supported in the browser" + ); }; export const verifySignatureSync: JwsSignatureVerificationFunctionSync = () => { - throw new Error("Sync not implemented"); + throw new NotSupportedError( + "Synchronously verifying a JWT signature is not supported in the browser" + ); }; /** @@ -61,7 +65,6 @@ enum JwtSignatureAlgorithmsWebCrypto { } export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ - alg, jwsSigningInput, keyObject, signature, @@ -72,71 +75,34 @@ export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ name: "RSASSA-PKCS1-v1_5", }, keyObject, - fromBase64url(signature), + bufferFromBase64url(signature), new TextEncoder().encode(jwsSigningInput) ); export const utf8StringFromB64String = (b64: string): string => { - return new TextDecoder().decode(fromBase64url(b64)); + return new TextDecoder().decode(bufferFromBase64url(b64)); }; -// modified version of MIT licensed https://github.com/niklasvh/base64-arraybuffer -// TODO reimplement -/** -Copyright (c) 2012 Niklas von Hertzen - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - */ -const chars = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; -const lookup = new Uint8Array(256); -for (let i = 0; i < chars.length; i++) { - lookup[chars.charCodeAt(i)] = i; -} -export const fromBase64url = (base64url: string): ArrayBuffer => { - const len = base64url.length; - let bufferLength = len * 0.75, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; - if (base64url[len - 1] === "=") { - bufferLength--; - if (base64url[len - 2] === "=") { - bufferLength--; - } - } - const arraybuffer = new ArrayBuffer(bufferLength), - bytes = new Uint8Array(arraybuffer); - for (i = 0; i < len; i += 4) { - encoded1 = lookup[base64url.charCodeAt(i)]; - encoded2 = lookup[base64url.charCodeAt(i + 1)]; - encoded3 = lookup[base64url.charCodeAt(i + 2)]; - encoded4 = lookup[base64url.charCodeAt(i + 3)]; - bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); - bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); - bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); - } - return arraybuffer; -}; +const bufferFromBase64url = (function () { + const map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" + .split("") + .reduce( + (acc, char, index) => Object.assign(acc, { [char.charCodeAt(0)]: index }), + {} as { [key: number]: number } + ); + return function (base64url: string) { + const paddingLength = base64url.match(/^.+(=?=?)$/)![1].length; + const bufferLength = (base64url.length * 3) / 4 - paddingLength; + let first: number, second: number, third: number, fourth: number; + return base64url.match(/.{1,4}/g)!.reduce((acc, chunk, index) => { + first = map[chunk.charCodeAt(0)]; + second = map[chunk.charCodeAt(1)]; + third = map[chunk.charCodeAt(2)]; + fourth = map[chunk.charCodeAt(3)]; + acc[3 * index] = (first << 2) | (second >> 4); + acc[3 * index + 1] = ((second & 15) << 4) | (third >> 2); + acc[3 * index + 2] = ((third & 3) << 6) | (fourth & 63); + return acc; + }, new Uint8Array(bufferLength)); + }; +})(); diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index e944923..db7e029 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 // // Compatibility layer, to make this lib work in both Node.js and Web +// This file just contains stubs for typings, in the dist process this file is +// overwritten with either the Node.js or Web implementation import { Json } from "./safe-json-parse.js"; import { diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index 3da639d..76cef7d 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -3,7 +3,6 @@ import nock from "nock"; import { URL } from "url"; import { deconstructPublicKeyInDerFormat } from "../../src/asn1"; import { Jwk, Jwks } from "../../src/jwk"; -import { JwtSignatureAlgorithms } from "../../src/node-web-compat-node"; export function disallowAllRealNetworkTraffic() { nock.disableNetConnect(); @@ -57,6 +56,12 @@ export function publicKeyToJwk( } as Jwk; } +enum JwtSignatureAlgorithms { + RS256 = "RSA-SHA256", + RS384 = "RSA-SHA384", + RS512 = "RSA-SHA512", +} + export function signJwt( header: { kid?: string; alg?: string; [key: string]: any }, payload: { [key: string]: any }, diff --git a/tests/web/index.html b/tests/web/index.html index f9e8c85..c4eaf0d 100644 --- a/tests/web/index.html +++ b/tests/web/index.html @@ -6,7 +6,7 @@

Let's verify some JWTs!

From 04ab8ba9517f8b9ce167b9a863887e36e0611428 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 12:01:28 +0100 Subject: [PATCH 13/59] Typing tweaks --- package-lock.json | 499 ++++++++++++++++++++++++++++++++++++ src/assert.ts | 20 +- src/cognito-verifier.ts | 2 +- src/error.ts | 12 +- src/jwt-rsa.ts | 4 +- src/node-web-compat-node.ts | 4 +- src/node-web-compat-web.ts | 2 +- 7 files changed, 524 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396bb6b..c30e42d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@types/jest": "^27.0.2", "@typescript-eslint/eslint-plugin": "^4.32.0", "@typescript-eslint/parser": "^4.32.0", + "esbuild": "^0.14.23", "eslint": "^7.32.0", "eslint-plugin-security": "^1.4.0", "jest": "^27.2.4", @@ -2245,6 +2246,344 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", + "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.23", + "esbuild-darwin-64": "0.14.23", + "esbuild-darwin-arm64": "0.14.23", + "esbuild-freebsd-64": "0.14.23", + "esbuild-freebsd-arm64": "0.14.23", + "esbuild-linux-32": "0.14.23", + "esbuild-linux-64": "0.14.23", + "esbuild-linux-arm": "0.14.23", + "esbuild-linux-arm64": "0.14.23", + "esbuild-linux-mips64le": "0.14.23", + "esbuild-linux-ppc64le": "0.14.23", + "esbuild-linux-riscv64": "0.14.23", + "esbuild-linux-s390x": "0.14.23", + "esbuild-netbsd-64": "0.14.23", + "esbuild-openbsd-64": "0.14.23", + "esbuild-sunos-64": "0.14.23", + "esbuild-windows-32": "0.14.23", + "esbuild-windows-64": "0.14.23", + "esbuild-windows-arm64": "0.14.23" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", + "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", + "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", + "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", + "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", + "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", + "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", + "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", + "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", + "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", + "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", + "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", + "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", + "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", + "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", + "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", + "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", + "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", + "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", + "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -8812,6 +9151,166 @@ "is-symbol": "^1.0.2" } }, + "esbuild": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", + "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.14.23", + "esbuild-darwin-64": "0.14.23", + "esbuild-darwin-arm64": "0.14.23", + "esbuild-freebsd-64": "0.14.23", + "esbuild-freebsd-arm64": "0.14.23", + "esbuild-linux-32": "0.14.23", + "esbuild-linux-64": "0.14.23", + "esbuild-linux-arm": "0.14.23", + "esbuild-linux-arm64": "0.14.23", + "esbuild-linux-mips64le": "0.14.23", + "esbuild-linux-ppc64le": "0.14.23", + "esbuild-linux-riscv64": "0.14.23", + "esbuild-linux-s390x": "0.14.23", + "esbuild-netbsd-64": "0.14.23", + "esbuild-openbsd-64": "0.14.23", + "esbuild-sunos-64": "0.14.23", + "esbuild-windows-32": "0.14.23", + "esbuild-windows-64": "0.14.23", + "esbuild-windows-arm64": "0.14.23" + } + }, + "esbuild-android-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", + "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", + "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", + "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", + "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", + "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", + "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", + "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", + "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", + "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", + "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", + "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", + "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", + "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", + "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", + "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", + "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", + "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", + "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", + "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", diff --git a/src/assert.ts b/src/assert.ts index e5534d5..69da6e3 100644 --- a/src/assert.ts +++ b/src/assert.ts @@ -14,12 +14,12 @@ import { AssertionErrorConstructor, FailedAssertionError } from "./error.js"; * @param expected - The expected value * @param errorConstructor - Constructor for the concrete error to be thrown */ -export function assertStringEquals( +export function assertStringEquals( name: string, actual: unknown, - expected: string, + expected: T, errorConstructor: AssertionErrorConstructor = FailedAssertionError -): asserts actual is string { +): asserts actual is T { if (!actual) { throw new errorConstructor( `Missing ${name}. Expected: ${expected}`, @@ -53,12 +53,14 @@ export function assertStringEquals( * @param errorConstructor - Constructor for the concrete error to be thrown * a string here as well, which will mean an array with just that string */ -export function assertStringArrayContainsString( +export function assertStringArrayContainsString< + T extends string | Readonly +>( name: string, actual: unknown, - expected: string | string[], + expected: T, errorConstructor: AssertionErrorConstructor = FailedAssertionError -): asserts actual is string { +): asserts actual is T extends Readonly ? T[number] : T { if (!actual) { throw new errorConstructor( `Missing ${name}. ${expectationMessage(expected)}`, @@ -92,9 +94,9 @@ export function assertStringArrayContainsString( export function assertStringArraysOverlap( name: string, actual: unknown, - expected: string | string[], + expected: string | Readonly, errorConstructor: AssertionErrorConstructor = FailedAssertionError -): asserts actual is string[] { +): asserts actual is string | Readonly { if (!actual) { throw new errorConstructor( `Missing ${name}. ${expectationMessage(expected)}`, @@ -137,7 +139,7 @@ export function assertStringArraysOverlap( * * @param expected - The expected value. */ -function expectationMessage(expected: string | string[]) { +function expectationMessage(expected: string | Readonly) { if (Array.isArray(expected)) { if (expected.length > 1) { return `Expected one of: ${expected.join(", ")}`; diff --git a/src/cognito-verifier.ts b/src/cognito-verifier.ts index c1631fc..16c5261 100644 --- a/src/cognito-verifier.ts +++ b/src/cognito-verifier.ts @@ -168,7 +168,7 @@ function validateCognitoJwtFields( assertStringArrayContainsString( "Token use", payload.token_use, - ["id", "access"], + ["id", "access"] as const, CognitoJwtInvalidTokenUseError ); if (options.tokenUse !== null) { diff --git a/src/error.ts b/src/error.ts index 26db294..5cf7037 100644 --- a/src/error.ts +++ b/src/error.ts @@ -14,7 +14,7 @@ export abstract class JwtBaseError extends Error {} interface AssertionError extends JwtBaseError { failedAssertion: { actual: unknown; - expected?: string | string[]; + expected?: string | Readonly; }; } @@ -25,7 +25,7 @@ export interface AssertionErrorConstructor { new ( msg: string, actual: unknown, - expected?: string | string[] + expected?: string | Readonly ): AssertionError; } @@ -35,9 +35,13 @@ export interface AssertionErrorConstructor { export class FailedAssertionError extends JwtBaseError { failedAssertion: { actual: unknown; - expected?: string | string[]; + expected?: string | Readonly; }; - constructor(msg: string, actual: unknown, expected?: string | string[]) { + constructor( + msg: string, + actual: unknown, + expected?: string | Readonly + ) { super(msg); this.failedAssertion = { actual, diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index 9ee434f..04de085 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -178,7 +178,7 @@ function validateJwtHeaderAndJwk(header: JwtHeader, jwk: Jwk) { assertStringArrayContainsString( "JWT signature algorithm", header.alg, - ["RS256", "RS384", "RS512"], + ["RS256", "RS384", "RS512"] as const, JwtInvalidSignatureAlgorithmError ); } @@ -701,7 +701,7 @@ export class JwtRsaVerifier< } } -type GenericKeyObject = any; +type GenericKeyObject = NonNullable; /** Interface for functions that can transform a JWK into an RSA public key in native key object format */ export type JwkToKeyObjectTransformerSync = ( diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index f7bd160..100c614 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -2,7 +2,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { createPublicKey, createVerify } from "crypto"; +import { createPublicKey, createVerify, KeyObject } from "crypto"; import { JwkToKeyObjectTransformerSync, JwsSignatureVerificationFunctionSync, @@ -52,7 +52,7 @@ export const verifySignatureSync: JwsSignatureVerificationFunctionSync = ({ // eslint-disable-next-line security/detect-object-injection return createVerify(JwtSignatureAlgorithms[alg]) .update(jwsSigningInput) - .verify(keyObject, signature, "base64"); + .verify(keyObject as KeyObject, signature, "base64"); }; export const verifySignatureAsync = wrapResultInPromise(verifySignatureSync); diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 0f34564..24c0c71 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -74,7 +74,7 @@ export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ { name: "RSASSA-PKCS1-v1_5", }, - keyObject, + keyObject as CryptoKey, bufferFromBase64url(signature), new TextEncoder().encode(jwsSigningInput) ); From dc6ac15ae078e45fd02bed9a31f31b58952d0e7a Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 12:10:06 +0100 Subject: [PATCH 14/59] Fix base64 padding handling --- src/node-web-compat-web.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 24c0c71..adcb115 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -91,8 +91,7 @@ const bufferFromBase64url = (function () { {} as { [key: number]: number } ); return function (base64url: string) { - const paddingLength = base64url.match(/^.+(=?=?)$/)![1].length; - const bufferLength = (base64url.length * 3) / 4 - paddingLength; + const paddingLength = base64url.match(/^.+?(=?=?)$/)![1].length; let first: number, second: number, third: number, fourth: number; return base64url.match(/.{1,4}/g)!.reduce((acc, chunk, index) => { first = map[chunk.charCodeAt(0)]; @@ -103,6 +102,6 @@ const bufferFromBase64url = (function () { acc[3 * index + 1] = ((second & 15) << 4) | (third >> 2); acc[3 * index + 2] = ((third & 3) << 6) | (fourth & 63); return acc; - }, new Uint8Array(bufferLength)); + }, new Uint8Array((base64url.length * 3) / 4 - paddingLength)); }; })(); From 18b51c4dba1891d5869270135d9490f631d27d4c Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 13:59:44 +0100 Subject: [PATCH 15/59] Added browser field to . export --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index bfd31c5..0207fbd 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ ], "exports": { ".": { + "browser": "./dist/web/bundle.js", "import": "./dist/esm/index.js", "require": "./dist/cjs/index.js" }, From d07b4cbb49f37a1c741f9c2798d498d531ad9d4a Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 14:02:19 +0100 Subject: [PATCH 16/59] Prettier --- tests/jest-ts-js-resolver.js | 5 ++++- tests/web/index.html | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index f47f33e..611fe3e 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -6,7 +6,10 @@ const srcPath = path.join(__dirname, "..", "src"); module.exports = (request, options) => { if (options.basedir.startsWith(srcPath)) { if (request.endsWith("node-web-compat.js")) { - request = request.replace("node-web-compat.js", "node-web-compat-node.ts"); + request = request.replace( + "node-web-compat.js", + "node-web-compat-node.ts" + ); } else { request = request.replace(/\.js$/, ".ts"); } diff --git a/tests/web/index.html b/tests/web/index.html index c4eaf0d..af57c38 100644 --- a/tests/web/index.html +++ b/tests/web/index.html @@ -24,7 +24,9 @@ console.log("Token not valid!", err); } // Will throw: - verifier.verifySync("eyJraWQiOiJhYnY4N2R4N2l5Y1p5MnNmVGNXT1I1UWZjeDNxRGZEQmxBbFdqM20zR093PSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIxZjcxYTdiNC0zNDE3LTQwZGMtOWNkMC00OWI1NWJlMmQwN2QiLCJjb2duaXRvOmdyb3VwcyI6WyJ0ZXN0MyIsImV1LXdlc3QtMV9jZkUzeDU2b2NfR29vZ2xlIl0sInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4gaHR0cHM6XC9cL2FwaS5vdHRvLWF3cy5jb21cL2hlbGxvXC9yZWFkIHBob25lIG9wZW5pZCBwcm9maWxlIGVtYWlsIiwiYXV0aF90aW1lIjoxNjQ1NzIwNjI2LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9jZkUzeDU2b2MiLCJleHAiOjE2NDU3MjQyMjYsImlhdCI6MTY0NTcyMDYyNywidmVyc2lvbiI6MiwianRpIjoiNmQyZWYzYzctZDljNC00NmU0LWFiOTQtODY4MDUzYjM4YjIzIiwiY2xpZW50X2lkIjoiNDJrbmZmdnU1Y3VqdHJzMDJ1NGVjMGFlZ3MiLCJ1c2VybmFtZSI6Ikdvb2dsZV8xMTI4Njk4MzY0MDI5MzgyNDQ2NzYifQ.HSzsF09giTnsDalCnKjH6v6xTzKiepkPLRfyVftBK64Di9g9mVheMYjr8W9j5N4pYp0ptQ1yYK_0o0FHlb-8pJgGoEJbyhRluv_CSiGvgZwxDCfE09xJfOqCooOdgQiRAVwNPFfnV10meQhhJrYB2-TgUNx6h9TkDtS36jWnBXCVigKP2tg4T1XgGgpeBO75qTsVts7Qn6sSalJS7uDdyPQOhvTAEb1IEiu4tu5PelnEmZbWZMEK_VkSfrSk-tnYL29h0vXvrk7S1v0XTE_L03ORv9wrGgU9b6BojQW3kKB48it_yrRQhKFEFmoIBOuGqlwarhDcDFkjGioGgNg_wA") + verifier.verifySync( + "eyJraWQiOiJhYnY4N2R4N2l5Y1p5MnNmVGNXT1I1UWZjeDNxRGZEQmxBbFdqM20zR093PSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIxZjcxYTdiNC0zNDE3LTQwZGMtOWNkMC00OWI1NWJlMmQwN2QiLCJjb2duaXRvOmdyb3VwcyI6WyJ0ZXN0MyIsImV1LXdlc3QtMV9jZkUzeDU2b2NfR29vZ2xlIl0sInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4gaHR0cHM6XC9cL2FwaS5vdHRvLWF3cy5jb21cL2hlbGxvXC9yZWFkIHBob25lIG9wZW5pZCBwcm9maWxlIGVtYWlsIiwiYXV0aF90aW1lIjoxNjQ1NzIwNjI2LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9jZkUzeDU2b2MiLCJleHAiOjE2NDU3MjQyMjYsImlhdCI6MTY0NTcyMDYyNywidmVyc2lvbiI6MiwianRpIjoiNmQyZWYzYzctZDljNC00NmU0LWFiOTQtODY4MDUzYjM4YjIzIiwiY2xpZW50X2lkIjoiNDJrbmZmdnU1Y3VqdHJzMDJ1NGVjMGFlZ3MiLCJ1c2VybmFtZSI6Ikdvb2dsZV8xMTI4Njk4MzY0MDI5MzgyNDQ2NzYifQ.HSzsF09giTnsDalCnKjH6v6xTzKiepkPLRfyVftBK64Di9g9mVheMYjr8W9j5N4pYp0ptQ1yYK_0o0FHlb-8pJgGoEJbyhRluv_CSiGvgZwxDCfE09xJfOqCooOdgQiRAVwNPFfnV10meQhhJrYB2-TgUNx6h9TkDtS36jWnBXCVigKP2tg4T1XgGgpeBO75qTsVts7Qn6sSalJS7uDdyPQOhvTAEb1IEiu4tu5PelnEmZbWZMEK_VkSfrSk-tnYL29h0vXvrk7S1v0XTE_L03ORv9wrGgU9b6BojQW3kKB48it_yrRQhKFEFmoIBOuGqlwarhDcDFkjGioGgNg_wA" + );

Let's verify some JWTs!

From e5a8de65aa3d1331f01ce85a2e060f14c0d6f5df Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 14:16:04 +0100 Subject: [PATCH 17/59] Type tweak --- src/typing-util.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/typing-util.ts b/src/typing-util.ts index 7a8f4fc..4c1bdcf 100644 --- a/src/typing-util.ts +++ b/src/typing-util.ts @@ -54,11 +54,13 @@ export type Properties = StillToProvideProperties< > & Partial; -export type AsAsync any> = ( +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type AsAsync unknown> = ( ...args: Parameters ) => Promise>; -export function wrapResultInPromise any>( +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function wrapResultInPromise unknown>( toWrap: T ) { return function (...args: Parameters): Promise> { From 4564a2a610ee2248373eb9896175bdc7bacbb641 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 14:51:10 +0100 Subject: [PATCH 18/59] Add coverage --- tests/cognito/package.json | 1 + tests/unit/jwt-rsa.test.ts | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/tests/cognito/package.json b/tests/cognito/package.json index bfcdbcd..569365f 100644 --- a/tests/cognito/package.json +++ b/tests/cognito/package.json @@ -31,6 +31,7 @@ "@aws-cdk/core": "1.145.0", "@aws-cdk/custom-resources": "1.145.0", "@aws-sdk/client-cognito-identity-provider": "^3.52.0", + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", "source-map-support": "^0.5.21" } } diff --git a/tests/unit/jwt-rsa.test.ts b/tests/unit/jwt-rsa.test.ts index eceedd5..2c2a32f 100644 --- a/tests/unit/jwt-rsa.test.ts +++ b/tests/unit/jwt-rsa.test.ts @@ -32,6 +32,7 @@ import { import { transformJwkToKeyObjectSync } from "../../src/node-web-compat-node"; import { JwksCache, Jwks } from "../../src/jwk"; import { performance } from "perf_hooks"; +import { KeyObject } from "crypto"; describe("unit tests jwt verifier", () => { let keypair: ReturnType; @@ -203,6 +204,28 @@ describe("unit tests jwt verifier", () => { expect(statement).toThrow("Invalid signature"); expect(statement).toThrow(JwtInvalidSignatureError); }); + test("invalid signature - async", async () => { + const signedJwt = signJwt( + { kid: keypair.jwk.kid }, + {}, + keypair.privateKey, + false + ); + const statement = () => + verifyJwt(signedJwt, "https://example.com/path/to/jwks.json", { + audience: null, + issuer: null, + }); + expect.assertions(2); + mockHttpsUri("https://example.com/path/to/jwks.json", { + responsePayload: JSON.stringify(keypair.jwks), + }); + await expect(statement).rejects.toThrow("Invalid signature"); + mockHttpsUri("https://example.com/path/to/jwks.json", { + responsePayload: JSON.stringify(keypair.jwks), + }); + await expect(statement).rejects.toThrow(JwtInvalidSignatureError); + }); test("invalid audience", () => { const signedJwt = signJwt( {}, @@ -1465,7 +1488,7 @@ describe("unit tests jwt verifier", () => { const pubkey = pubkeyCache.transformJwkToKeyObjectSync( keypair.jwk, issuer - ); + ) as KeyObject; expect(pubkey.export({ format: "der", type: "spki" })).toEqual( keypair.publicKeyDer ); @@ -1487,7 +1510,18 @@ describe("unit tests jwt verifier", () => { }); test("no issuer and kid", () => { const pubkeyCache = new KeyObjectCache(); - const pubkey = pubkeyCache.transformJwkToKeyObjectSync(keypair.jwk); + const pubkey = pubkeyCache.transformJwkToKeyObjectSync( + keypair.jwk + ) as KeyObject; + expect(pubkey.export({ format: "der", type: "spki" })).toEqual( + keypair.publicKeyDer + ); + }); + test("no issuer and kid - async", async () => { + const pubkeyCache = new KeyObjectCache(); + const pubkey = (await pubkeyCache.transformJwkToKeyObjectAsync( + keypair.jwk + )) as KeyObject; expect(pubkey.export({ format: "der", type: "spki" })).toEqual( keypair.publicKeyDer ); From 8591c23c0059f38d7637701ba90ed1911f22ff97 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 15:02:43 +0100 Subject: [PATCH 19/59] Fixed coverage reporting --- jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index 4d9149d..1803d51 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,7 @@ module.exports = { preset: "ts-jest", testEnvironment: "node", moduleFileExtensions: ["ts", "js"], - collectCoverageFrom: ["src/*.ts"], + collectCoverageFrom: ["src/*.ts", "!src/node-web-compat-web.ts"], roots: ["src", "tests/unit"], resolver: "/tests/jest-ts-js-resolver.js", }; From b2ffd7c55ecb432ce97100a37162a6b46e23f23d Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 15:18:10 +0100 Subject: [PATCH 20/59] Tweaks --- src/.gitignore | 1 - src/jwt-rsa.ts | 5 ++--- src/node-web-compat-node.ts | 7 ++++--- src/node-web-compat-web.ts | 10 ++++++---- src/node-web-compat.ts | 8 ++++---- tests/.gitignore | 2 +- tests/jest-ts-js-resolver.js | 1 + tests/unit/test-util.ts | 4 ++-- 8 files changed, 20 insertions(+), 18 deletions(-) delete mode 100644 src/.gitignore diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index 6ec572a..0000000 --- a/src/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!node-web-compat.d.ts diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index 04de085..e47e26e 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -147,15 +147,14 @@ export type JwtRsaVerifierMultiIssuer< true >; -export type JwsSignatureVerificationFunctionSync = (props: { +export type JwsVerificationFunctionSync = (props: { keyObject: GenericKeyObject; alg: "RS256" | "RS384" | "RS512"; jwsSigningInput: string; signature: string; }) => boolean; -export type JwsSignatureVerificationFunctionAsync = - AsAsync; +export type JwsVerificationFunctionAsync = AsAsync; function validateJwtHeaderAndJwk(header: JwtHeader, jwk: Jwk) { // Check JWK use diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 100c614..41e2934 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -1,11 +1,12 @@ -"use strict"; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +// +// Node.js implementations for the node-web-compatibility layer import { createPublicKey, createVerify, KeyObject } from "crypto"; import { JwkToKeyObjectTransformerSync, - JwsSignatureVerificationFunctionSync, + JwsVerificationFunctionSync, } from "./jwt-rsa"; import { Jwk } from "./jwk.js"; import { constructPublicKeyInDerFormat } from "./asn1.js"; @@ -43,7 +44,7 @@ enum JwtSignatureAlgorithms { RS512 = "RSA-SHA512", } -export const verifySignatureSync: JwsSignatureVerificationFunctionSync = ({ +export const verifySignatureSync: JwsVerificationFunctionSync = ({ alg, keyObject, jwsSigningInput, diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index adcb115..a63b1f9 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -1,11 +1,13 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +// +// Web implementations for the node-web-compatibility layer import { JwkToKeyObjectTransformerSync, JwkToKeyObjectTransformerAsync, - JwsSignatureVerificationFunctionSync, - JwsSignatureVerificationFunctionAsync, + JwsVerificationFunctionSync, + JwsVerificationFunctionAsync, } from "./jwt-rsa"; import { Jwk } from "./jwk"; import { Json } from "./safe-json-parse"; @@ -24,7 +26,7 @@ export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = "Synchronously transforming a JWK into a key object is not supported in the browser" ); }; -export const verifySignatureSync: JwsSignatureVerificationFunctionSync = () => { +export const verifySignatureSync: JwsVerificationFunctionSync = () => { throw new NotSupportedError( "Synchronously verifying a JWT signature is not supported in the browser" ); @@ -64,7 +66,7 @@ enum JwtSignatureAlgorithmsWebCrypto { RS512 = "SHA-512", } -export const verifySignatureAsync: JwsSignatureVerificationFunctionAsync = ({ +export const verifySignatureAsync: JwsVerificationFunctionAsync = ({ jwsSigningInput, keyObject, signature, diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index db7e029..1a0f779 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -9,8 +9,8 @@ import { Json } from "./safe-json-parse.js"; import { JwkToKeyObjectTransformerSync, JwkToKeyObjectTransformerAsync, - JwsSignatureVerificationFunctionSync, - JwsSignatureVerificationFunctionAsync, + JwsVerificationFunctionSync, + JwsVerificationFunctionAsync, } from "./jwt-rsa"; // Convert base64 to UTF8 @@ -25,5 +25,5 @@ export let fetchJson: ( export let transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; export let transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync; -export let verifySignatureSync: JwsSignatureVerificationFunctionSync; -export let verifySignatureAsync: JwsSignatureVerificationFunctionAsync; +export let verifySignatureSync: JwsVerificationFunctionSync; +export let verifySignatureAsync: JwsVerificationFunctionAsync; diff --git a/tests/.gitignore b/tests/.gitignore index 61afee1..3532104 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1 +1 @@ -!jest-ts-js-resolver*.js +!jest-ts-js-resolver.js diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index 611fe3e..5239d28 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -6,6 +6,7 @@ const srcPath = path.join(__dirname, "..", "src"); module.exports = (request, options) => { if (options.basedir.startsWith(srcPath)) { if (request.endsWith("node-web-compat.js")) { + // when running unit tests, we want to use the Node.js implementation (not Web) request = request.replace( "node-web-compat.js", "node-web-compat-node.ts" diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index 76cef7d..b34b947 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -51,8 +51,8 @@ export function publicKeyToJwk( ); return { ...jwkOptions, - n: Buffer.from(n).toString("base64"), - e: Buffer.from(e).toString("base64"), + n: n.toString("base64"), + e: e.toString("base64"), } as Jwk; } From 79bbd808f966455a2abd6bb57b863e035f510b0d Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 15:27:15 +0100 Subject: [PATCH 21/59] Tweak comment --- tests/web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/web/index.html b/tests/web/index.html index af57c38..6d0be7e 100644 --- a/tests/web/index.html +++ b/tests/web/index.html @@ -23,7 +23,7 @@ } catch (err) { console.log("Token not valid!", err); } - // Will throw: + // Will throw because verifySync isn't supported in the browser (window.crypto.subtle calls are all async): verifier.verifySync( "eyJraWQiOiJhYnY4N2R4N2l5Y1p5MnNmVGNXT1I1UWZjeDNxRGZEQmxBbFdqM20zR093PSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIxZjcxYTdiNC0zNDE3LTQwZGMtOWNkMC00OWI1NWJlMmQwN2QiLCJjb2duaXRvOmdyb3VwcyI6WyJ0ZXN0MyIsImV1LXdlc3QtMV9jZkUzeDU2b2NfR29vZ2xlIl0sInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4gaHR0cHM6XC9cL2FwaS5vdHRvLWF3cy5jb21cL2hlbGxvXC9yZWFkIHBob25lIG9wZW5pZCBwcm9maWxlIGVtYWlsIiwiYXV0aF90aW1lIjoxNjQ1NzIwNjI2LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV9jZkUzeDU2b2MiLCJleHAiOjE2NDU3MjQyMjYsImlhdCI6MTY0NTcyMDYyNywidmVyc2lvbiI6MiwianRpIjoiNmQyZWYzYzctZDljNC00NmU0LWFiOTQtODY4MDUzYjM4YjIzIiwiY2xpZW50X2lkIjoiNDJrbmZmdnU1Y3VqdHJzMDJ1NGVjMGFlZ3MiLCJ1c2VybmFtZSI6Ikdvb2dsZV8xMTI4Njk4MzY0MDI5MzgyNDQ2NzYifQ.HSzsF09giTnsDalCnKjH6v6xTzKiepkPLRfyVftBK64Di9g9mVheMYjr8W9j5N4pYp0ptQ1yYK_0o0FHlb-8pJgGoEJbyhRluv_CSiGvgZwxDCfE09xJfOqCooOdgQiRAVwNPFfnV10meQhhJrYB2-TgUNx6h9TkDtS36jWnBXCVigKP2tg4T1XgGgpeBO75qTsVts7Qn6sSalJS7uDdyPQOhvTAEb1IEiu4tu5PelnEmZbWZMEK_VkSfrSk-tnYL29h0vXvrk7S1v0XTE_L03ORv9wrGgU9b6BojQW3kKB48it_yrRQhKFEFmoIBOuGqlwarhDcDFkjGioGgNg_wA" ); From a295abed523cb9a3d4e525eea871d09661baf8f0 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 25 Feb 2022 15:28:46 +0100 Subject: [PATCH 22/59] Add comment --- tests/web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/web/index.html b/tests/web/index.html index 6d0be7e..596093d 100644 --- a/tests/web/index.html +++ b/tests/web/index.html @@ -6,7 +6,7 @@ + + diff --git a/tests/vite-app/package-lock.json b/tests/vite-app/package-lock.json new file mode 100644 index 0000000..1f78f30 --- /dev/null +++ b/tests/vite-app/package-lock.json @@ -0,0 +1,9772 @@ +{ + "name": "vite-app", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "vite-app", + "version": "0.0.0", + "dependencies": { + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" + }, + "devDependencies": { + "@cypress/webpack-preprocessor": "^5.11.1", + "cypress": "^9.5.0", + "node-jose": "^2.1.0", + "typescript": "^4.5.4", + "vite": "^2.8.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "peer": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dev": true, + "peer": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/webpack-preprocessor": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.11.1.tgz", + "integrity": "sha512-kfdF+W/Tns81rFplnqlgZ+t6V+FJ7vegeQCYolLyhh0nJ8eG3s5HvV/ak/zSlbQnaOmAuYiZIChJFVZLUWuNOA==", + "dev": true, + "dependencies": { + "bluebird": "3.7.1", + "debug": "^4.3.2", + "lodash": "^4.17.20" + }, + "peerDependencies": { + "@babel/core": "^7.0.1", + "@babel/preset-env": "^7.0.0", + "babel-loader": "^8.0.2", + "webpack": "^4 || ^5" + } + }, + "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-jwt-verify": { + "version": "2.1.3", + "resolved": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-dDbTfnWvHm/qobZMuXA81IbsRJit+cYftswo5/YrHgKBjQf16HL1saGvXbx/tL7e51CuKRjiHlYZm2dmynjL/w==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "peer": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "peer": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", + "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "dev": true, + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001312", + "electron-to-chromium": "^1.4.71", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true, + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dev": true, + "peer": true, + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cypress": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.0.tgz", + "integrity": "sha512-rC5QPolKsVjJ8QJZ7IeZ6HlKM4gswBGZc0XvoAJNL8urQCSL8zTX0A/ai/h35WfF47NQ0iSZnwIXBlHX3MOUIQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.5", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", + "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", + "dev": true, + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", + "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", + "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.23", + "esbuild-darwin-64": "0.14.23", + "esbuild-darwin-arm64": "0.14.23", + "esbuild-freebsd-64": "0.14.23", + "esbuild-freebsd-arm64": "0.14.23", + "esbuild-linux-32": "0.14.23", + "esbuild-linux-64": "0.14.23", + "esbuild-linux-arm": "0.14.23", + "esbuild-linux-arm64": "0.14.23", + "esbuild-linux-mips64le": "0.14.23", + "esbuild-linux-ppc64le": "0.14.23", + "esbuild-linux-riscv64": "0.14.23", + "esbuild-linux-s390x": "0.14.23", + "esbuild-netbsd-64": "0.14.23", + "esbuild-openbsd-64": "0.14.23", + "esbuild-sunos-64": "0.14.23", + "esbuild-windows-32": "0.14.23", + "esbuild-windows-64": "0.14.23", + "esbuild-windows-arm64": "0.14.23" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", + "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", + "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", + "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", + "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", + "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", + "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", + "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", + "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", + "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", + "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", + "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", + "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", + "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", + "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", + "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", + "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", + "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", + "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", + "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", + "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "peer": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true, + "peer": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", + "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-jose": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.1.0.tgz", + "integrity": "sha512-Zmm8vFPJabphGBc5Wz1/LUMPS+1cynqw16RIhgVNQMEI2yEQrvl7Gx2EwN9GhP8tkm8f7SH53K2nIx8TeNTIdg==", + "dev": true, + "dependencies": { + "base64url": "^3.0.1", + "buffer": "^6.0.3", + "es6-promise": "^4.2.8", + "lodash": "^4.17.21", + "long": "^5.2.0", + "node-forge": "^1.2.1", + "pako": "^2.0.4", + "process": "^0.11.10", + "uuid": "^8.3.2" + } + }, + "node_modules/node-jose/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true, + "peer": true + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "dependencies": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "peer": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "peer": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true, + "peer": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "peer": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true, + "peer": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.68.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", + "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "peer": true, + "dependencies": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "peer": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", + "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.14", + "postcss": "^8.4.6", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.69.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", + "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true, + "peer": true + }, + "@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "peer": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "peer": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "peer": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "peer": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "peer": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dev": true, + "peer": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + } + }, + "@cypress/webpack-preprocessor": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.11.1.tgz", + "integrity": "sha512-kfdF+W/Tns81rFplnqlgZ+t6V+FJ7vegeQCYolLyhh0nJ8eG3s5HvV/ak/zSlbQnaOmAuYiZIChJFVZLUWuNOA==", + "dev": true, + "requires": { + "bluebird": "3.7.1", + "debug": "^4.3.2", + "lodash": "^4.17.20" + }, + "dependencies": { + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "peer": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true, + "peer": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "peer": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "requires": {} + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "aws-jwt-verify": { + "version": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-dDbTfnWvHm/qobZMuXA81IbsRJit+cYftswo5/YrHgKBjQf16HL1saGvXbx/tL7e51CuKRjiHlYZm2dmynjL/w==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "peer": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "peer": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "peer": true + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", + "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001312", + "electron-to-chromium": "^1.4.71", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true, + "peer": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "requires": { + "colors": "1.4.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + } + } + }, + "core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dev": true, + "peer": true, + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "peer": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cypress": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.0.tgz", + "integrity": "sha512-rC5QPolKsVjJ8QJZ7IeZ6HlKM4gswBGZc0XvoAJNL8urQCSL8zTX0A/ai/h35WfF47NQ0iSZnwIXBlHX3MOUIQ==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.5", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "peer": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", + "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "peer": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", + "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "esbuild": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", + "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.14.23", + "esbuild-darwin-64": "0.14.23", + "esbuild-darwin-arm64": "0.14.23", + "esbuild-freebsd-64": "0.14.23", + "esbuild-freebsd-arm64": "0.14.23", + "esbuild-linux-32": "0.14.23", + "esbuild-linux-64": "0.14.23", + "esbuild-linux-arm": "0.14.23", + "esbuild-linux-arm64": "0.14.23", + "esbuild-linux-mips64le": "0.14.23", + "esbuild-linux-ppc64le": "0.14.23", + "esbuild-linux-riscv64": "0.14.23", + "esbuild-linux-s390x": "0.14.23", + "esbuild-netbsd-64": "0.14.23", + "esbuild-openbsd-64": "0.14.23", + "esbuild-sunos-64": "0.14.23", + "esbuild-windows-32": "0.14.23", + "esbuild-windows-64": "0.14.23", + "esbuild-windows-arm64": "0.14.23" + } + }, + "esbuild-android-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", + "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", + "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", + "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", + "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", + "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", + "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", + "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", + "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", + "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", + "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", + "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", + "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", + "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", + "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", + "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", + "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", + "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", + "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", + "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true + }, + "eventemitter2": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", + "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "peer": true + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "peer": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true + }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "peer": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "peer": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true, + "peer": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "long": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", + "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "peer": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true + }, + "node-jose": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.1.0.tgz", + "integrity": "sha512-Zmm8vFPJabphGBc5Wz1/LUMPS+1cynqw16RIhgVNQMEI2yEQrvl7Gx2EwN9GhP8tkm8f7SH53K2nIx8TeNTIdg==", + "dev": true, + "requires": { + "base64url": "^3.0.1", + "buffer": "^6.0.3", + "es6-promise": "^4.2.8", + "lodash": "^4.17.21", + "long": "^5.2.0", + "node-forge": "^1.2.1", + "pako": "^2.0.4", + "process": "^0.11.10", + "uuid": "^8.3.2" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true, + "peer": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "peer": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true + }, + "pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "peer": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "requires": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "peer": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "peer": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true, + "peer": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "peer": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true, + "peer": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "peer": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "peer": true + } + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.68.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", + "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "peer": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + } + } + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "terser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", + "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", + "dev": true, + "peer": true, + "requires": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "peer": true, + "requires": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + } + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "peer": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "peer": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "peer": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "peer": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "peer": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vite": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", + "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", + "dev": true, + "requires": { + "esbuild": "^0.14.14", + "fsevents": "~2.3.2", + "postcss": "^8.4.6", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + } + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.69.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", + "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json new file mode 100644 index 0000000..6181dc5 --- /dev/null +++ b/tests/vite-app/package.json @@ -0,0 +1,24 @@ +{ + "name": "vite-app", + "private": true, + "version": "0.0.2", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tokengen": "tsc util/generateExampleTokens.ts && node util/generateExampleTokens.js", + "cypress:open": "cypress open", + "cypress:open:webpack": "DEBUG=cypress:webpack cypress open", + "cypress:open:preview": "cypress open --config baseUrl=http://localhost:4173/" + }, + "dependencies": { + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" + }, + "devDependencies": { + "@cypress/webpack-preprocessor": "^5.11.1", + "cypress": "^9.5.0", + "node-jose": "^2.1.0", + "typescript": "^4.5.4", + "vite": "^2.8.0" + } +} diff --git a/tests/vite-app/public/example-JWKS.json b/tests/vite-app/public/example-JWKS.json new file mode 100644 index 0000000..3a7721d --- /dev/null +++ b/tests/vite-app/public/example-JWKS.json @@ -0,0 +1 @@ +{"keys":[{"kty":"RSA","kid":"iMW83Los9mTpHPb0MEKS2MfLvY3DHIGlnxOWrBHVlYY","use":"sig","alg":"RS256","e":"AQAB","n":"tORTd1BXbBBN-KMbDja5vqIQzRkHzBJk9AlSQzYKGEoB4RbqxQHADde6pt7VunvP7xiZPI6dJQpphc9Vn9zxnIZR2qfCOPXpoE5lamKoNRUXl_iNs2yMvSrmfkY_snEpcmQeOF2wHAWVuV6dP94RcWCIFlIrdsclDy6dMdhigGxCBZrKW_vd-LbyCAvJePZU1TnTLxOAJNaONomX89z6_nDpkp3L5x1tOBTFIxvtaMAnZvVUcqQ5KoyjHRfX4gSKENGCpNzx-g2PYVD1SgyOLNT0LJN6mHnBu7FGec8At0nc-6xE1GxE2PcwC8yBD8RshYxX5flcYrd-lkxuN3U6SQ"}]} \ No newline at end of file diff --git a/tests/vite-app/src/main.ts b/tests/vite-app/src/main.ts new file mode 100644 index 0000000..5851449 --- /dev/null +++ b/tests/vite-app/src/main.ts @@ -0,0 +1,50 @@ +import './style.css' +import { JwtRsaVerifier } from 'aws-jwt-verify'; + +const inputjwt = document.querySelector('#jwt'); +const inputissuer = document.querySelector('#issuer'); +const inputaudience = document.querySelector('#audience'); +const inputjwskuri = document.querySelector('#jwksuri'); +const button = document.querySelector('#verifyrsa'); +const result = document.querySelector('#result'); +const prettyprint = document.querySelector('#prettyprint'); + +if (inputjwt) { + inputjwt.onkeyup = () => { + if (inputjwt && button) { + button.disabled = (inputjwt.value === ''); + } + if (result) { + result.innerHTML = "Unverified"; + } + } +} + +if (button) { + button.onclick = async () => { + if (inputjwt && inputissuer && inputjwskuri && inputaudience && result) { + + const verifier = JwtRsaVerifier.create({ + issuer: inputissuer?.value, + audience: (inputaudience?.value === '' ? null : inputaudience.value), + jwksUri: inputjwskuri?.value + }); + + try { + const payload = await verifier.verify(inputjwt.value); + console.log("Token is valid. Payload:", payload); + + result.innerHTML = "Verified"; + + if (prettyprint) { + prettyprint.innerHTML = JSON.stringify(payload, null, 2); + } + } catch (ex) { + console.log(ex); + console.log("Token not valid!"); + + result.innerHTML = (ex as Error).message; + } + } + } +} diff --git a/tests/vite-app/src/style.css b/tests/vite-app/src/style.css new file mode 100644 index 0000000..f2b80e5 --- /dev/null +++ b/tests/vite-app/src/style.css @@ -0,0 +1,19 @@ +#app { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + color: #2c3e50; + margin-top: 60px; +} + +#prettyprint { + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + color: white; + background-color: #2c3e50; + margin: 0 60px 0 60px; +} \ No newline at end of file diff --git a/tests/vite-app/src/vite-env.d.ts b/tests/vite-app/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/tests/vite-app/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tests/vite-app/tsconfig.json b/tests/vite-app/tsconfig.json new file mode 100644 index 0000000..1885c8f --- /dev/null +++ b/tests/vite-app/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true + }, + "include": ["src"] +} diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts new file mode 100644 index 0000000..b95bcd7 --- /dev/null +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -0,0 +1,96 @@ +import { JWK, JWS } from 'node-jose'; // https://github.com/cisco/node-jose +import { v4 } from 'uuid'; +import { writeFileSync } from 'fs'; + +const keystore = (JWK as any).createKeyStore(); +const ISSUER = 'https://example.com'; +const AUDIENCE = 'aws-jwt-verify'; +const JWKSURI = '/example-JWKS.json'; + +const NOW = Math.floor(Date.now() / 1000) - 30; +const ONEDAY = 24 * 60 * 60; +const ONEYEAR = 365 * 24 * 60 * 60; + +const baseTokenPayload = { + sub: 'TEST DATA', + aud: AUDIENCE, + iat: NOW, + iss: ISSUER, +}; + +const validTokenPayload = { + ...baseTokenPayload, + nbf: NOW, + exp: NOW + ONEYEAR, + jti: v4(), + testcase: 'valid token', +}; + +const expiredTokenPayload = { + ...baseTokenPayload, + nbf: NOW - ONEDAY, + exp: NOW, + jti: v4(), + testcase: 'expired token', +}; + +const notYetValidTokenPayload = { + ...baseTokenPayload, + nbf: NOW + 366 * 24 * 60 * 60, + exp: Math.floor(Date.now() / 1000) + 366 * 24 * 60 * 60, + jti: v4(), + testcase: 'not yet valid token', +}; + +const createSign = async (jwk, payload) => { + return await JWS.createSign( + { + alg: 'RS256', + format: 'compact', + }, + jwk + ) + .update(JSON.stringify(payload), 'utf8') + .final(); +}; + +const props = { + alg: 'RS256', + use: 'sig', +}; + +const saveFile = (filename, contents) => { + console.log(`writing ${filename}...`); + // eslint-disable-next-line security/detect-non-literal-fs-filename + writeFileSync(filename, JSON.stringify(contents)); +} + +const tokendata = { + ISSUER: '', + AUDIENCE: '', + JWKSURI: '', + VAILD_TOKEN: '', + EXPIRED_TOKEN: '', + NOT_YET_VALID_TOKEN: '' +}; + +const main = async () => { + const jwk = await keystore.generate('RSA', 2048, props); + + saveFile('public' + JWKSURI, keystore.toJSON()); + saveFile('cypress/fixtures' + JWKSURI, keystore.toJSON()); + + tokendata.ISSUER = ISSUER; + tokendata.AUDIENCE = AUDIENCE; + tokendata.JWKSURI = JWKSURI; + + tokendata.VAILD_TOKEN = await createSign(jwk, validTokenPayload); + tokendata.EXPIRED_TOKEN = await createSign(jwk, expiredTokenPayload); + tokendata.NOT_YET_VALID_TOKEN = await createSign(jwk, notYetValidTokenPayload); + + saveFile('cypress/fixtures/token-data.json', tokendata); + + console.log('done'); +}; + +main(); diff --git a/tests/vite-app/vite.config.ts b/tests/vite-app/vite.config.ts new file mode 100644 index 0000000..41d8b6a --- /dev/null +++ b/tests/vite-app/vite.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vite'; + +// https://vitejs.dev/config/ +export default defineConfig({ +}); From d04f2e7465700b35ef72cdba89ba5d3197ef0230 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 1 Mar 2022 10:00:42 +0100 Subject: [PATCH 24/59] No seperate bundle for web, but use subpath imports --- .prettierignore | 2 +- package.json | 12 ++++-------- src/.gitignore | 1 + src/https.ts | 4 ++-- src/jwt-rsa.ts | 2 +- src/jwt.ts | 2 +- src/node-web-compat-web.ts | 12 ++++++------ src/{node-web-compat.ts => node-web-compat.d.ts} | 3 +-- tests/cognito/jest.config.js | 5 ++++- tests/jest-ts-js-resolver.js | 6 +++--- tsconfig.json | 6 +++++- 11 files changed, 29 insertions(+), 26 deletions(-) create mode 100644 src/.gitignore rename src/{node-web-compat.ts => node-web-compat.d.ts} (86%) diff --git a/.prettierignore b/.prettierignore index 23a5bbd..bd16593 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,7 +15,7 @@ jwk.d.ts jwt-model.d.ts jwt-rsa.d.ts jwt.d.ts -node-web-compat.d.ts +node-web-compat*.d.ts safe-json-parse.d.ts test-util.d.ts typing-util.d.ts diff --git a/package.json b/package.json index 0207fbd..403e236 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "url": "https://aws.amazon.com" }, "main": "dist/cjs/index.js", - "browser": "dist/web/bundle.js", "type": "commonjs", "types": "index.d.ts", "module": "dist/esm/index.js", @@ -31,7 +30,6 @@ ], "exports": { ".": { - "browser": "./dist/web/bundle.js", "import": "./dist/esm/index.js", "require": "./dist/cjs/index.js" }, @@ -94,12 +92,10 @@ "typescript": "^4.4.3" }, "scripts": { - "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && mv dist/cjs/node-web-compat-node.js dist/cjs/node-web-compat.js && rm dist/cjs/node-web-compat-web.js", - "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json && mv dist/esm/node-web-compat-node.js dist/esm/node-web-compat.js && rm dist/esm/node-web-compat-web.js", - "dist:web": "tsc --module ES2020 --outDir dist/web && echo '{\"type\":\"module\"}' > dist/web/package.json && mv dist/web/node-web-compat-web.js dist/web/node-web-compat.js && rm dist/web/node-web-compat-node.js", - "dist:web-bundle": "cd dist/web && esbuild index.js --bundle --outfile=bundle.js --sourcemap --format=esm && ls *.js | grep -v bundle | xargs rm", - "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly", - "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:web && npm run dist:web-bundle && npm run dist:types", + "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\",\"imports\":{\"#node-web-compat\":{\"browser\":\"./node-web-compat-web.js\",\"default\":\"./node-web-compat-node.js\"}}}' > dist/cjs/package.json", + "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\",\"imports\":{\"#node-web-compat\":{\"browser\":\"./node-web-compat-web.js\",\"default\":\"./node-web-compat-node.js\"}}}' > dist/esm/package.json", + "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly && cp src/node-web-compat.d.ts . && for D_TS in $(ls *.d.ts); do sed -i 's|#node-web-compat|./node-web-compat.js|g' $D_TS; done", + "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", "lint": "eslint . --fix --ignore-path .gitignore --max-warnings 0", "pack-for-tests": "rm -f aws-jwt-verify.tgz 'aws-jwt-verify-?.?.?.tgz' && npm pack && mv aws-jwt-verify-*.tgz aws-jwt-verify.tgz", diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..6ec572a --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +!node-web-compat.d.ts diff --git a/src/https.ts b/src/https.ts index cdf2bf1..4519794 100644 --- a/src/https.ts +++ b/src/https.ts @@ -5,8 +5,8 @@ import { Json } from "./safe-json-parse.js"; import { NonRetryableFetchError } from "./error.js"; -import { fetchJson } from "./node-web-compat.js"; -export { fetchJson } from "./node-web-compat.js"; +import { fetchJson } from "#node-web-compat"; +export { fetchJson } from "#node-web-compat"; type FetchRequestOptions = Record; diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index e47e26e..27d1d7b 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -34,7 +34,7 @@ import { verifySignatureSync, transformJwkToKeyObjectAsync, verifySignatureAsync, -} from "./node-web-compat.js"; +} from "#node-web-compat"; /** Interface for JWT verification properties */ export interface VerifyProperties { diff --git a/src/jwt.ts b/src/jwt.ts index ace2819..df702c7 100644 --- a/src/jwt.ts +++ b/src/jwt.ts @@ -16,7 +16,7 @@ import { JwtParseError, ParameterValidationError, } from "./error.js"; -import { utf8StringFromB64String } from "./node-web-compat.js"; +import { utf8StringFromB64String } from "#node-web-compat"; /** * Assert that the argument is a valid JWT header object. diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index a63b1f9..3e9aa68 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -8,10 +8,10 @@ import { JwkToKeyObjectTransformerAsync, JwsVerificationFunctionSync, JwsVerificationFunctionAsync, -} from "./jwt-rsa"; -import { Jwk } from "./jwk"; -import { Json } from "./safe-json-parse"; -import { NotSupportedError } from "./error"; +} from "./jwt-rsa.js"; +import { Jwk } from "./jwk.js"; +import { Json } from "./safe-json-parse.js"; +import { NotSupportedError } from "./error.js"; export const fetchJson: ( uri: string, @@ -101,8 +101,8 @@ const bufferFromBase64url = (function () { third = map[chunk.charCodeAt(2)]; fourth = map[chunk.charCodeAt(3)]; acc[3 * index] = (first << 2) | (second >> 4); - acc[3 * index + 1] = ((second & 15) << 4) | (third >> 2); - acc[3 * index + 2] = ((third & 3) << 6) | (fourth & 63); + acc[3 * index + 1] = ((second & 0b1111) << 4) | (third >> 2); + acc[3 * index + 2] = ((third & 0b11) << 6) | fourth; return acc; }, new Uint8Array((base64url.length * 3) / 4 - paddingLength)); }; diff --git a/src/node-web-compat.ts b/src/node-web-compat.d.ts similarity index 86% rename from src/node-web-compat.ts rename to src/node-web-compat.d.ts index 1a0f779..999c2e0 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.d.ts @@ -2,8 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // // Compatibility layer, to make this lib work in both Node.js and Web -// This file just contains stubs for typings, in the dist process this file is -// overwritten with either the Node.js or Web implementation +// This file just contains stubs for typings import { Json } from "./safe-json-parse.js"; import { diff --git a/tests/cognito/jest.config.js b/tests/cognito/jest.config.js index 0b85b49..656ee2f 100644 --- a/tests/cognito/jest.config.js +++ b/tests/cognito/jest.config.js @@ -6,7 +6,10 @@ module.exports = { }, testEnvironment: "node", moduleNameMapper: { + // Jest, why do we need this ... :| + "#node-web-compat": + "/node_modules/aws-jwt-verify/dist/cjs/node-web-compat-node.js", "aws-jwt-verify/https": - "/node_modules/aws-jwt-verify/dist/cjs/https.js", // Jest, why do we need this ... :| + "/node_modules/aws-jwt-verify/dist/cjs/https.js", }, }; diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index 5239d28..85d1375 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -5,11 +5,11 @@ const path = require("path"); const srcPath = path.join(__dirname, "..", "src"); module.exports = (request, options) => { if (options.basedir.startsWith(srcPath)) { - if (request.endsWith("node-web-compat.js")) { + if (request.endsWith("#node-web-compat")) { // when running unit tests, we want to use the Node.js implementation (not Web) request = request.replace( - "node-web-compat.js", - "node-web-compat-node.ts" + "#node-web-compat", + "./node-web-compat-node.ts" ); } else { request = request.replace(/\.js$/, ".ts"); diff --git a/tsconfig.json b/tsconfig.json index ddf5a70..7a3d361 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "extends": "@tsconfig/node14/tsconfig.json", "compilerOptions": { - "lib": ["DOM"] + "lib": ["DOM"], + "baseUrl": "./src", + "paths": { + "#node-web-compat": ["node-web-compat-node.ts"] + } }, "include": ["src/**/*"] } From 43b24af180c5eb6f7d6ee98cf2a5eb14ec0719aa Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 1 Mar 2022 16:22:58 +0100 Subject: [PATCH 25/59] Rename utf8StringFromB64String --- src/jwt.ts | 4 ++-- src/node-web-compat-node.ts | 2 +- src/node-web-compat-web.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jwt.ts b/src/jwt.ts index df702c7..ba5b5c2 100644 --- a/src/jwt.ts +++ b/src/jwt.ts @@ -16,7 +16,7 @@ import { JwtParseError, ParameterValidationError, } from "./error.js"; -import { utf8StringFromB64String } from "#node-web-compat"; +import { parseB64UrlString } from "#node-web-compat"; /** * Assert that the argument is a valid JWT header object. @@ -114,7 +114,7 @@ export function decomposeJwt(jwt: unknown): { // B64 decode header and payload const [headerString, payloadString] = [headerB64, payloadB64].map( - utf8StringFromB64String + parseB64UrlString ); // Parse header diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 41e2934..95cb99f 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -58,5 +58,5 @@ export const verifySignatureSync: JwsVerificationFunctionSync = ({ export const verifySignatureAsync = wrapResultInPromise(verifySignatureSync); -export const utf8StringFromB64String = (b64: string): string => +export const parseB64UrlString = (b64: string): string => Buffer.from(b64, "base64").toString("utf8"); diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 3e9aa68..5145852 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -81,7 +81,7 @@ export const verifySignatureAsync: JwsVerificationFunctionAsync = ({ new TextEncoder().encode(jwsSigningInput) ); -export const utf8StringFromB64String = (b64: string): string => { +export const parseB64UrlString = (b64: string): string => { return new TextDecoder().decode(bufferFromBase64url(b64)); }; From 02972811e8e470912006fd3059d7f69d72cbb8b2 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 1 Mar 2022 22:12:23 +0100 Subject: [PATCH 26/59] Docs and tweaks to simplify --- package.json | 3 +- src/https.ts | 16 ++++-- src/jwt-rsa.ts | 103 +++++++++++++++++++++------------- src/jwt.ts | 4 +- src/node-web-compat-node.ts | 82 +++++++++++++-------------- src/node-web-compat-web.ts | 109 ++++++++++++++---------------------- src/node-web-compat.d.ts | 28 --------- src/node-web-compat.ts | 26 +++++++++ src/typing-util.ts | 10 ---- tests/unit/jwt-rsa.test.ts | 6 +- 10 files changed, 190 insertions(+), 197 deletions(-) delete mode 100644 src/node-web-compat.d.ts create mode 100644 src/node-web-compat.ts diff --git a/package.json b/package.json index 403e236..f7f1d5f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "jwt-model.d.ts", "jwt-rsa.d.ts", "jwt.d.ts", - "node-web-compat.d.ts", "safe-json-parse.d.ts", "typing-util.d.ts" ], @@ -94,7 +93,7 @@ "scripts": { "dist:cjs": "tsc --module CommonJS --outDir dist/cjs && echo '{\"type\":\"commonjs\",\"imports\":{\"#node-web-compat\":{\"browser\":\"./node-web-compat-web.js\",\"default\":\"./node-web-compat-node.js\"}}}' > dist/cjs/package.json", "dist:esm": "tsc --module ES2020 --outDir dist/esm && echo '{\"type\":\"module\",\"imports\":{\"#node-web-compat\":{\"browser\":\"./node-web-compat-web.js\",\"default\":\"./node-web-compat-node.js\"}}}' > dist/esm/package.json", - "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly && cp src/node-web-compat.d.ts . && for D_TS in $(ls *.d.ts); do sed -i 's|#node-web-compat|./node-web-compat.js|g' $D_TS; done", + "dist:types": "tsc --declarationDir . --declaration --emitDeclarationOnly", "dist": "rm -rf dist && npm run dist:cjs && npm run dist:esm && npm run dist:types", "lint:check": "eslint . --ignore-path .gitignore --max-warnings 0", "lint": "eslint . --fix --ignore-path .gitignore --max-warnings 0", diff --git a/src/https.ts b/src/https.ts index 4519794..03354dd 100644 --- a/src/https.ts +++ b/src/https.ts @@ -5,8 +5,16 @@ import { Json } from "./safe-json-parse.js"; import { NonRetryableFetchError } from "./error.js"; -import { fetchJson } from "#node-web-compat"; -export { fetchJson } from "#node-web-compat"; +import { nodeWebCompat } from "#node-web-compat"; + +/** + * Execute a HTTPS request + * @param uri - The URI + * @param requestOptions - The RequestOptions to use (depending on the runtime context, either Node.js RequestOptions or Web Fetch init) + * @param data - Data to send to the URI (e.g. POST data) + * @returns - The response as parsed JSON + */ +export const fetchJson = nodeWebCompat.fetchJson; type FetchRequestOptions = Record; @@ -28,8 +36,8 @@ export class SimpleJsonFetcher implements JsonFetcher { defaultRequestOptions: FetchRequestOptions; constructor(props?: { defaultRequestOptions?: FetchRequestOptions }) { this.defaultRequestOptions = { - timeout: 500, // socket idle timeout - responseTimeout: 1500, // total round trip timeout + timeout: 500, // socket idle timeout (Only of use in Node.js runtime) + responseTimeout: 1500, // total round trip timeout (Only of use in Node.js runtime) ...props?.defaultRequestOptions, }; } diff --git a/src/jwt-rsa.ts b/src/jwt-rsa.ts index 27d1d7b..51ea5aa 100644 --- a/src/jwt-rsa.ts +++ b/src/jwt-rsa.ts @@ -29,12 +29,7 @@ import { ParameterValidationError, } from "./error.js"; import { JsonObject } from "./safe-json-parse.js"; -import { - transformJwkToKeyObjectSync, - verifySignatureSync, - transformJwkToKeyObjectAsync, - verifySignatureAsync, -} from "#node-web-compat"; +import { nodeWebCompat } from "#node-web-compat"; /** Interface for JWT verification properties */ export interface VerifyProperties { @@ -147,6 +142,16 @@ export type JwtRsaVerifierMultiIssuer< true >; +/** + * Verify (synchronously) the JSON Web Signature (JWS) of a JWT + * https://datatracker.ietf.org/doc/html/rfc7515 + * + * @param keyObject: the keyobject (representing the public key) in native crypto format + * @param alg: the JWS algorithm that was used to create the JWS (e.g. RS256) + * @param jwsSigningInput: the input for which the JWS was created, i.e. that what was signed + * @param signature: the JSON Web Signature (JWS) + * @returns boolean: true if the JWS is valid, or false otherwise + */ export type JwsVerificationFunctionSync = (props: { keyObject: GenericKeyObject; alg: "RS256" | "RS384" | "RS512"; @@ -154,8 +159,24 @@ export type JwsVerificationFunctionSync = (props: { signature: string; }) => boolean; +/** + * Verify (asynchronously) the JSON Web Signature (JWS) of a JWT + * https://datatracker.ietf.org/doc/html/rfc7515 + * + * @param keyObject: the keyobject (representing the public key) in native crypto format + * @param alg: the JWS algorithm that was used to create the JWS (e.g. RS256) + * @param jwsSigningInput: the input for which the JWS was created, i.e. that what was signed + * @param signature: the JSON Web Signature (JWS) + * @returns Promise that resolves to a boolean: true if the JWS is valid, or false otherwise + */ export type JwsVerificationFunctionAsync = AsAsync; +/** + * Sanity check the JWT header and the selected JWK + * + * @param header: the JWT header (decoded and JSON parsed) + * @param jwk: the JWK + */ function validateJwtHeaderAndJwk(header: JwtHeader, jwk: Jwk) { // Check JWK use assertStringEquals("JWK use", jwk.use, "sig", JwkInvalidUseError); @@ -188,8 +209,6 @@ function validateJwtHeaderAndJwk(header: JwtHeader, jwk: Jwk) { * @param jwt The JWT * @param jwksUri The JWKS URI, where the JWKS can be fetched from * @param options Verification options - * @param jwkFetcher A function that can execute the fetch of the JWKS from the JWKS URI - * @param jwkToKeyObjectTransformer A function that can transform a JWK into a Node.js native key object * @returns Promise that resolves to the payload of the JWT––if the JWT is valid, otherwise the promise rejects */ export async function verifyJwt( @@ -218,7 +237,7 @@ export async function verifyJwt( * @param jwksUri The JWKS URI, where the JWKS can be fetched from * @param options Verification options * @param jwkFetcher A function that can execute the fetch of the JWKS from the JWKS URI - * @param jwkToKeyObjectTransformer A function that can transform a JWK into a Node.js native key object + * @param transformJwkToKeyObjectFn A function that can transform a JWK into a crypto native key object * @returns Promise that resolves to the payload of the JWT––if the JWT is valid, otherwise the promise rejects */ async function verifyDecomposedJwt( @@ -240,7 +259,7 @@ async function verifyDecomposedJwt( jwksUri: string, decomposedJwt: DecomposedJwt ) => Promise = fetchJwk, - transformJwkToKeyObjectFn: JwkToKeyObjectTransformerAsync = transformJwkToKeyObjectAsync + transformJwkToKeyObjectFn: JwkToKeyObjectTransformerAsync = nodeWebCompat.transformJwkToKeyObjectAsync ) { const { header, headerB64, payload, payloadB64, signatureB64 } = decomposedJwt; @@ -258,7 +277,7 @@ async function verifyDecomposedJwt( ); // Verify the JWT signature - const valid = await verifySignatureAsync({ + const valid = await nodeWebCompat.verifySignatureAsync({ jwsSigningInput: `${headerB64}.${payloadB64}`, signature: signatureB64, alg: header.alg as "RS256" | "RS384" | "RS512", @@ -289,7 +308,7 @@ async function verifyDecomposedJwt( * @param jwt The JWT * @param jwkOrJwks The JWKS that includes the right JWK (indexed by kid). Alternatively, provide the right JWK directly * @param options Verification options - * @param jwkToKeyObjectTransformer A function that can transform a JWK into a Node.js native key object + * @param transformJwkToKeyObjectFn A function that can transform a JWK into a crypto native key object * @returns The (JSON parsed) payload of the JWT––if the JWT is valid, otherwise an error is thrown */ export function verifyJwtSync( @@ -307,7 +326,7 @@ export function verifyJwtSync( }) => void; includeRawJwtInErrors?: boolean; }, - transformJwkToKeyObjectFn: JwkToKeyObjectTransformerSync = transformJwkToKeyObjectSync + transformJwkToKeyObjectFn: JwkToKeyObjectTransformerSync = nodeWebCompat.transformJwkToKeyObjectSync ): JwtPayload { return verifyDecomposedJwtSync( decomposeJwt(jwt), @@ -323,7 +342,7 @@ export function verifyJwtSync( * @param decomposedJwt The decomposed JWT * @param jwkOrJwks The JWKS that includes the right JWK (indexed by kid). Alternatively, provide the right JWK directly * @param options Verification options - * @param jwkToKeyObjectTransformer A function that can transform a JWK into a Node.js native key object + * @param transformJwkToKeyObjectFn A function that can transform a JWK into a crypto native key object * @returns The (JSON parsed) payload of the JWT––if the JWT is valid, otherwise an error is thrown */ function verifyDecomposedJwtSync( @@ -376,8 +395,8 @@ function verifyDecomposedJwtSync( header.kid ); - // Verify the JWT signature - const valid = verifySignatureSync({ + // Verify the JWT signature (JWS) + const valid = nodeWebCompat.verifySignatureSync({ jwsSigningInput: `${headerB64}.${payloadB64}`, signature: signatureB64, alg: header.alg as "RS256" | "RS384" | "RS512", @@ -700,9 +719,18 @@ export class JwtRsaVerifier< } } -type GenericKeyObject = NonNullable; +/** + * Type for a generic key object, at runtime either the Node.js or WebCrypto concrete key object is used + */ +// eslint-disable-next-line @typescript-eslint/ban-types +type GenericKeyObject = Object; -/** Interface for functions that can transform a JWK into an RSA public key in native key object format */ +/** + * Transform (synchronously) the JWK into an RSA public key in crypto native key object format + * + * @param jwk: the JWK + * @returns the RSA public key in crypto native key object format + */ export type JwkToKeyObjectTransformerSync = ( jwk: Jwk, alg?: "RS256" | "RS384" | "RS512", @@ -710,12 +738,14 @@ export type JwkToKeyObjectTransformerSync = ( kid?: string ) => GenericKeyObject; -export type JwkToKeyObjectTransformerAsync = ( - jwk: Jwk, - alg?: "RS256" | "RS384" | "RS512", - issuer?: string, - kid?: string -) => Promise; +/** + * Transform (asynchronously) the JWK into an RSA public key in crypto native key object format + * + * @param jwk: the JWK + * @returns Promise that will resolve with the RSA public key in crypto native key object format + */ +export type JwkToKeyObjectTransformerAsync = + AsAsync; /** * Class representing a cache of RSA public keys in native key object format @@ -727,8 +757,8 @@ export class KeyObjectCache { private publicKeys: Map> = new Map(); constructor( - public transformJwkToKeyObjectSyncFn: JwkToKeyObjectTransformerSync = transformJwkToKeyObjectSync, - public transformJwkToKeyObjectAsyncFn: JwkToKeyObjectTransformerAsync = transformJwkToKeyObjectAsync + public transformJwkToKeyObjectSyncFn: JwkToKeyObjectTransformerSync = nodeWebCompat.transformJwkToKeyObjectSync, + public transformJwkToKeyObjectAsyncFn: JwkToKeyObjectTransformerAsync = nodeWebCompat.transformJwkToKeyObjectAsync ) {} /** @@ -744,10 +774,10 @@ export class KeyObjectCache { if (!issuer) { return this.transformJwkToKeyObjectSyncFn(jwk); } - const fromCache = this.getFromCache(jwk, issuer); + const fromCache = this.publicKeys.get(issuer)?.get(jwk.kid); if (fromCache) return fromCache; const publicKey = this.transformJwkToKeyObjectSyncFn(jwk); - this.putInCache(jwk, issuer, publicKey); + this.putKeyObjectInCache(jwk, issuer, publicKey); return publicKey; } @@ -758,21 +788,18 @@ export class KeyObjectCache { if (!issuer) { return this.transformJwkToKeyObjectAsyncFn(jwk); } - const fromCache = this.getFromCache(jwk, issuer); + const fromCache = this.publicKeys.get(issuer)?.get(jwk.kid); if (fromCache) return fromCache; const publicKey = await this.transformJwkToKeyObjectAsyncFn(jwk); - this.putInCache(jwk, issuer, publicKey); + this.putKeyObjectInCache(jwk, issuer, publicKey); return publicKey; } - private getFromCache(jwk: Jwk, issuer: Issuer) { - const cachedPublicKey = this.publicKeys.get(issuer)?.get(jwk.kid); - if (cachedPublicKey) { - return cachedPublicKey; - } - } - - private putInCache(jwk: Jwk, issuer: string, publicKey: GenericKeyObject) { + private putKeyObjectInCache( + jwk: Jwk, + issuer: string, + publicKey: GenericKeyObject + ) { const cachedIssuer = this.publicKeys.get(issuer); if (cachedIssuer) { cachedIssuer.set(jwk.kid, publicKey); diff --git a/src/jwt.ts b/src/jwt.ts index ba5b5c2..51403b3 100644 --- a/src/jwt.ts +++ b/src/jwt.ts @@ -16,7 +16,7 @@ import { JwtParseError, ParameterValidationError, } from "./error.js"; -import { parseB64UrlString } from "#node-web-compat"; +import { nodeWebCompat } from "#node-web-compat"; /** * Assert that the argument is a valid JWT header object. @@ -114,7 +114,7 @@ export function decomposeJwt(jwt: unknown): { // B64 decode header and payload const [headerString, payloadString] = [headerB64, payloadB64].map( - parseB64UrlString + nodeWebCompat.parseB64UrlString ); // Parse header diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 95cb99f..b5dcf54 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -4,36 +4,10 @@ // Node.js implementations for the node-web-compatibility layer import { createPublicKey, createVerify, KeyObject } from "crypto"; -import { - JwkToKeyObjectTransformerSync, - JwsVerificationFunctionSync, -} from "./jwt-rsa"; import { Jwk } from "./jwk.js"; import { constructPublicKeyInDerFormat } from "./asn1.js"; -export { fetchJson } from "./https-node.js"; -import { wrapResultInPromise } from "./typing-util.js"; - -/** - * Transform the JWK into an RSA public key in Node.js native key object format - * - * @param jwk: the JWK - * @returns the RSA public key in Node.js native key object format - */ -export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = ( - jwk: Jwk -) => - createPublicKey({ - key: constructPublicKeyInDerFormat( - Buffer.from(jwk.n, "base64"), - Buffer.from(jwk.e, "base64") - ), - format: "der", - type: "spki", - }); - -export const transformJwkToKeyObjectAsync = wrapResultInPromise( - transformJwkToKeyObjectSync -); +import { fetchJson } from "./https-node.js"; +import { NodeWebCompat } from "./node-web-compat"; /** * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names @@ -44,19 +18,41 @@ enum JwtSignatureAlgorithms { RS512 = "RSA-SHA512", } -export const verifySignatureSync: JwsVerificationFunctionSync = ({ - alg, - keyObject, - jwsSigningInput, - signature, -}) => { - // eslint-disable-next-line security/detect-object-injection - return createVerify(JwtSignatureAlgorithms[alg]) - .update(jwsSigningInput) - .verify(keyObject as KeyObject, signature, "base64"); +export const nodeWebCompat: NodeWebCompat = { + fetchJson, + transformJwkToKeyObjectSync: (jwk: Jwk) => + createPublicKey({ + key: constructPublicKeyInDerFormat( + Buffer.from(jwk.n, "base64"), + Buffer.from(jwk.e, "base64") + ), + format: "der", + type: "spki", + }), + transformJwkToKeyObjectAsync: async (jwk: Jwk) => + createPublicKey({ + key: constructPublicKeyInDerFormat( + Buffer.from(jwk.n, "base64"), + Buffer.from(jwk.e, "base64") + ), + format: "der", + type: "spki", + }), + parseB64UrlString: (b64: string): string => + Buffer.from(b64, "base64").toString("utf8"), + verifySignatureSync: ({ alg, keyObject, jwsSigningInput, signature }) => + // eslint-disable-next-line security/detect-object-injection + createVerify(JwtSignatureAlgorithms[alg]) + .update(jwsSigningInput) + .verify(keyObject as KeyObject, signature, "base64"), + verifySignatureAsync: async ({ + alg, + keyObject, + jwsSigningInput, + signature, + }) => + // eslint-disable-next-line security/detect-object-injection + createVerify(JwtSignatureAlgorithms[alg]) + .update(jwsSigningInput) + .verify(keyObject as KeyObject, signature, "base64"), }; - -export const verifySignatureAsync = wrapResultInPromise(verifySignatureSync); - -export const parseB64UrlString = (b64: string): string => - Buffer.from(b64, "base64").toString("utf8"); diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 5145852..8bc7c36 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -3,59 +3,9 @@ // // Web implementations for the node-web-compatibility layer -import { - JwkToKeyObjectTransformerSync, - JwkToKeyObjectTransformerAsync, - JwsVerificationFunctionSync, - JwsVerificationFunctionAsync, -} from "./jwt-rsa.js"; import { Jwk } from "./jwk.js"; -import { Json } from "./safe-json-parse.js"; import { NotSupportedError } from "./error.js"; - -export const fetchJson: ( - uri: string, - requestOptions?: Record, - data?: Uint8Array -) => Promise = (uri, requestOptions, data) => - fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()); - -export const transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync = - () => { - throw new NotSupportedError( - "Synchronously transforming a JWK into a key object is not supported in the browser" - ); - }; -export const verifySignatureSync: JwsVerificationFunctionSync = () => { - throw new NotSupportedError( - "Synchronously verifying a JWT signature is not supported in the browser" - ); -}; - -/** - * Transform the JWK into an RSA public key in WebCrypto native key object format - * - * @param jwk: the JWK - * @returns the RSA public key in EbCrypto native key object format - */ -export const transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync = ( - jwk: Jwk -) => { - return window.crypto.subtle.importKey( - "jwk", - jwk, - { - name: "RSASSA-PKCS1-v1_5", - hash: { - name: JwtSignatureAlgorithmsWebCrypto[ - jwk.alg as keyof typeof JwtSignatureAlgorithmsWebCrypto - ], - }, - }, - false, - ["verify"] - ); -}; +import { NodeWebCompat } from "./node-web-compat"; /** * Enum to map supported JWT signature algorithms with WebCrypto message digest algorithm names @@ -66,23 +16,46 @@ enum JwtSignatureAlgorithmsWebCrypto { RS512 = "SHA-512", } -export const verifySignatureAsync: JwsVerificationFunctionAsync = ({ - jwsSigningInput, - keyObject, - signature, -}) => - window.crypto.subtle.verify( - // eslint-disable-next-line security/detect-object-injection - { - name: "RSASSA-PKCS1-v1_5", - }, - keyObject as CryptoKey, - bufferFromBase64url(signature), - new TextEncoder().encode(jwsSigningInput) - ); - -export const parseB64UrlString = (b64: string): string => { - return new TextDecoder().decode(bufferFromBase64url(b64)); +export const nodeWebCompat: NodeWebCompat = { + fetchJson: (uri, requestOptions, data) => + fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()), + transformJwkToKeyObjectSync: () => { + throw new NotSupportedError( + "Synchronously transforming a JWK into a key object is not supported in the browser" + ); + }, + transformJwkToKeyObjectAsync: (jwk: Jwk) => + window.crypto.subtle.importKey( + "jwk", + jwk, + { + name: "RSASSA-PKCS1-v1_5", + hash: { + name: JwtSignatureAlgorithmsWebCrypto[ + jwk.alg as keyof typeof JwtSignatureAlgorithmsWebCrypto + ], + }, + }, + false, + ["verify"] + ), + verifySignatureSync: () => { + throw new NotSupportedError( + "Synchronously verifying a JWT signature is not supported in the browser" + ); + }, + verifySignatureAsync: ({ jwsSigningInput, keyObject, signature }) => + window.crypto.subtle.verify( + // eslint-disable-next-line security/detect-object-injection + { + name: "RSASSA-PKCS1-v1_5", + }, + keyObject as CryptoKey, + bufferFromBase64url(signature), + new TextEncoder().encode(jwsSigningInput) + ), + parseB64UrlString: (b64: string): string => + new TextDecoder().decode(bufferFromBase64url(b64)), }; const bufferFromBase64url = (function () { diff --git a/src/node-web-compat.d.ts b/src/node-web-compat.d.ts deleted file mode 100644 index 999c2e0..0000000 --- a/src/node-web-compat.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Compatibility layer, to make this lib work in both Node.js and Web -// This file just contains stubs for typings - -import { Json } from "./safe-json-parse.js"; -import { - JwkToKeyObjectTransformerSync, - JwkToKeyObjectTransformerAsync, - JwsVerificationFunctionSync, - JwsVerificationFunctionAsync, -} from "./jwt-rsa"; - -// Convert base64 to UTF8 -export let utf8StringFromB64String: (b64: string) => string; - -// Fetch JSON -export let fetchJson: ( - uri: string, - requestOptions?: Record, - data?: Uint8Array -) => Promise; - -export let transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; -export let transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync; -export let verifySignatureSync: JwsVerificationFunctionSync; -export let verifySignatureAsync: JwsVerificationFunctionAsync; diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts new file mode 100644 index 0000000..49a1720 --- /dev/null +++ b/src/node-web-compat.ts @@ -0,0 +1,26 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Compatibility layer, to make this lib work in both Node.js and Web +// This file just contains stubs for typings + +import { Json } from "./safe-json-parse.js"; +import { + JwkToKeyObjectTransformerSync, + JwkToKeyObjectTransformerAsync, + JwsVerificationFunctionSync, + JwsVerificationFunctionAsync, +} from "./jwt-rsa"; + +export interface NodeWebCompat { + transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; + transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync; + verifySignatureSync: JwsVerificationFunctionSync; + verifySignatureAsync: JwsVerificationFunctionAsync; + parseB64UrlString: (b64: string) => string; + fetchJson: ( + uri: string, + requestOptions?: Record, + data?: Uint8Array + ) => Promise; +} diff --git a/src/typing-util.ts b/src/typing-util.ts index 4c1bdcf..4fdaaf8 100644 --- a/src/typing-util.ts +++ b/src/typing-util.ts @@ -58,13 +58,3 @@ export type Properties = StillToProvideProperties< export type AsAsync unknown> = ( ...args: Parameters ) => Promise>; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function wrapResultInPromise unknown>( - toWrap: T -) { - return function (...args: Parameters): Promise> { - const res = toWrap(...args) as ReturnType; - return Promise.resolve(res); - }; -} diff --git a/tests/unit/jwt-rsa.test.ts b/tests/unit/jwt-rsa.test.ts index 2c2a32f..511b60b 100644 --- a/tests/unit/jwt-rsa.test.ts +++ b/tests/unit/jwt-rsa.test.ts @@ -29,7 +29,7 @@ import { verifyJwtSync, KeyObjectCache, } from "../../src/jwt-rsa"; -import { transformJwkToKeyObjectSync } from "../../src/node-web-compat-node"; +import { nodeWebCompat } from "../../src/node-web-compat-node"; import { JwksCache, Jwks } from "../../src/jwk"; import { performance } from "perf_hooks"; import { KeyObject } from "crypto"; @@ -1482,7 +1482,9 @@ describe("unit tests jwt verifier", () => { describe("public key cache", () => { test("happy flow with cache", () => { - const jwkToKeyObjectTransformerSpy = jest.fn(transformJwkToKeyObjectSync); + const jwkToKeyObjectTransformerSpy = jest.fn( + nodeWebCompat.transformJwkToKeyObjectSync + ); const pubkeyCache = new KeyObjectCache(jwkToKeyObjectTransformerSpy); const issuer = "testissuer"; const pubkey = pubkeyCache.transformJwkToKeyObjectSync( From 0f78c4950061ef2ab5d3fbb51b1927b07b6d67e4 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 1 Mar 2022 22:29:48 +0100 Subject: [PATCH 27/59] Comment tweaks --- tests/cognito/jest.config.js | 1 - tests/jest-ts-js-resolver.js | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cognito/jest.config.js b/tests/cognito/jest.config.js index 656ee2f..58ad409 100644 --- a/tests/cognito/jest.config.js +++ b/tests/cognito/jest.config.js @@ -6,7 +6,6 @@ module.exports = { }, testEnvironment: "node", moduleNameMapper: { - // Jest, why do we need this ... :| "#node-web-compat": "/node_modules/aws-jwt-verify/dist/cjs/node-web-compat-node.js", "aws-jwt-verify/https": diff --git a/tests/jest-ts-js-resolver.js b/tests/jest-ts-js-resolver.js index 85d1375..c701e63 100644 --- a/tests/jest-ts-js-resolver.js +++ b/tests/jest-ts-js-resolver.js @@ -1,5 +1,5 @@ /** - * Custom resolver for jest, needed because of this issue: https://github.com/kulshekhar/ts-jest/issues/1057 + * Custom resolver for jest */ const path = require("path"); const srcPath = path.join(__dirname, "..", "src"); @@ -12,6 +12,7 @@ module.exports = (request, options) => { "./node-web-compat-node.ts" ); } else { + // needed because of this issue: https://github.com/kulshekhar/ts-jest/issues/1057 request = request.replace(/\.js$/, ".ts"); } } From 675657eadb3f17494310334e23259988a2d6b306 Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Tue, 1 Mar 2022 20:38:12 -0600 Subject: [PATCH 28/59] run prettier --- .prettierignore | 1 + tests/vite-app/.gitignore | 1 + tests/vite-app/README.md | 1 + .../cypress/fixtures/example-JWKS.json | 13 ++- .../vite-app/cypress/fixtures/token-data.json | 9 ++- .../cypress/integration/forminputs.spec.ts | 80 +++++++++++-------- .../cypress/integration/unittests.spec.ts | 22 ++--- tests/vite-app/cypress/plugins/index.js | 6 +- tests/vite-app/cypress/support/index.js | 2 +- tests/vite-app/index.html | 17 +++- tests/vite-app/package.json | 2 + tests/vite-app/public/example-JWKS.json | 13 ++- tests/vite-app/src/main.ts | 33 ++++---- tests/vite-app/src/style.css | 8 +- tests/vite-app/util/generateExampleTokens.ts | 63 ++++++++------- tests/vite-app/vite.config.ts | 5 +- 16 files changed, 167 insertions(+), 109 deletions(-) diff --git a/.prettierignore b/.prettierignore index 23a5bbd..9222a0d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -27,3 +27,4 @@ tests/installation-and-basic-usage/*.js tests/cognito/cdk.out/* tests/import-tests/typescript.js tests/import-tests/should-not-compile.js +tests/vite-app/util/generateExampleTokens.js diff --git a/tests/vite-app/.gitignore b/tests/vite-app/.gitignore index 31f7d53..4b29b63 100644 --- a/tests/vite-app/.gitignore +++ b/tests/vite-app/.gitignore @@ -1,3 +1,4 @@ +cypress/videos !cypress/plugins/index.js !cypress/support/commands.js !cypress/support/index.js \ No newline at end of file diff --git a/tests/vite-app/README.md b/tests/vite-app/README.md index d2f01c8..be4cbe9 100644 --- a/tests/vite-app/README.md +++ b/tests/vite-app/README.md @@ -11,6 +11,7 @@ This is a Vite project allowing browser-based testing using Cypress. - Run the Cypress tests: `npm run cypress:open` To test the Vite distribution build: + - Start the Vite preview server: `npm run preview` - Run the Cypress tests: `npm run cypress:open:preview` diff --git a/tests/vite-app/cypress/fixtures/example-JWKS.json b/tests/vite-app/cypress/fixtures/example-JWKS.json index 3a7721d..1701388 100644 --- a/tests/vite-app/cypress/fixtures/example-JWKS.json +++ b/tests/vite-app/cypress/fixtures/example-JWKS.json @@ -1 +1,12 @@ -{"keys":[{"kty":"RSA","kid":"iMW83Los9mTpHPb0MEKS2MfLvY3DHIGlnxOWrBHVlYY","use":"sig","alg":"RS256","e":"AQAB","n":"tORTd1BXbBBN-KMbDja5vqIQzRkHzBJk9AlSQzYKGEoB4RbqxQHADde6pt7VunvP7xiZPI6dJQpphc9Vn9zxnIZR2qfCOPXpoE5lamKoNRUXl_iNs2yMvSrmfkY_snEpcmQeOF2wHAWVuV6dP94RcWCIFlIrdsclDy6dMdhigGxCBZrKW_vd-LbyCAvJePZU1TnTLxOAJNaONomX89z6_nDpkp3L5x1tOBTFIxvtaMAnZvVUcqQ5KoyjHRfX4gSKENGCpNzx-g2PYVD1SgyOLNT0LJN6mHnBu7FGec8At0nc-6xE1GxE2PcwC8yBD8RshYxX5flcYrd-lkxuN3U6SQ"}]} \ No newline at end of file +{ + "keys": [ + { + "kty": "RSA", + "kid": "WbPMWUJPfuTXe8havn18lUHO-QJ2P6IPZlCfowTkwao", + "use": "sig", + "alg": "RS256", + "e": "AQAB", + "n": "wagyQ14Hac7Z6dJMBiXJRk2yxxrYolj9Zb8yDbGBDYPiewNISfNAeRklCbQj_nqYV17wgBQVgPP1mPDhbGKoCBP0xkR2k3g_LROfbVqZL5jk0QMuQhi209lR1QZL_r5wVMCtavdE78ZqeQTGUKUOQNv_RJDtY2-XESxHOJU5UU-bpE0VxuV65cdpJhGRL9nCHx4azz62BhMt1t6KFLW1pFw-1DwNq2Q13eAC7ix_hAtOH8ZdWjt86GhGTWtc0v5ntaTkLs9fhfppBs6U4U8BKULJ3Ck2o0a3feJGNfcjaazMCYWK9axyFGU8_t_ZTOMQ6J5yEohrwsn3qIPAhUKhdQ" + } + ] +} diff --git a/tests/vite-app/cypress/fixtures/token-data.json b/tests/vite-app/cypress/fixtures/token-data.json index a0f412f..cf34b78 100644 --- a/tests/vite-app/cypress/fixtures/token-data.json +++ b/tests/vite-app/cypress/fixtures/token-data.json @@ -1 +1,8 @@ -{"ISSUER":"https://example.com","AUDIENCE":"aws-jwt-verify","JWKSURI":"/example-JWKS.json","VAILD_TOKEN":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImlNVzgzTG9zOW1UcEhQYjBNRUtTMk1mTHZZM0RISUdsbnhPV3JCSFZsWVkifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NTkyNDg5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NTkyNDg5NiwiZXhwIjoxNjc3NDYwODk2LCJqdGkiOiJhZjYyMGNmYy1kMmY0LTQzOTAtYTFkMC1iYmNmMDZlOTg5YmQiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.jBU1OCAbGP4OgGMPvkbPorYOj_OQuT-HjFwvUlOYKKdGUD0JjwOhUlWkqMCVt2WWaAbAcP4nhEUkXvsPVO14bV0X5JuE1C6LtCt8oSL8sRYGMpUIjg5PU_ZLAe2p1fajP-gG8zTkiXvs9LJwm4LbwmQJzGU_GFR1kjEnlLQj07mgow83h6XvNkE-9UWxKI8hspIlFgVUcIR6Hkz3OR9uuSgax6SFuVyU1DR9i7KYyKzTdwc-V3F9BNO4BCeuCKMW1xEu438zd6F4mfD-k5PacN922Yx_OJduJNKmQEryapxtIX43exhaTJooa8tEXGEYytVgHG75n8p7xcMWOLft3A","EXPIRED_TOKEN":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImlNVzgzTG9zOW1UcEhQYjBNRUtTMk1mTHZZM0RISUdsbnhPV3JCSFZsWVkifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NTkyNDg5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NTgzODQ5NiwiZXhwIjoxNjQ1OTI0ODk2LCJqdGkiOiI0YzNhZDQ4Yy1iMmNiLTQ3MWMtYTMxZC0zOWExMzYzODVhZWEiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.snYPYfVXciiehMHQZ_OFQeenGVPpUXBMaxUykTEzv-VvYXVjUHYHSgSJh5FGza0THc_6ZtGInQfRmWXCXoWtjli2_V7xnRVDcafXK4thD9CS4AeiC0plIFvZCKVf9Nt-LjpmMho3DdEDdDTOi1l0_vaIPZeZnikm3ajjmFl_3P81ynyUh4e6eqcrXGWaKjeDOQu-XvRTPnrirLDgyL9OiA1Haroqs9kfoct-s7GmphZq83KPgYFhekdDCJsPhkhagXEC8gZWpjlE8PAmBQLlaSRKdQRfnEQeNdKUvjjLFyAiIeey1GzNZDuukqtoRrVBlGgd1qITWxvxmAYmuqp6pg","NOT_YET_VALID_TOKEN":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImlNVzgzTG9zOW1UcEhQYjBNRUtTMk1mTHZZM0RISUdsbnhPV3JCSFZsWVkifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NTkyNDg5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3NzU0NzI5NiwiZXhwIjoxNjc3NTQ3MzI2LCJqdGkiOiJmMGYwYmI4Ni03MzlkLTQ3YjUtYTNlZi1kMzgwNWE3ZWVhNjUiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.dDWuAQhy-nAjtExItSm48FyGJMFY1yK1FVlLTkCPJ4fNgC14W0BoVx9uHNzoBibHNwbnzltaMWZyqfBz8mfLgRIDGwswLyh-KxPyd3i8DGKuStrMb1mpbdinI9SkCAjRV0v9xA3XOrG-U0kZSd9_D15t8mrY9M7d7M4xXrGBAeRAYcY3R4VHyBjv-M6FMi7Xbf1saRa7MgS4OEh2aCYthvCnXYZqCL88zHgInK928oQiF9U_VvoVkrzqVJWs19iI0L5fRkZZe-txC5ha-x5KOd8gH_YvTYam8bBgZxT60wcklqXrefriXb6vDb4Zi7Lz8btejvjN3NbriduGRre-xg"} \ No newline at end of file +{ + "ISSUER": "https://example.com", + "AUDIENCE": "aws-jwt-verify", + "JWKSURI": "/example-JWKS.json", + "VAILD_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjE4ODIyOSwiZXhwIjoxNjc3NzI0MjI5LCJqdGkiOiI1OTY1ZjlmNS0xMGFlLTQ4ZTYtODRiYy1hOGIwYzFhMzljODkiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.t3pcCcpJTxRZZvz7W26XT0vn1BX2BRxwnqAsIYAP2vK0TklrpRQNUrMs0k6jwnyzQaXUXE4vO-KV9VnAbUbCe5IwmVnKx94VdrH6rUJeYCfw8SLnLiFqzx5kWz_gCA81o77wdRUDyA581_cDLGGCE8FMrf4G3O-WQ1KPRrFAN7BHZUJCx6b0EUViRKkQ-yGWr1jomT550W9qTwsDo3xFOEWkAgAk6UTYK55zV0AxbfU1qo37EpLLIzGg3dsBoijfcPIt6qaZi4I6aRGtu-y1iJOBmZZPXq5NqcjaYrsHNU8HmeAT11j02c5w7zHC-_XaPDGI7SwoaAWWuCvBAMhXRw", + "EXPIRED_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjEwMTgyOSwiZXhwIjoxNjQ2MTg4MjI5LCJqdGkiOiI3NjQzZjliYS1kZDk5LTQyY2ItODhlYy1mMjgxY2Q2ZWVlOTEiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.FhyahSgofN1G0cGnwOMo9pK5yztXhOiBaSpondDE26-8srQN-KhWm1beHLZLXPt_7b5RqbGHGHZlCNVGMaBtPYIk-d-FrrQouD_ikjumtV6aLFkQfU5JBCETHkeFBT8MXZkglXc2qFwYDxlvoRM32CeHIG-mG2YQquOnVdueHdUBFgHNjmA5mnedgG4hTeL2-ql8u0XCJxvISFsU5pQoUgls_gIx7-8s_8XsF36EoEgwLsD2nrYghjNuoxNIP24qDIgi_p6a_mxHhqOYgNi3Ffs_9dbr21zH5CG-lac-qb960munnRJhw9NZrcHsAxOENn3NsqivyCYFVS1fPjjPyQ", + "NOT_YET_VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3NzgxMDYyOSwiZXhwIjoxNjc3ODEwNjU5LCJqdGkiOiJiMzFhYmMxZC0zNTViLTQ5YWEtOGQ5Mi03MGI2ZDU3ZWU4ZGMiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.IvdnOOb_DaSDG4xFIbK7aQ25T4hHTmFlzXd0fGkBwpiudtqT-wIsLJM638yKOpIWxSVeXGJ7De0E0PFTIyri-_y0R7zlhiCzTxK_zMW0LXh6Uo-mfdUWMWBtvCqm4e2cfsUTqsQ49w2VI-FUHClcFIMFlCk9r-2TurCdhaEOhqbyA8yUqHd9krWi52Zg5h1ba6bQL8rNCanzG7AzaMm-1WZQPFN4J6AzgaugxPyhfDwyeBOLoqlFgZKjhlL6Vbsj2Ed_v8GLgLWFBTi9niHiCxOIp0UgHfi4sf40UYv1uQlC9gQ1cUIGEqLozg7WeoxkHZ57q9PpEbY_hmSvAW0lsg" +} diff --git a/tests/vite-app/cypress/integration/forminputs.spec.ts b/tests/vite-app/cypress/integration/forminputs.spec.ts index df66244..7614039 100644 --- a/tests/vite-app/cypress/integration/forminputs.spec.ts +++ b/tests/vite-app/cypress/integration/forminputs.spec.ts @@ -1,75 +1,85 @@ /// -import { ISSUER, AUDIENCE, JWKSURI, VAILD_TOKEN, EXPIRED_TOKEN, NOT_YET_VALID_TOKEN } from '../fixtures/token-data.json'; - -describe('enable Verify RSA', () => { +import { + ISSUER, + AUDIENCE, + JWKSURI, + VAILD_TOKEN, + EXPIRED_TOKEN, + NOT_YET_VALID_TOKEN, +} from "../fixtures/token-data.json"; + +describe("enable Verify RSA", () => { it('enables the "Verify RSA" button', () => { - cy.visit('/'); + cy.visit("/"); - cy.get('#verifyrsa').should('be.disabled'); - cy.get('#result').should('have.text', 'Unverified'); + cy.get("#verifyrsa").should("be.disabled"); + cy.get("#result").should("have.text", "Unverified"); - cy.get('#jwt').type('JWT'); - cy.get('#verifyrsa').should('not.be.disabled'); + cy.get("#jwt").type("JWT"); + cy.get("#verifyrsa").should("not.be.disabled"); }); }); -describe('click Verify RSA', () => { - const INVAILD_ISSUER = 'https://example.org'; - const INVAILD_JWKSURI = '/notexample-JWKS.json'; +describe("click Verify RSA", () => { + const INVAILD_ISSUER = "https://example.org"; + const INVAILD_JWKSURI = "/notexample-JWKS.json"; beforeEach(() => { - cy.visit('/'); + cy.visit("/"); }); - const typeInputsAndClick = (jwt, issuer = '', audience= '', jwksuri = '') => { - cy.get('#jwt').type(jwt, {delay: 0}); + const typeInputsAndClick = ( + jwt, + issuer = "", + audience = "", + jwksuri = "" + ) => { + cy.get("#jwt").type(jwt, { delay: 0 }); if (issuer) { - cy.get('#issuer').type(issuer); + cy.get("#issuer").type(issuer); } if (audience) { - cy.get('#audience').type(audience); + cy.get("#audience").type(audience); } if (jwksuri) { - cy.get('#jwksuri').type(jwksuri); + cy.get("#jwksuri").type(jwksuri); } - cy.get('#verifyrsa').click(); + cy.get("#verifyrsa").click(); }; - it('valid token', () => { + it("valid token", () => { typeInputsAndClick(VAILD_TOKEN, ISSUER, AUDIENCE, JWKSURI); - cy.get('#result').should('have.text', 'Verified'); + cy.get("#result").should("have.text", "Verified"); }); - it('expired token', () => { + it("expired token", () => { typeInputsAndClick(EXPIRED_TOKEN, ISSUER, AUDIENCE, JWKSURI); - cy.get('#result').should('include.text', 'Token expired at '); + cy.get("#result").should("include.text", "Token expired at "); }); - it('not yet valid token', () => { + it("not yet valid token", () => { typeInputsAndClick(NOT_YET_VALID_TOKEN, ISSUER, AUDIENCE, JWKSURI); - cy.get('#result').should('include.text', 'Token can\'t be used before '); + cy.get("#result").should("include.text", "Token can't be used before "); }); - it('invalid issuer', () => { - typeInputsAndClick(VAILD_TOKEN, INVAILD_ISSUER, '', JWKSURI); + it("invalid issuer", () => { + typeInputsAndClick(VAILD_TOKEN, INVAILD_ISSUER, "", JWKSURI); - cy.get('#result').should('include.text', 'Issuer not allowed'); + cy.get("#result").should("include.text", "Issuer not allowed"); }); - it('invalid JWKS Uri', () => { - typeInputsAndClick(VAILD_TOKEN, ISSUER, '', INVAILD_JWKSURI); + it("invalid JWKS Uri", () => { + typeInputsAndClick(VAILD_TOKEN, ISSUER, "", INVAILD_JWKSURI); // npm run dev & http://localhost:3000/' // Unexpected token < in JSON at position 0 // npm run preview & http://localhost:4173/' // Unexpected end of JSON input - cy.get('#result').should('include.text', 'Unexpected'); - cy.get('#result').should('include.text', 'JSON'); - - }); - -}); \ No newline at end of file + cy.get("#result").should("include.text", "Unexpected"); + cy.get("#result").should("include.text", "JSON"); + }); +}); diff --git a/tests/vite-app/cypress/integration/unittests.spec.ts b/tests/vite-app/cypress/integration/unittests.spec.ts index 1ab2e93..a162ad2 100644 --- a/tests/vite-app/cypress/integration/unittests.spec.ts +++ b/tests/vite-app/cypress/integration/unittests.spec.ts @@ -1,19 +1,24 @@ /// -import { JwtRsaVerifier } from 'aws-jwt-verify'; -import { VAILD_TOKEN, ISSUER, AUDIENCE, JWKSURI } from '../fixtures/token-data.json'; +import { JwtRsaVerifier } from "aws-jwt-verify"; +import { + VAILD_TOKEN, + ISSUER, + AUDIENCE, + JWKSURI, +} from "../fixtures/token-data.json"; -describe('unit tests', () => { - it('expect true', () => { +describe("unit tests", () => { + it("expect true", () => { expect(true).to.be.true; }); - it('JwtRsaVerifier create & verify', async () => { - cy.intercept('GET', JWKSURI, { fixture: 'example-JWKS' }); + it("JwtRsaVerifier create & verify", async () => { + cy.intercept("GET", JWKSURI, { fixture: "example-JWKS" }); const verifier = JwtRsaVerifier.create({ issuer: ISSUER, audience: AUDIENCE, - jwksUri: JWKSURI + jwksUri: JWKSURI, }); try { @@ -27,6 +32,5 @@ describe('unit tests', () => { expect(ex).to.be.null; } - }); -}); \ No newline at end of file +}); diff --git a/tests/vite-app/cypress/plugins/index.js b/tests/vite-app/cypress/plugins/index.js index 9101f4f..8e90e5c 100644 --- a/tests/vite-app/cypress/plugins/index.js +++ b/tests/vite-app/cypress/plugins/index.js @@ -25,14 +25,14 @@ module.exports = (on, config) => { const options = webpackPreprocessor.defaultOptions; on("file:preprocessor", webpackPreprocessor(options)); - on('dev-server:start', (options) => { + on("dev-server:start", (options) => { return startDevServer({ options, viteConfig: { - configFile: path.resolve(__dirname, '..', '..', 'vite.config.ts'), + configFile: path.resolve(__dirname, "..", "..", "vite.config.ts"), }, }); }); return config; -} +}; diff --git a/tests/vite-app/cypress/support/index.js b/tests/vite-app/cypress/support/index.js index d68db96..d076cec 100644 --- a/tests/vite-app/cypress/support/index.js +++ b/tests/vite-app/cypress/support/index.js @@ -14,7 +14,7 @@ // *********************************************************** // Import commands.js using ES2015 syntax: -import './commands' +import "./commands"; // Alternatively you can use CommonJS syntax: // require('./commands') diff --git a/tests/vite-app/index.html b/tests/vite-app/index.html index 050cc96..2235a8d 100644 --- a/tests/vite-app/index.html +++ b/tests/vite-app/index.html @@ -27,16 +27,25 @@

aws-jwt-verify

- - + +

Unverified

-
-
+
diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json index 6181dc5..df55eec 100644 --- a/tests/vite-app/package.json +++ b/tests/vite-app/package.json @@ -7,6 +7,8 @@ "build": "tsc && vite build", "preview": "vite preview", "tokengen": "tsc util/generateExampleTokens.ts && node util/generateExampleTokens.js", + "cypress:run": "cypress run", + "cypress:run:preview": "cypress run --config baseUrl=http://localhost:4173/", "cypress:open": "cypress open", "cypress:open:webpack": "DEBUG=cypress:webpack cypress open", "cypress:open:preview": "cypress open --config baseUrl=http://localhost:4173/" diff --git a/tests/vite-app/public/example-JWKS.json b/tests/vite-app/public/example-JWKS.json index 3a7721d..1701388 100644 --- a/tests/vite-app/public/example-JWKS.json +++ b/tests/vite-app/public/example-JWKS.json @@ -1 +1,12 @@ -{"keys":[{"kty":"RSA","kid":"iMW83Los9mTpHPb0MEKS2MfLvY3DHIGlnxOWrBHVlYY","use":"sig","alg":"RS256","e":"AQAB","n":"tORTd1BXbBBN-KMbDja5vqIQzRkHzBJk9AlSQzYKGEoB4RbqxQHADde6pt7VunvP7xiZPI6dJQpphc9Vn9zxnIZR2qfCOPXpoE5lamKoNRUXl_iNs2yMvSrmfkY_snEpcmQeOF2wHAWVuV6dP94RcWCIFlIrdsclDy6dMdhigGxCBZrKW_vd-LbyCAvJePZU1TnTLxOAJNaONomX89z6_nDpkp3L5x1tOBTFIxvtaMAnZvVUcqQ5KoyjHRfX4gSKENGCpNzx-g2PYVD1SgyOLNT0LJN6mHnBu7FGec8At0nc-6xE1GxE2PcwC8yBD8RshYxX5flcYrd-lkxuN3U6SQ"}]} \ No newline at end of file +{ + "keys": [ + { + "kty": "RSA", + "kid": "WbPMWUJPfuTXe8havn18lUHO-QJ2P6IPZlCfowTkwao", + "use": "sig", + "alg": "RS256", + "e": "AQAB", + "n": "wagyQ14Hac7Z6dJMBiXJRk2yxxrYolj9Zb8yDbGBDYPiewNISfNAeRklCbQj_nqYV17wgBQVgPP1mPDhbGKoCBP0xkR2k3g_LROfbVqZL5jk0QMuQhi209lR1QZL_r5wVMCtavdE78ZqeQTGUKUOQNv_RJDtY2-XESxHOJU5UU-bpE0VxuV65cdpJhGRL9nCHx4azz62BhMt1t6KFLW1pFw-1DwNq2Q13eAC7ix_hAtOH8ZdWjt86GhGTWtc0v5ntaTkLs9fhfppBs6U4U8BKULJ3Ck2o0a3feJGNfcjaazMCYWK9axyFGU8_t_ZTOMQ6J5yEohrwsn3qIPAhUKhdQ" + } + ] +} diff --git a/tests/vite-app/src/main.ts b/tests/vite-app/src/main.ts index 5851449..e54af41 100644 --- a/tests/vite-app/src/main.ts +++ b/tests/vite-app/src/main.ts @@ -1,35 +1,34 @@ -import './style.css' -import { JwtRsaVerifier } from 'aws-jwt-verify'; +import "./style.css"; +import { JwtRsaVerifier } from "aws-jwt-verify"; -const inputjwt = document.querySelector('#jwt'); -const inputissuer = document.querySelector('#issuer'); -const inputaudience = document.querySelector('#audience'); -const inputjwskuri = document.querySelector('#jwksuri'); -const button = document.querySelector('#verifyrsa'); -const result = document.querySelector('#result'); -const prettyprint = document.querySelector('#prettyprint'); +const inputjwt = document.querySelector("#jwt"); +const inputissuer = document.querySelector("#issuer"); +const inputaudience = document.querySelector("#audience"); +const inputjwskuri = document.querySelector("#jwksuri"); +const button = document.querySelector("#verifyrsa"); +const result = document.querySelector("#result"); +const prettyprint = document.querySelector("#prettyprint"); if (inputjwt) { inputjwt.onkeyup = () => { if (inputjwt && button) { - button.disabled = (inputjwt.value === ''); + button.disabled = inputjwt.value === ""; } if (result) { result.innerHTML = "Unverified"; - } - } + } + }; } if (button) { button.onclick = async () => { if (inputjwt && inputissuer && inputjwskuri && inputaudience && result) { - const verifier = JwtRsaVerifier.create({ issuer: inputissuer?.value, - audience: (inputaudience?.value === '' ? null : inputaudience.value), - jwksUri: inputjwskuri?.value + audience: inputaudience?.value === "" ? null : inputaudience.value, + jwksUri: inputjwskuri?.value, }); - + try { const payload = await verifier.verify(inputjwt.value); console.log("Token is valid. Payload:", payload); @@ -46,5 +45,5 @@ if (button) { result.innerHTML = (ex as Error).message; } } - } + }; } diff --git a/tests/vite-app/src/style.css b/tests/vite-app/src/style.css index f2b80e5..ee41744 100644 --- a/tests/vite-app/src/style.css +++ b/tests/vite-app/src/style.css @@ -1,7 +1,7 @@ #app { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; @@ -16,4 +16,4 @@ color: white; background-color: #2c3e50; margin: 0 60px 0 60px; -} \ No newline at end of file +} diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index b95bcd7..8bfb80c 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -1,18 +1,18 @@ -import { JWK, JWS } from 'node-jose'; // https://github.com/cisco/node-jose -import { v4 } from 'uuid'; -import { writeFileSync } from 'fs'; +import { JWK, JWS } from "node-jose"; // https://github.com/cisco/node-jose +import { v4 } from "uuid"; +import { writeFileSync } from "fs"; const keystore = (JWK as any).createKeyStore(); -const ISSUER = 'https://example.com'; -const AUDIENCE = 'aws-jwt-verify'; -const JWKSURI = '/example-JWKS.json'; +const ISSUER = "https://example.com"; +const AUDIENCE = "aws-jwt-verify"; +const JWKSURI = "/example-JWKS.json"; const NOW = Math.floor(Date.now() / 1000) - 30; const ONEDAY = 24 * 60 * 60; const ONEYEAR = 365 * 24 * 60 * 60; const baseTokenPayload = { - sub: 'TEST DATA', + sub: "TEST DATA", aud: AUDIENCE, iat: NOW, iss: ISSUER, @@ -23,7 +23,7 @@ const validTokenPayload = { nbf: NOW, exp: NOW + ONEYEAR, jti: v4(), - testcase: 'valid token', + testcase: "valid token", }; const expiredTokenPayload = { @@ -31,7 +31,7 @@ const expiredTokenPayload = { nbf: NOW - ONEDAY, exp: NOW, jti: v4(), - testcase: 'expired token', + testcase: "expired token", }; const notYetValidTokenPayload = { @@ -39,46 +39,46 @@ const notYetValidTokenPayload = { nbf: NOW + 366 * 24 * 60 * 60, exp: Math.floor(Date.now() / 1000) + 366 * 24 * 60 * 60, jti: v4(), - testcase: 'not yet valid token', + testcase: "not yet valid token", }; const createSign = async (jwk, payload) => { return await JWS.createSign( { - alg: 'RS256', - format: 'compact', + alg: "RS256", + format: "compact", }, jwk ) - .update(JSON.stringify(payload), 'utf8') + .update(JSON.stringify(payload), "utf8") .final(); }; const props = { - alg: 'RS256', - use: 'sig', + alg: "RS256", + use: "sig", }; const saveFile = (filename, contents) => { console.log(`writing ${filename}...`); // eslint-disable-next-line security/detect-non-literal-fs-filename - writeFileSync(filename, JSON.stringify(contents)); -} + writeFileSync(filename, JSON.stringify(contents, null, 2) + "\n"); +}; const tokendata = { - ISSUER: '', - AUDIENCE: '', - JWKSURI: '', - VAILD_TOKEN: '', - EXPIRED_TOKEN: '', - NOT_YET_VALID_TOKEN: '' + ISSUER: "", + AUDIENCE: "", + JWKSURI: "", + VAILD_TOKEN: "", + EXPIRED_TOKEN: "", + NOT_YET_VALID_TOKEN: "", }; const main = async () => { - const jwk = await keystore.generate('RSA', 2048, props); - - saveFile('public' + JWKSURI, keystore.toJSON()); - saveFile('cypress/fixtures' + JWKSURI, keystore.toJSON()); + const jwk = await keystore.generate("RSA", 2048, props); + + saveFile("public" + JWKSURI, keystore.toJSON()); + saveFile("cypress/fixtures" + JWKSURI, keystore.toJSON()); tokendata.ISSUER = ISSUER; tokendata.AUDIENCE = AUDIENCE; @@ -86,11 +86,14 @@ const main = async () => { tokendata.VAILD_TOKEN = await createSign(jwk, validTokenPayload); tokendata.EXPIRED_TOKEN = await createSign(jwk, expiredTokenPayload); - tokendata.NOT_YET_VALID_TOKEN = await createSign(jwk, notYetValidTokenPayload); + tokendata.NOT_YET_VALID_TOKEN = await createSign( + jwk, + notYetValidTokenPayload + ); - saveFile('cypress/fixtures/token-data.json', tokendata); + saveFile("cypress/fixtures/token-data.json", tokendata); - console.log('done'); + console.log("done"); }; main(); diff --git a/tests/vite-app/vite.config.ts b/tests/vite-app/vite.config.ts index 41d8b6a..290663c 100644 --- a/tests/vite-app/vite.config.ts +++ b/tests/vite-app/vite.config.ts @@ -1,5 +1,4 @@ -import { defineConfig } from 'vite'; +import { defineConfig } from "vite"; // https://vitejs.dev/config/ -export default defineConfig({ -}); +export default defineConfig({}); From 4f7a90ed2182a34af01dbeea2007d278aef86477 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 13:26:31 +0100 Subject: [PATCH 29/59] Make https fetch equivalent across Node.js and Web (except default response timeout) --- src/https-node.ts | 18 ++--------------- src/https.ts | 4 ++-- src/node-web-compat-node.ts | 4 ++++ src/node-web-compat-web.ts | 39 +++++++++++++++++++++++++++++++++---- src/node-web-compat.ts | 37 +++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 22 deletions(-) diff --git a/src/https-node.ts b/src/https-node.ts index 351ab0f..e1100dd 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -5,6 +5,7 @@ import { request } from "https"; import { IncomingHttpHeaders, RequestOptions } from "http"; +import { validateHttpsJsonResponse } from "./node-web-compat"; import { pipeline } from "stream"; import { TextDecoder } from "util"; import { safeJsonParse, Json } from "./safe-json-parse.js"; @@ -112,22 +113,7 @@ function getJsonDestination( headers: IncomingHttpHeaders ) { return async (responseIterable: AsyncIterableIterator) => { - if (statusCode === 429) { - throw new FetchError(uri, "Too many requests"); - } else if (statusCode !== 200) { - throw new NonRetryableFetchError( - uri, - `Status code is ${statusCode}, expected 200` - ); - } - if ( - !headers["content-type"]?.toLowerCase().startsWith("application/json") - ) { - throw new NonRetryableFetchError( - uri, - `Content-type is "${headers["content-type"]}", expected "application/json"` - ); - } + validateHttpsJsonResponse(uri, statusCode, headers["content-type"]); const collected = [] as Buffer[]; for await (const chunk of responseIterable) { collected.push(chunk); diff --git a/src/https.ts b/src/https.ts index 03354dd..cb09b3f 100644 --- a/src/https.ts +++ b/src/https.ts @@ -36,8 +36,8 @@ export class SimpleJsonFetcher implements JsonFetcher { defaultRequestOptions: FetchRequestOptions; constructor(props?: { defaultRequestOptions?: FetchRequestOptions }) { this.defaultRequestOptions = { - timeout: 500, // socket idle timeout (Only of use in Node.js runtime) - responseTimeout: 1500, // total round trip timeout (Only of use in Node.js runtime) + timeout: nodeWebCompat.defaultFetchTimeouts.socketIdle, + responseTimeout: nodeWebCompat.defaultFetchTimeouts.response, ...props?.defaultRequestOptions, }; } diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index b5dcf54..8160776 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -55,4 +55,8 @@ export const nodeWebCompat: NodeWebCompat = { createVerify(JwtSignatureAlgorithms[alg]) .update(jwsSigningInput) .verify(keyObject as KeyObject, signature, "base64"), + defaultFetchTimeouts: { + socketIdle: 500, + response: 1500, + }, }; diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 8bc7c36..dca2744 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -4,8 +4,9 @@ // Web implementations for the node-web-compatibility layer import { Jwk } from "./jwk.js"; -import { NotSupportedError } from "./error.js"; -import { NodeWebCompat } from "./node-web-compat"; +import { FetchError, NotSupportedError } from "./error.js"; +import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat"; +import { Json, safeJsonParse } from "./safe-json-parse"; /** * Enum to map supported JWT signature algorithms with WebCrypto message digest algorithm names @@ -17,8 +18,38 @@ enum JwtSignatureAlgorithmsWebCrypto { } export const nodeWebCompat: NodeWebCompat = { - fetchJson: (uri, requestOptions, data) => - fetch(uri, { ...requestOptions, body: data }).then((res) => res.json()), + fetchJson: async ( + uri: string, + requestOptions?: Record, + data?: Uint8Array + ) => { + const responseTimeout = Number(requestOptions?.["responseTimeout"]); + if (responseTimeout) { + const abort = new AbortController(); + setTimeout( + () => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (abort.abort as any)( + new FetchError( + uri, + `Response time-out (after ${responseTimeout} ms.)` + ) + ), + responseTimeout + ).unref(); + requestOptions = { signal: abort.signal, ...requestOptions }; + } + const response = await fetch(uri, { ...requestOptions, body: data }); + validateHttpsJsonResponse( + uri, + response.status, + response.headers.get("content-type") ?? undefined + ); + return response.text().then((text) => safeJsonParse(text) as ResultType); + }, + defaultFetchTimeouts: { + response: 3000, + }, transformJwkToKeyObjectSync: () => { throw new NotSupportedError( "Synchronously transforming a JWK into a key object is not supported in the browser" diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 49a1720..863d803 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -11,6 +11,7 @@ import { JwsVerificationFunctionSync, JwsVerificationFunctionAsync, } from "./jwt-rsa"; +import { FetchError, NonRetryableFetchError } from "./error"; export interface NodeWebCompat { transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; @@ -23,4 +24,40 @@ export interface NodeWebCompat { requestOptions?: Record, data?: Uint8Array ) => Promise; + defaultFetchTimeouts: { + socketIdle?: number; // socket idle timeout (Only supported by Node.js runtime) + response: number; // total round trip timeout + }; +} + +/** + * Sanity check a HTTPS response where we expect to get JSON data back + * + * @param uri the uri that was being requested + * @param statusCode the HTTP status code, should be 200 + * @param contentType the value of the "Content-Type" header in the response, should start with "application/json" + * @returns void - throws an error if the status code or content type aren't as expected + */ +export function validateHttpsJsonResponse( + uri: string, + statusCode?: number, + contentType?: string +): void { + if (statusCode === 429) { + throw new FetchError(uri, "Too many requests"); + } else if (statusCode !== 200) { + throw new NonRetryableFetchError( + uri, + `Status code is ${statusCode}, expected 200` + ); + } + if ( + !contentType || + !contentType.toLowerCase().startsWith("application/json") + ) { + throw new NonRetryableFetchError( + uri, + `Content-type is "${contentType}", expected "application/json"` + ); + } } From 211769c30669942d70e1c5b775ea708bdd76a0e8 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 16:50:01 +0100 Subject: [PATCH 30/59] Delete .gitignore --- src/.gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/.gitignore diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index 6ec572a..0000000 --- a/src/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!node-web-compat.d.ts From dcc2c2c3808bd762705d656b291497c1c43499b6 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 20:14:48 +0100 Subject: [PATCH 31/59] Remove esbuild dep --- package-lock.json | 499 ---------------------------------------------- package.json | 1 - 2 files changed, 500 deletions(-) diff --git a/package-lock.json b/package-lock.json index c30e42d..396bb6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "@types/jest": "^27.0.2", "@typescript-eslint/eslint-plugin": "^4.32.0", "@typescript-eslint/parser": "^4.32.0", - "esbuild": "^0.14.23", "eslint": "^7.32.0", "eslint-plugin-security": "^1.4.0", "jest": "^27.2.4", @@ -2246,344 +2245,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", - "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.14.23", - "esbuild-darwin-64": "0.14.23", - "esbuild-darwin-arm64": "0.14.23", - "esbuild-freebsd-64": "0.14.23", - "esbuild-freebsd-arm64": "0.14.23", - "esbuild-linux-32": "0.14.23", - "esbuild-linux-64": "0.14.23", - "esbuild-linux-arm": "0.14.23", - "esbuild-linux-arm64": "0.14.23", - "esbuild-linux-mips64le": "0.14.23", - "esbuild-linux-ppc64le": "0.14.23", - "esbuild-linux-riscv64": "0.14.23", - "esbuild-linux-s390x": "0.14.23", - "esbuild-netbsd-64": "0.14.23", - "esbuild-openbsd-64": "0.14.23", - "esbuild-sunos-64": "0.14.23", - "esbuild-windows-32": "0.14.23", - "esbuild-windows-64": "0.14.23", - "esbuild-windows-arm64": "0.14.23" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", - "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", - "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", - "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", - "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", - "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", - "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", - "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", - "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", - "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", - "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", - "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", - "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", - "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", - "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", - "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", - "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", - "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", - "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", - "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9151,166 +8812,6 @@ "is-symbol": "^1.0.2" } }, - "esbuild": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", - "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.14.23", - "esbuild-darwin-64": "0.14.23", - "esbuild-darwin-arm64": "0.14.23", - "esbuild-freebsd-64": "0.14.23", - "esbuild-freebsd-arm64": "0.14.23", - "esbuild-linux-32": "0.14.23", - "esbuild-linux-64": "0.14.23", - "esbuild-linux-arm": "0.14.23", - "esbuild-linux-arm64": "0.14.23", - "esbuild-linux-mips64le": "0.14.23", - "esbuild-linux-ppc64le": "0.14.23", - "esbuild-linux-riscv64": "0.14.23", - "esbuild-linux-s390x": "0.14.23", - "esbuild-netbsd-64": "0.14.23", - "esbuild-openbsd-64": "0.14.23", - "esbuild-sunos-64": "0.14.23", - "esbuild-windows-32": "0.14.23", - "esbuild-windows-64": "0.14.23", - "esbuild-windows-arm64": "0.14.23" - } - }, - "esbuild-android-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", - "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", - "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", - "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", - "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", - "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", - "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", - "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", - "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", - "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", - "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", - "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", - "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", - "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", - "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", - "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", - "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", - "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", - "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", - "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", - "dev": true, - "optional": true - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", diff --git a/package.json b/package.json index f7f1d5f..f7fe95f 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,6 @@ "@types/jest": "^27.0.2", "@typescript-eslint/eslint-plugin": "^4.32.0", "@typescript-eslint/parser": "^4.32.0", - "esbuild": "^0.14.23", "eslint": "^7.32.0", "eslint-plugin-security": "^1.4.0", "jest": "^27.2.4", From ab740ea6f2c4fb28838d62eff1368e87122d44e5 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 21:11:08 +0100 Subject: [PATCH 32/59] Fixed bugs (unref and imports) --- src/https-node.ts | 2 +- src/jwk.ts | 3 ++- src/node-web-compat-node.ts | 2 +- src/node-web-compat-web.ts | 9 +++++---- src/node-web-compat.ts | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/https-node.ts b/src/https-node.ts index e1100dd..272e3e2 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -5,7 +5,7 @@ import { request } from "https"; import { IncomingHttpHeaders, RequestOptions } from "http"; -import { validateHttpsJsonResponse } from "./node-web-compat"; +import { validateHttpsJsonResponse } from "./node-web-compat.js"; import { pipeline } from "stream"; import { TextDecoder } from "util"; import { safeJsonParse, Json } from "./safe-json-parse.js"; diff --git a/src/jwk.ts b/src/jwk.ts index 85e84a4..a87522e 100644 --- a/src/jwk.ts +++ b/src/jwk.ts @@ -171,7 +171,8 @@ export class SimplePenaltyBox implements PenaltyBox { registerFailedAttempt(jwksUri: string): void { const i = setTimeout(() => { this.waitingUris.delete(jwksUri); - }, this.waitSeconds * 1000).unref(); + }, this.waitSeconds * 1000); + if (i.unref) i.unref(); this.waitingUris.set(jwksUri, i); } registerSuccessfulAttempt(jwksUri: string): void { diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 8160776..b96c5e1 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -7,7 +7,7 @@ import { createPublicKey, createVerify, KeyObject } from "crypto"; import { Jwk } from "./jwk.js"; import { constructPublicKeyInDerFormat } from "./asn1.js"; import { fetchJson } from "./https-node.js"; -import { NodeWebCompat } from "./node-web-compat"; +import { NodeWebCompat } from "./node-web-compat.js"; /** * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index dca2744..4d71ba4 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -5,8 +5,8 @@ import { Jwk } from "./jwk.js"; import { FetchError, NotSupportedError } from "./error.js"; -import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat"; -import { Json, safeJsonParse } from "./safe-json-parse"; +import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat.js"; +import { Json, safeJsonParse } from "./safe-json-parse.js"; /** * Enum to map supported JWT signature algorithms with WebCrypto message digest algorithm names @@ -26,7 +26,7 @@ export const nodeWebCompat: NodeWebCompat = { const responseTimeout = Number(requestOptions?.["responseTimeout"]); if (responseTimeout) { const abort = new AbortController(); - setTimeout( + const i = setTimeout( () => // eslint-disable-next-line @typescript-eslint/no-explicit-any (abort.abort as any)( @@ -36,7 +36,8 @@ export const nodeWebCompat: NodeWebCompat = { ) ), responseTimeout - ).unref(); + ); + if (i.unref) i.unref(); requestOptions = { signal: abort.signal, ...requestOptions }; } const response = await fetch(uri, { ...requestOptions, body: data }); diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 863d803..0e59e6c 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -11,7 +11,7 @@ import { JwsVerificationFunctionSync, JwsVerificationFunctionAsync, } from "./jwt-rsa"; -import { FetchError, NonRetryableFetchError } from "./error"; +import { FetchError, NonRetryableFetchError } from "./error.js"; export interface NodeWebCompat { transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; From f9cbb2c146e00845e8a804a284d33e4107d15150 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 21:12:06 +0100 Subject: [PATCH 33/59] Fix test --- tests/vite-app/cypress/integration/forminputs.spec.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/vite-app/cypress/integration/forminputs.spec.ts b/tests/vite-app/cypress/integration/forminputs.spec.ts index 7614039..e43126d 100644 --- a/tests/vite-app/cypress/integration/forminputs.spec.ts +++ b/tests/vite-app/cypress/integration/forminputs.spec.ts @@ -75,11 +75,9 @@ describe("click Verify RSA", () => { it("invalid JWKS Uri", () => { typeInputsAndClick(VAILD_TOKEN, ISSUER, "", INVAILD_JWKSURI); - // npm run dev & http://localhost:3000/' - // Unexpected token < in JSON at position 0 - // npm run preview & http://localhost:4173/' - // Unexpected end of JSON input - cy.get("#result").should("include.text", "Unexpected"); - cy.get("#result").should("include.text", "JSON"); + cy.get("#result").should( + "include.text", + "Failed to fetch /notexample-JWKS.json: Status code is 404, expected 200" + ); }); }); From 9ec001c01d6d1db4e7dffa80cc78c95b60cb5f0c Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 21:12:12 +0100 Subject: [PATCH 34/59] Tweak doc --- tests/vite-app/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/vite-app/README.md b/tests/vite-app/README.md index be4cbe9..e61dba6 100644 --- a/tests/vite-app/README.md +++ b/tests/vite-app/README.md @@ -5,7 +5,7 @@ This is a Vite project allowing browser-based testing using Cypress. ## How to run the tests - Clone the repo: `git clone https://github.com/awslabs/aws-jwt-verify` -- Install dev dependencies and create installable dist: `cd aws-jwt-verify && npm install && npm run dist` +- Install dev dependencies and create installable archive: `cd aws-jwt-verify && npm install && npm run pack-for-tests` - Install Vite and Cypress dependencies: `cd tests/vite-app && npm install` - Start the Vite dev server: `npm run dev` - Run the Cypress tests: `npm run cypress:open` From 8b4ccc077e6a0b292b9eb8c9eb2df7b3ade52664 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 10:24:14 +0100 Subject: [PATCH 35/59] Rollup fix with alias --- package-lock.json | 55 +++++++++++++++++++++++++++++++---- package.json | 3 ++ tests/vite-app/vite.config.ts | 18 +++++++++++- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396bb6b..6f813af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "aws-jwt-verify", "version": "2.1.3", "license": "Apache-2.0", + "dependencies": { + "@rollup/plugin-alias": "^3.1.9" + }, "devDependencies": { "@tsconfig/node14": "^1.0.1", "@types/jest": "^27.0.2", @@ -1052,6 +1055,20 @@ "node": ">= 8" } }, + "node_modules/@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dependencies": { + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -3300,7 +3317,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -6001,6 +6017,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "2.69.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", + "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6123,7 +6154,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -7896,6 +7926,14 @@ "fastq": "^1.6.0" } }, + "@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "requires": { + "slash": "^3.0.0" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -9584,7 +9622,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -11598,6 +11635,15 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "2.69.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", + "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", + "peer": true, + "requires": { + "fsevents": "~2.3.2" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11687,8 +11733,7 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "4.0.0", diff --git a/package.json b/package.json index f7fe95f..eae4d32 100644 --- a/package.json +++ b/package.json @@ -120,5 +120,8 @@ }, "engines": { "node": ">=14.0.0" + }, + "dependencies": { + "@rollup/plugin-alias": "^3.1.9" } } diff --git a/tests/vite-app/vite.config.ts b/tests/vite-app/vite.config.ts index 290663c..bf55fb6 100644 --- a/tests/vite-app/vite.config.ts +++ b/tests/vite-app/vite.config.ts @@ -1,4 +1,20 @@ import { defineConfig } from "vite"; +import alias from "@rollup/plugin-alias"; // https://vitejs.dev/config/ -export default defineConfig({}); +export default defineConfig({ + build: { + rollupOptions: { + plugins: [ + alias({ + entries: [ + { + find: "#node-web-compat", + replacement: "./node-web-compat-web.js", + }, + ], + }), + ], + }, + }, +}); From 57a4d4058a5325696709ad90a4cc2a0fc2495009 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Wed, 2 Mar 2022 21:11:08 +0100 Subject: [PATCH 36/59] Fixed bugs (unref and imports) --- src/https-node.ts | 2 +- src/jwk.ts | 3 ++- src/node-web-compat-node.ts | 2 +- src/node-web-compat-web.ts | 9 +++++---- src/node-web-compat.ts | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/https-node.ts b/src/https-node.ts index e1100dd..272e3e2 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -5,7 +5,7 @@ import { request } from "https"; import { IncomingHttpHeaders, RequestOptions } from "http"; -import { validateHttpsJsonResponse } from "./node-web-compat"; +import { validateHttpsJsonResponse } from "./node-web-compat.js"; import { pipeline } from "stream"; import { TextDecoder } from "util"; import { safeJsonParse, Json } from "./safe-json-parse.js"; diff --git a/src/jwk.ts b/src/jwk.ts index 85e84a4..a87522e 100644 --- a/src/jwk.ts +++ b/src/jwk.ts @@ -171,7 +171,8 @@ export class SimplePenaltyBox implements PenaltyBox { registerFailedAttempt(jwksUri: string): void { const i = setTimeout(() => { this.waitingUris.delete(jwksUri); - }, this.waitSeconds * 1000).unref(); + }, this.waitSeconds * 1000); + if (i.unref) i.unref(); this.waitingUris.set(jwksUri, i); } registerSuccessfulAttempt(jwksUri: string): void { diff --git a/src/node-web-compat-node.ts b/src/node-web-compat-node.ts index 8160776..b96c5e1 100644 --- a/src/node-web-compat-node.ts +++ b/src/node-web-compat-node.ts @@ -7,7 +7,7 @@ import { createPublicKey, createVerify, KeyObject } from "crypto"; import { Jwk } from "./jwk.js"; import { constructPublicKeyInDerFormat } from "./asn1.js"; import { fetchJson } from "./https-node.js"; -import { NodeWebCompat } from "./node-web-compat"; +import { NodeWebCompat } from "./node-web-compat.js"; /** * Enum to map supported JWT signature algorithms with OpenSSL message digest algorithm names diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index dca2744..4d71ba4 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -5,8 +5,8 @@ import { Jwk } from "./jwk.js"; import { FetchError, NotSupportedError } from "./error.js"; -import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat"; -import { Json, safeJsonParse } from "./safe-json-parse"; +import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat.js"; +import { Json, safeJsonParse } from "./safe-json-parse.js"; /** * Enum to map supported JWT signature algorithms with WebCrypto message digest algorithm names @@ -26,7 +26,7 @@ export const nodeWebCompat: NodeWebCompat = { const responseTimeout = Number(requestOptions?.["responseTimeout"]); if (responseTimeout) { const abort = new AbortController(); - setTimeout( + const i = setTimeout( () => // eslint-disable-next-line @typescript-eslint/no-explicit-any (abort.abort as any)( @@ -36,7 +36,8 @@ export const nodeWebCompat: NodeWebCompat = { ) ), responseTimeout - ).unref(); + ); + if (i.unref) i.unref(); requestOptions = { signal: abort.signal, ...requestOptions }; } const response = await fetch(uri, { ...requestOptions, body: data }); diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 863d803..0e59e6c 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -11,7 +11,7 @@ import { JwsVerificationFunctionSync, JwsVerificationFunctionAsync, } from "./jwt-rsa"; -import { FetchError, NonRetryableFetchError } from "./error"; +import { FetchError, NonRetryableFetchError } from "./error.js"; export interface NodeWebCompat { transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; From 55707449b834397d5743edc1e3c92a1f1e7bab84 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 12:41:05 +0100 Subject: [PATCH 37/59] Organize code tweaks --- .gitignore | 1 + .prettierignore | 1 + package.json | 1 + src/https-common.ts | 38 ++++++++++++++++++++++++++++++++ src/https-node.ts | 2 +- src/node-web-compat-web.ts | 3 ++- src/node-web-compat.ts | 44 ++++++++------------------------------ 7 files changed, 53 insertions(+), 37 deletions(-) create mode 100644 src/https-common.ts diff --git a/.gitignore b/.gitignore index dd56702..205f2b4 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ asn1.d.ts assert.d.ts cognito-verifier.d.ts error.d.ts +https-common.d.ts https-node.d.ts https.d.ts index.d.ts diff --git a/.prettierignore b/.prettierignore index bd16593..cc59232 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,6 +8,7 @@ asn1.d.ts assert.d.ts cognito-verifier.d.ts error.d.ts +https-common.d.ts https-node.d.ts https.d.ts index.d.ts diff --git a/package.json b/package.json index f7fe95f..8079e7c 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "cognito-verifier.d.ts", "dist", "error.d.ts", + "https-common.d.ts", "https-node.d.ts", "https.d.ts", "index.d.ts", diff --git a/src/https-common.ts b/src/https-common.ts new file mode 100644 index 0000000..277cf0d --- /dev/null +++ b/src/https-common.ts @@ -0,0 +1,38 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Lower-level HTTPS functionalities, common for Node.js and Web + +import { FetchError, NonRetryableFetchError } from "./error.js"; + +/** + * Sanity check a HTTPS response where we expect to get JSON data back + * + * @param uri the uri that was being requested + * @param statusCode the HTTP status code, should be 200 + * @param contentType the value of the "Content-Type" header in the response, should start with "application/json" + * @returns void - throws an error if the status code or content type aren't as expected + */ +export function validateHttpsJsonResponse( + uri: string, + statusCode?: number, + contentType?: string +): void { + if (statusCode === 429) { + throw new FetchError(uri, "Too many requests"); + } else if (statusCode !== 200) { + throw new NonRetryableFetchError( + uri, + `Status code is ${statusCode}, expected 200` + ); + } + if ( + !contentType || + !contentType.toLowerCase().startsWith("application/json") + ) { + throw new NonRetryableFetchError( + uri, + `Content-type is "${contentType}", expected "application/json"` + ); + } +} diff --git a/src/https-node.ts b/src/https-node.ts index 272e3e2..fb70965 100644 --- a/src/https-node.ts +++ b/src/https-node.ts @@ -5,7 +5,7 @@ import { request } from "https"; import { IncomingHttpHeaders, RequestOptions } from "http"; -import { validateHttpsJsonResponse } from "./node-web-compat.js"; +import { validateHttpsJsonResponse } from "./https-common.js"; import { pipeline } from "stream"; import { TextDecoder } from "util"; import { safeJsonParse, Json } from "./safe-json-parse.js"; diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 4d71ba4..d18a1a4 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -5,7 +5,8 @@ import { Jwk } from "./jwk.js"; import { FetchError, NotSupportedError } from "./error.js"; -import { NodeWebCompat, validateHttpsJsonResponse } from "./node-web-compat.js"; +import { NodeWebCompat } from "./node-web-compat.js"; +import { validateHttpsJsonResponse } from "./https-common.js"; import { Json, safeJsonParse } from "./safe-json-parse.js"; /** diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 0e59e6c..349f677 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -1,8 +1,12 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 // -// Compatibility layer, to make this lib work in both Node.js and Web -// This file just contains stubs for typings +// To make this library work in both Node.js and Web, some functions require specific code, +// e.g. in Node.js we can use the "crypto" module, whereas in Web we need to use SubtleCrypto. +// This file contains an interface that the specific Node.js and Web implementations must implement. +// +// At runtime, either the Node.js or Web implementation is actually loaded. This works because the +// package.json specifies "#node-web-compat" as a subpath import, with conditions pointing to the right file (for Node.js or Web) import { Json } from "./safe-json-parse.js"; import { @@ -11,8 +15,10 @@ import { JwsVerificationFunctionSync, JwsVerificationFunctionAsync, } from "./jwt-rsa"; -import { FetchError, NonRetryableFetchError } from "./error.js"; +/** + * Interface that the specific Node.js and Web implementations must implement + */ export interface NodeWebCompat { transformJwkToKeyObjectSync: JwkToKeyObjectTransformerSync; transformJwkToKeyObjectAsync: JwkToKeyObjectTransformerAsync; @@ -29,35 +35,3 @@ export interface NodeWebCompat { response: number; // total round trip timeout }; } - -/** - * Sanity check a HTTPS response where we expect to get JSON data back - * - * @param uri the uri that was being requested - * @param statusCode the HTTP status code, should be 200 - * @param contentType the value of the "Content-Type" header in the response, should start with "application/json" - * @returns void - throws an error if the status code or content type aren't as expected - */ -export function validateHttpsJsonResponse( - uri: string, - statusCode?: number, - contentType?: string -): void { - if (statusCode === 429) { - throw new FetchError(uri, "Too many requests"); - } else if (statusCode !== 200) { - throw new NonRetryableFetchError( - uri, - `Status code is ${statusCode}, expected 200` - ); - } - if ( - !contentType || - !contentType.toLowerCase().startsWith("application/json") - ) { - throw new NonRetryableFetchError( - uri, - `Content-type is "${contentType}", expected "application/json"` - ); - } -} From aebbc1c89ba3d6bdaf588a76171823900b0fe4a9 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 12:41:15 +0100 Subject: [PATCH 38/59] Doc updates for Web --- .github/ISSUE_TEMPLATE/bug-report.md | 4 +++- .github/ISSUE_TEMPLATE/question.md | 4 +++- README.md | 14 +++++++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 0d59b3a..8fcb831 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -11,7 +11,9 @@ Please provide a clear and concise description of what the bug is. **Versions** Which version of `aws-jwt-verify` are you using? -Which version of Node.js are you using? (Should be at least 14) +Are you using the library in Node.js or in the Web browser? +If Node.js, which version of Node.js are you using? (Should be at least 14) +If Web browser, which web browser and which version of it are you using? If using TypeScript, which version of TypeScript are you using? (Should be at least 4) **To Reproduce** diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 2aa5576..6d7acad 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -11,5 +11,7 @@ How can we help you? **Versions** Which version of `aws-jwt-verify` are you using? -Which version of Node.js are you using? (Should be at least 14) +Are you using the library in Node.js or in the Web browser? +If Node.js, which version of Node.js are you using? (Should be at least 14) +If Web browser, which web browser and which version of it are you using? If using TypeScript, which version of TypeScript are you using? (Should be at least 4) diff --git a/README.md b/README.md index 8123b1b..8b557e0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # AWS JWT Verify -**Node.js** library for **verifying** JWTs signed by **Amazon Cognito**, and any **OIDC-compatible IDP** that signs JWTs with **RS256** / **RS384** / **RS512**. +**JavaScript** library for **verifying** JWTs signed by **Amazon Cognito**, and any **OIDC-compatible IDP** that signs JWTs with **RS256** / **RS384** / **RS512**. ## Installation `npm install aws-jwt-verify` -Note: this library can be used with Node.js 14 or higher. If used with TypeScript, TypeScript 4 or higher is required. +This library can be used with Node.js 14 or higher. If used with TypeScript, TypeScript 4 or higher is required. + +This library can also be used in Web browsers (modern browsers that support e.g. `SubtleCrypto`). ## Basic usage @@ -58,7 +60,7 @@ See all verify parameters for JWTs from any IDP [here](#jwtrsaverifier-verify-pa ## Philosophy of this library - Do one thing and do it well. Focus solely on **verifying** JWTs. -- Pure **TypeScript** library that can be used in **Node.js** v14 and above (both CommonJS and ESM supported). +- Pure **TypeScript** library that can be used in **Node.js** v14 and above (both CommonJS and ESM supported), as well in the modern evergreen Web browser. - Support both **Amazon Cognito** as well as any other **OIDC-compatible IDP** as first class citizen. - **0** runtime dependencies, batteries included. This library includes all necessary code to validate RS256/RS384/RS512-signed JWTs. E.g. it contains a simple (and pluggable) **HTTP** helper to fetch the **JWKS** from the JWKS URI, and it includes a simple **ASN.1** encoder to transform JWKs into **DER-encoded RSA public keys** (in order to verify JWTs with Node.js native crypto calls). - Opinionated towards the **best practices** as described by the IETF in [JSON Web Token Best Current Practices](https://tools.ietf.org/id/draft-ietf-oauth-jwt-bcp-02.html#rfc.section.3). @@ -75,6 +77,12 @@ This library was specifically designed to be easy to use in: - [CloudFront Lambda@Edge](https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html) - Node.js APIs, e.g. running in AWS Fargate, that need to verify incoming JWTs +## Usage in the Web browser + +Many webdev toolchains (e.g. [CreateReactApp](https://github.com/facebook/create-react-app)) make including `npm` libraries in your web app easy, in which case using this library in your web app should just work. + +If you need to bundle this library yourself, be aware that this library uses [subpath imports](https://nodejs.org/api/packages.html#subpath-imports), to automatically select the Web crypto implementation when bundling for the browser. So, you'll need a bundler that supports subpath imports, such as [webpack](https://webpack.js.org/) or [esbuild](https://esbuild.github.io/)). + ## Table of Contents - [Verifying JWTs from Amazon Cognito](#Verifying-JWTs-from-Amazon-Cognito) From 7404030710cf22c7079ecd1fee2e6625d1a40569 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 12:55:16 +0100 Subject: [PATCH 39/59] setTimeout unref only in Node.js --- src/jwk.ts | 3 ++- src/node-web-compat-web.ts | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jwk.ts b/src/jwk.ts index a87522e..3452439 100644 --- a/src/jwk.ts +++ b/src/jwk.ts @@ -172,7 +172,8 @@ export class SimplePenaltyBox implements PenaltyBox { const i = setTimeout(() => { this.waitingUris.delete(jwksUri); }, this.waitSeconds * 1000); - if (i.unref) i.unref(); + /* istanbul ignore else */ + if (i.unref && typeof i.unref === "function") i.unref(); // Node.js only this.waitingUris.set(jwksUri, i); } registerSuccessfulAttempt(jwksUri: string): void { diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index d18a1a4..92aa4a1 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -38,7 +38,6 @@ export const nodeWebCompat: NodeWebCompat = { ), responseTimeout ); - if (i.unref) i.unref(); requestOptions = { signal: abort.signal, ...requestOptions }; } const response = await fetch(uri, { ...requestOptions, body: data }); From c739808ae27bb58a8ba92e769284d9c3e2593114 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 13:28:55 +0100 Subject: [PATCH 40/59] Fix lint error --- src/node-web-compat-web.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 92aa4a1..cac0679 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -27,7 +27,7 @@ export const nodeWebCompat: NodeWebCompat = { const responseTimeout = Number(requestOptions?.["responseTimeout"]); if (responseTimeout) { const abort = new AbortController(); - const i = setTimeout( + setTimeout( () => // eslint-disable-next-line @typescript-eslint/no-explicit-any (abort.abort as any)( From 045792b360a3a3f49b777f3b7599ff022285dec0 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 14:28:20 +0100 Subject: [PATCH 41/59] Cleanup --- tests/web/index.html | 33 --------------------------------- tsconfig.json | 2 +- 2 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 tests/web/index.html diff --git a/tests/web/index.html b/tests/web/index.html deleted file mode 100644 index 596093d..0000000 --- a/tests/web/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - aws-jwt-verify - - - -

Let's verify some JWTs!

- - diff --git a/tsconfig.json b/tsconfig.json index 7a3d361..8d54a93 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "lib": ["DOM"], "baseUrl": "./src", "paths": { - "#node-web-compat": ["node-web-compat-node.ts"] + "#node-web-compat": ["node-web-compat-node.ts"] // https://github.com/microsoft/TypeScript/issues/44848 } }, "include": ["src/**/*"] From 54c8a101f112a3405f74c2ec3d93436fb297f10d Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Thu, 3 Mar 2022 11:13:26 -0600 Subject: [PATCH 42/59] fix typo on VAILD_TOKEN --- tests/vite-app/cypress/fixtures/example-JWKS.json | 4 ++-- tests/vite-app/cypress/fixtures/token-data.json | 6 +++--- tests/vite-app/cypress/integration/forminputs.spec.ts | 8 ++++---- tests/vite-app/cypress/integration/unittests.spec.ts | 8 ++------ tests/vite-app/public/example-JWKS.json | 4 ++-- tests/vite-app/util/generateExampleTokens.ts | 4 ++-- 6 files changed, 15 insertions(+), 19 deletions(-) diff --git a/tests/vite-app/cypress/fixtures/example-JWKS.json b/tests/vite-app/cypress/fixtures/example-JWKS.json index 1701388..74cd3aa 100644 --- a/tests/vite-app/cypress/fixtures/example-JWKS.json +++ b/tests/vite-app/cypress/fixtures/example-JWKS.json @@ -2,11 +2,11 @@ "keys": [ { "kty": "RSA", - "kid": "WbPMWUJPfuTXe8havn18lUHO-QJ2P6IPZlCfowTkwao", + "kid": "PYftFhRIYTpwD6gzfMz6JTP0r3vyaiksBH4UGHOap3s", "use": "sig", "alg": "RS256", "e": "AQAB", - "n": "wagyQ14Hac7Z6dJMBiXJRk2yxxrYolj9Zb8yDbGBDYPiewNISfNAeRklCbQj_nqYV17wgBQVgPP1mPDhbGKoCBP0xkR2k3g_LROfbVqZL5jk0QMuQhi209lR1QZL_r5wVMCtavdE78ZqeQTGUKUOQNv_RJDtY2-XESxHOJU5UU-bpE0VxuV65cdpJhGRL9nCHx4azz62BhMt1t6KFLW1pFw-1DwNq2Q13eAC7ix_hAtOH8ZdWjt86GhGTWtc0v5ntaTkLs9fhfppBs6U4U8BKULJ3Ck2o0a3feJGNfcjaazMCYWK9axyFGU8_t_ZTOMQ6J5yEohrwsn3qIPAhUKhdQ" + "n": "tgFy4kQIMSAiwHM2zohAX8CFd24A3km7ICmdoJN1V4fYK5QPt-kN_igFGb3trQrLcMYpgaOtAczz7NJfXo91GJQVWJLFINVVPgYHKrxUfr9car-Ujl-izyvXMKUOKAbc1FgMfkgnt6tmNCFbE7R3oHnrr3fWzIaM6mBlPdmaNgSM_FPfloukZw7YJQ496gsnHkscXmeIzzX13XnnmyzNlJYJPaTc3yqNJHZRgHqUexJWr8YDsSeY-aIdkqmKnkrqXCsActI9zou_cz3pn1Qm0lhWI3uLMXUjkzY8iNjnBSETUJxlu0Y3wpSm0lB2bAB2C6jms6eQBfruzWLunukFXw" } ] } diff --git a/tests/vite-app/cypress/fixtures/token-data.json b/tests/vite-app/cypress/fixtures/token-data.json index cf34b78..9d6f9be 100644 --- a/tests/vite-app/cypress/fixtures/token-data.json +++ b/tests/vite-app/cypress/fixtures/token-data.json @@ -2,7 +2,7 @@ "ISSUER": "https://example.com", "AUDIENCE": "aws-jwt-verify", "JWKSURI": "/example-JWKS.json", - "VAILD_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjE4ODIyOSwiZXhwIjoxNjc3NzI0MjI5LCJqdGkiOiI1OTY1ZjlmNS0xMGFlLTQ4ZTYtODRiYy1hOGIwYzFhMzljODkiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.t3pcCcpJTxRZZvz7W26XT0vn1BX2BRxwnqAsIYAP2vK0TklrpRQNUrMs0k6jwnyzQaXUXE4vO-KV9VnAbUbCe5IwmVnKx94VdrH6rUJeYCfw8SLnLiFqzx5kWz_gCA81o77wdRUDyA581_cDLGGCE8FMrf4G3O-WQ1KPRrFAN7BHZUJCx6b0EUViRKkQ-yGWr1jomT550W9qTwsDo3xFOEWkAgAk6UTYK55zV0AxbfU1qo37EpLLIzGg3dsBoijfcPIt6qaZi4I6aRGtu-y1iJOBmZZPXq5NqcjaYrsHNU8HmeAT11j02c5w7zHC-_XaPDGI7SwoaAWWuCvBAMhXRw", - "EXPIRED_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjEwMTgyOSwiZXhwIjoxNjQ2MTg4MjI5LCJqdGkiOiI3NjQzZjliYS1kZDk5LTQyY2ItODhlYy1mMjgxY2Q2ZWVlOTEiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.FhyahSgofN1G0cGnwOMo9pK5yztXhOiBaSpondDE26-8srQN-KhWm1beHLZLXPt_7b5RqbGHGHZlCNVGMaBtPYIk-d-FrrQouD_ikjumtV6aLFkQfU5JBCETHkeFBT8MXZkglXc2qFwYDxlvoRM32CeHIG-mG2YQquOnVdueHdUBFgHNjmA5mnedgG4hTeL2-ql8u0XCJxvISFsU5pQoUgls_gIx7-8s_8XsF36EoEgwLsD2nrYghjNuoxNIP24qDIgi_p6a_mxHhqOYgNi3Ffs_9dbr21zH5CG-lac-qb960munnRJhw9NZrcHsAxOENn3NsqivyCYFVS1fPjjPyQ", - "NOT_YET_VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IldiUE1XVUpQZnVUWGU4aGF2bjE4bFVITy1RSjJQNklQWmxDZm93VGt3YW8ifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjE4ODIyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3NzgxMDYyOSwiZXhwIjoxNjc3ODEwNjU5LCJqdGkiOiJiMzFhYmMxZC0zNTViLTQ5YWEtOGQ5Mi03MGI2ZDU3ZWU4ZGMiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.IvdnOOb_DaSDG4xFIbK7aQ25T4hHTmFlzXd0fGkBwpiudtqT-wIsLJM638yKOpIWxSVeXGJ7De0E0PFTIyri-_y0R7zlhiCzTxK_zMW0LXh6Uo-mfdUWMWBtvCqm4e2cfsUTqsQ49w2VI-FUHClcFIMFlCk9r-2TurCdhaEOhqbyA8yUqHd9krWi52Zg5h1ba6bQL8rNCanzG7AzaMm-1WZQPFN4J6AzgaugxPyhfDwyeBOLoqlFgZKjhlL6Vbsj2Ed_v8GLgLWFBTi9niHiCxOIp0UgHfi4sf40UYv1uQlC9gQ1cUIGEqLozg7WeoxkHZ57q9PpEbY_hmSvAW0lsg" + "VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjMyNTA1NiwiZXhwIjoxNjc3ODYxMDU2LCJqdGkiOiIwZWU0ZDNhNy0zNThiLTQ5OWUtOWQ5Yi0xOWRjMWVjYWUwMWIiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.giWiW6i_OPnICC7fhHgyr5AwdJZ9D07MixqEymdBsb0Zodt_Nan0cP2Lo4HpYE5SIfMgH5xh9Kwmuv2jd-hLFnqlfgjeFefjXAASyxKqLntg0FdUNzHnrduRMxP3hssfP4JgkY7B42sbnMvwrbpzJ3gvlw_nv99Vz4EDB7-ZxPlCX9huzTohD8md1UgoPn_FU-W5vjso89-ur93F43xZFXSkQmMqpxufVMGU_wWo12kDkwcux50N8q5nSENtonr5XvUuRNU3vdYJclX1f-Y5zQIdxAL4gvXOrOcQYERB9pW6LWqiaji2XtOnZoYxxQZDLwQh5-PDl3zPoNWuS1IzrQ", + "EXPIRED_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjIzODY1NiwiZXhwIjoxNjQ2MzI1MDU2LCJqdGkiOiI1MGI5ZTcwMS04NWVjLTQ2YTMtOGIxYy01NTRlMTAxYmE2NDUiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.JiTLXmAKiQTJGgSQblbF5F94Tnw-yzSayawEJPJbJapDBMaqtUDspEpl0yRZPh8GvoobDUTpT5KZkrhPnImW53r-M1kvuU6Pj5_pKz_YGHaTXlX0y50RqiqMyz9l4qmsWbHbtSS35FyVa6MyeGiUikKmErlkdIZiiJ-3XsPf3roUlD0gSb1cSmHZG4mA1H45cBYUyJM6V0j2oWutdBxCgtCrKX-EqKl_8dY4qX2Gl8h4W8iwnSTejX2TMgSLMlcAnwbPPjnMNgQB9Z75K3c5k3hJ-VvP-U5E3Ha2I0myGPYZ7KPYC2IrucPqck5X4YoQ-KvlgH3kKq4Ox9-lbWD5ng", + "NOT_YET_VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3Nzk0NzQ1NiwiZXhwIjoxNjc3OTQ3NDg2LCJqdGkiOiJjMWVkMzg1My1kYmY1LTQ4YjktYjhkOC0yZDUyOGM2OTIwNzkiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.XF1VjLBbgAAue-8C_FLph8xbVMDqfINlhpOqXQ9Dkf19Le4P3yMkaAuSyuOAunQGYLMVU3MjJSo7lcMQi4wt1uENDb12m6d1ePESxYHtQnfmgldUuN3JFHNYWDGxISf1FE-NWqTRfv9y79RDN_NOasMChG8LnSUF-Nk3wt7fSN4h6Ek5Gm_WYMUH7Q7onubGv-GEO_C0SvB3Nr7Luez6akNmnLpZpk5Jdgm1XzEgfHEa8zyZYlqionwvTBITWyj_bLwtcNa_n6iKPui2T8DMudZUxIOiSSLyvMKFKf3NlSkw_BxvbjGHzW6-9E-ABI8ypDFgt574Lzt31AB_59H2lA" } diff --git a/tests/vite-app/cypress/integration/forminputs.spec.ts b/tests/vite-app/cypress/integration/forminputs.spec.ts index e43126d..f312894 100644 --- a/tests/vite-app/cypress/integration/forminputs.spec.ts +++ b/tests/vite-app/cypress/integration/forminputs.spec.ts @@ -3,7 +3,7 @@ import { ISSUER, AUDIENCE, JWKSURI, - VAILD_TOKEN, + VALID_TOKEN, EXPIRED_TOKEN, NOT_YET_VALID_TOKEN, } from "../fixtures/token-data.json"; @@ -49,7 +49,7 @@ describe("click Verify RSA", () => { }; it("valid token", () => { - typeInputsAndClick(VAILD_TOKEN, ISSUER, AUDIENCE, JWKSURI); + typeInputsAndClick(VALID_TOKEN, ISSUER, AUDIENCE, JWKSURI); cy.get("#result").should("have.text", "Verified"); }); @@ -67,13 +67,13 @@ describe("click Verify RSA", () => { }); it("invalid issuer", () => { - typeInputsAndClick(VAILD_TOKEN, INVAILD_ISSUER, "", JWKSURI); + typeInputsAndClick(VALID_TOKEN, INVAILD_ISSUER, "", JWKSURI); cy.get("#result").should("include.text", "Issuer not allowed"); }); it("invalid JWKS Uri", () => { - typeInputsAndClick(VAILD_TOKEN, ISSUER, "", INVAILD_JWKSURI); + typeInputsAndClick(VALID_TOKEN, ISSUER, "", INVAILD_JWKSURI); cy.get("#result").should( "include.text", diff --git a/tests/vite-app/cypress/integration/unittests.spec.ts b/tests/vite-app/cypress/integration/unittests.spec.ts index a162ad2..e19a35d 100644 --- a/tests/vite-app/cypress/integration/unittests.spec.ts +++ b/tests/vite-app/cypress/integration/unittests.spec.ts @@ -1,17 +1,13 @@ /// import { JwtRsaVerifier } from "aws-jwt-verify"; import { - VAILD_TOKEN, + VALID_TOKEN, ISSUER, AUDIENCE, JWKSURI, } from "../fixtures/token-data.json"; describe("unit tests", () => { - it("expect true", () => { - expect(true).to.be.true; - }); - it("JwtRsaVerifier create & verify", async () => { cy.intercept("GET", JWKSURI, { fixture: "example-JWKS" }); @@ -22,7 +18,7 @@ describe("unit tests", () => { }); try { - const payload = await verifier.verify(VAILD_TOKEN); + const payload = await verifier.verify(VALID_TOKEN); console.log("Token is valid. Payload:", payload); expect(payload).to.exist; diff --git a/tests/vite-app/public/example-JWKS.json b/tests/vite-app/public/example-JWKS.json index 1701388..74cd3aa 100644 --- a/tests/vite-app/public/example-JWKS.json +++ b/tests/vite-app/public/example-JWKS.json @@ -2,11 +2,11 @@ "keys": [ { "kty": "RSA", - "kid": "WbPMWUJPfuTXe8havn18lUHO-QJ2P6IPZlCfowTkwao", + "kid": "PYftFhRIYTpwD6gzfMz6JTP0r3vyaiksBH4UGHOap3s", "use": "sig", "alg": "RS256", "e": "AQAB", - "n": "wagyQ14Hac7Z6dJMBiXJRk2yxxrYolj9Zb8yDbGBDYPiewNISfNAeRklCbQj_nqYV17wgBQVgPP1mPDhbGKoCBP0xkR2k3g_LROfbVqZL5jk0QMuQhi209lR1QZL_r5wVMCtavdE78ZqeQTGUKUOQNv_RJDtY2-XESxHOJU5UU-bpE0VxuV65cdpJhGRL9nCHx4azz62BhMt1t6KFLW1pFw-1DwNq2Q13eAC7ix_hAtOH8ZdWjt86GhGTWtc0v5ntaTkLs9fhfppBs6U4U8BKULJ3Ck2o0a3feJGNfcjaazMCYWK9axyFGU8_t_ZTOMQ6J5yEohrwsn3qIPAhUKhdQ" + "n": "tgFy4kQIMSAiwHM2zohAX8CFd24A3km7ICmdoJN1V4fYK5QPt-kN_igFGb3trQrLcMYpgaOtAczz7NJfXo91GJQVWJLFINVVPgYHKrxUfr9car-Ujl-izyvXMKUOKAbc1FgMfkgnt6tmNCFbE7R3oHnrr3fWzIaM6mBlPdmaNgSM_FPfloukZw7YJQ496gsnHkscXmeIzzX13XnnmyzNlJYJPaTc3yqNJHZRgHqUexJWr8YDsSeY-aIdkqmKnkrqXCsActI9zou_cz3pn1Qm0lhWI3uLMXUjkzY8iNjnBSETUJxlu0Y3wpSm0lB2bAB2C6jms6eQBfruzWLunukFXw" } ] } diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index 8bfb80c..2fa49dd 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -69,7 +69,7 @@ const tokendata = { ISSUER: "", AUDIENCE: "", JWKSURI: "", - VAILD_TOKEN: "", + VALID_TOKEN: "", EXPIRED_TOKEN: "", NOT_YET_VALID_TOKEN: "", }; @@ -84,7 +84,7 @@ const main = async () => { tokendata.AUDIENCE = AUDIENCE; tokendata.JWKSURI = JWKSURI; - tokendata.VAILD_TOKEN = await createSign(jwk, validTokenPayload); + tokendata.VALID_TOKEN = await createSign(jwk, validTokenPayload); tokendata.EXPIRED_TOKEN = await createSign(jwk, expiredTokenPayload); tokendata.NOT_YET_VALID_TOKEN = await createSign( jwk, From 0c25c4dd2fa677d8cddd8c424cfa50fb4f632491 Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Thu, 3 Mar 2022 11:55:36 -0600 Subject: [PATCH 43/59] remove favicon --- tests/vite-app/favicon.svg | 15 --------------- tests/vite-app/index.html | 1 - 2 files changed, 16 deletions(-) delete mode 100644 tests/vite-app/favicon.svg diff --git a/tests/vite-app/favicon.svg b/tests/vite-app/favicon.svg deleted file mode 100644 index de4aedd..0000000 --- a/tests/vite-app/favicon.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/tests/vite-app/index.html b/tests/vite-app/index.html index 2235a8d..f80ec73 100644 --- a/tests/vite-app/index.html +++ b/tests/vite-app/index.html @@ -2,7 +2,6 @@ - aws-jwt-verify From 433ca25608799973a1c37368d71175af336d6f65 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Thu, 3 Mar 2022 21:36:41 +0100 Subject: [PATCH 44/59] Use rollup node resolve --- package-lock.json | 55 +--------- package.json | 3 - tests/vite-app/package-lock.json | 174 ++++++++++++++++++++++++++++++- tests/vite-app/package.json | 1 + tests/vite-app/vite.config.ts | 13 +-- 5 files changed, 180 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6f813af..396bb6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "aws-jwt-verify", "version": "2.1.3", "license": "Apache-2.0", - "dependencies": { - "@rollup/plugin-alias": "^3.1.9" - }, "devDependencies": { "@tsconfig/node14": "^1.0.1", "@types/jest": "^27.0.2", @@ -1055,20 +1052,6 @@ "node": ">= 8" } }, - "node_modules/@rollup/plugin-alias": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", - "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", - "dependencies": { - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -3317,6 +3300,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -6017,21 +6001,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup": { - "version": "2.69.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", - "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6154,6 +6123,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -7926,14 +7896,6 @@ "fastq": "^1.6.0" } }, - "@rollup/plugin-alias": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", - "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", - "requires": { - "slash": "^3.0.0" - } - }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -9622,6 +9584,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { @@ -11635,15 +11598,6 @@ "glob": "^7.1.3" } }, - "rollup": { - "version": "2.69.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", - "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", - "peer": true, - "requires": { - "fsevents": "~2.3.2" - } - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11733,7 +11687,8 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "slice-ansi": { "version": "4.0.0", diff --git a/package.json b/package.json index e49aa0c..8079e7c 100644 --- a/package.json +++ b/package.json @@ -121,8 +121,5 @@ }, "engines": { "node": ">=14.0.0" - }, - "dependencies": { - "@rollup/plugin-alias": "^3.1.9" } } diff --git a/tests/vite-app/package-lock.json b/tests/vite-app/package-lock.json index 1f78f30..71dd029 100644 --- a/tests/vite-app/package-lock.json +++ b/tests/vite-app/package-lock.json @@ -1,17 +1,18 @@ { "name": "vite-app", - "version": "0.0.0", + "version": "0.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vite-app", - "version": "0.0.0", + "version": "0.0.2", "dependencies": { "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.11.1", + "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", "node-jose": "^2.1.0", "typescript": "^4.5.4", @@ -1894,6 +1895,49 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -1936,6 +1980,15 @@ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", "dev": true }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -2558,6 +2611,18 @@ "dev": true, "peer": true }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -2934,6 +2999,15 @@ } } }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -3441,6 +3515,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3947,6 +4027,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -4642,6 +4728,18 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -7021,6 +7119,39 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + } + } + }, "@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -7063,6 +7194,15 @@ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", "dev": true }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -7555,6 +7695,12 @@ "dev": true, "peer": true }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -7852,6 +7998,12 @@ "ms": "2.1.2" } }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -8150,6 +8302,12 @@ "dev": true, "peer": true }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -8519,6 +8677,12 @@ "is-path-inside": "^3.0.2" } }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9048,6 +9212,12 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json index df55eec..0d3e3f6 100644 --- a/tests/vite-app/package.json +++ b/tests/vite-app/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.11.1", + "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", "node-jose": "^2.1.0", "typescript": "^4.5.4", diff --git a/tests/vite-app/vite.config.ts b/tests/vite-app/vite.config.ts index bf55fb6..00d24f9 100644 --- a/tests/vite-app/vite.config.ts +++ b/tests/vite-app/vite.config.ts @@ -1,20 +1,11 @@ import { defineConfig } from "vite"; -import alias from "@rollup/plugin-alias"; +import resolve from "@rollup/plugin-node-resolve"; // https://vitejs.dev/config/ export default defineConfig({ build: { rollupOptions: { - plugins: [ - alias({ - entries: [ - { - find: "#node-web-compat", - replacement: "./node-web-compat-web.js", - }, - ], - }), - ], + plugins: [resolve({ browser: true })], }, }, }); From 65a2584ad43677de5313b53c92a1b82134296513 Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Thu, 3 Mar 2022 19:09:06 -0600 Subject: [PATCH 45/59] remove node-jose --- .../cypress/fixtures/example-JWKS.json | 8 +- .../vite-app/cypress/fixtures/token-data.json | 6 +- tests/vite-app/package-lock.json | 156 +----------------- tests/vite-app/package.json | 8 +- tests/vite-app/public/example-JWKS.json | 8 +- tests/vite-app/util/generateExampleTokens.ts | 56 +++---- 6 files changed, 45 insertions(+), 197 deletions(-) diff --git a/tests/vite-app/cypress/fixtures/example-JWKS.json b/tests/vite-app/cypress/fixtures/example-JWKS.json index 74cd3aa..d6318b8 100644 --- a/tests/vite-app/cypress/fixtures/example-JWKS.json +++ b/tests/vite-app/cypress/fixtures/example-JWKS.json @@ -1,12 +1,12 @@ { "keys": [ { + "kid": "6fdd042a-14ca-4068-8b54-68a31a46e8bd", + "alg": "RS256", "kty": "RSA", - "kid": "PYftFhRIYTpwD6gzfMz6JTP0r3vyaiksBH4UGHOap3s", "use": "sig", - "alg": "RS256", - "e": "AQAB", - "n": "tgFy4kQIMSAiwHM2zohAX8CFd24A3km7ICmdoJN1V4fYK5QPt-kN_igFGb3trQrLcMYpgaOtAczz7NJfXo91GJQVWJLFINVVPgYHKrxUfr9car-Ujl-izyvXMKUOKAbc1FgMfkgnt6tmNCFbE7R3oHnrr3fWzIaM6mBlPdmaNgSM_FPfloukZw7YJQ496gsnHkscXmeIzzX13XnnmyzNlJYJPaTc3yqNJHZRgHqUexJWr8YDsSeY-aIdkqmKnkrqXCsActI9zou_cz3pn1Qm0lhWI3uLMXUjkzY8iNjnBSETUJxlu0Y3wpSm0lB2bAB2C6jms6eQBfruzWLunukFXw" + "n": "qVZa55XyCSvLWx6riFhA5PWwVbuAqpsz0ltQ384ogeHyDoXuJk79HPjOx3xqrhRZwMOh9Sf4kjdIzJP-JeZTUmvsuFfvDOGdxvUKuAvMWppEUsEjydGd7n6cRpwkgxusUfOouUFduR5OHZdkh8HNQGwfxF5tnkAmwCmRJckSbGZHbV6wiPafEDVhSSOvNW9jqtU4_t3d6x0K5xn1BOJpnn3YiiExuknV5vQXogR1OdGEXPc6tR6d1HGFSOeNLRpgo-JM-2sw8I2IlZ4YBLy34HqpFJzKXf8SfNyBQsHSg8KFRHUpcdd-L0-kkdMLeNbfJTyUgsIN0GD5DVL4ujMTR0LqEKIaAFPET27fIdRcudSF4xlJA3NOfZw61j0IuGVt8pvqLK1uGjIhVM6TEIhXn86WP5xBjO86bscxqFDlhGhv4OM7RCqMuzRHcB3r1vhmq_-7Fk8sVg6bG2WS5JjL1gCrC16ZYs3i4IviDF6ZuDscVE5E3Hy8UhWNEuEz3JlpuKkxYSVndtCczjoYXardH8ySdAjCPIeSP8n-4vC2IVy11icskGvoHfq9O-Q713ie7xZV65NEULph_7nHP3_GIwUba3JfJW7zSauP2QctS-TvD71caxmDwKtn3q3dPVDq7XRSopFFOQ5c8vJj7udBp9cyVxKM49-KXJwxlqId7fM", + "e": "AQAB" } ] } diff --git a/tests/vite-app/cypress/fixtures/token-data.json b/tests/vite-app/cypress/fixtures/token-data.json index 9d6f9be..477b560 100644 --- a/tests/vite-app/cypress/fixtures/token-data.json +++ b/tests/vite-app/cypress/fixtures/token-data.json @@ -2,7 +2,7 @@ "ISSUER": "https://example.com", "AUDIENCE": "aws-jwt-verify", "JWKSURI": "/example-JWKS.json", - "VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjMyNTA1NiwiZXhwIjoxNjc3ODYxMDU2LCJqdGkiOiIwZWU0ZDNhNy0zNThiLTQ5OWUtOWQ5Yi0xOWRjMWVjYWUwMWIiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.giWiW6i_OPnICC7fhHgyr5AwdJZ9D07MixqEymdBsb0Zodt_Nan0cP2Lo4HpYE5SIfMgH5xh9Kwmuv2jd-hLFnqlfgjeFefjXAASyxKqLntg0FdUNzHnrduRMxP3hssfP4JgkY7B42sbnMvwrbpzJ3gvlw_nv99Vz4EDB7-ZxPlCX9huzTohD8md1UgoPn_FU-W5vjso89-ur93F43xZFXSkQmMqpxufVMGU_wWo12kDkwcux50N8q5nSENtonr5XvUuRNU3vdYJclX1f-Y5zQIdxAL4gvXOrOcQYERB9pW6LWqiaji2XtOnZoYxxQZDLwQh5-PDl3zPoNWuS1IzrQ", - "EXPIRED_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjIzODY1NiwiZXhwIjoxNjQ2MzI1MDU2LCJqdGkiOiI1MGI5ZTcwMS04NWVjLTQ2YTMtOGIxYy01NTRlMTAxYmE2NDUiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.JiTLXmAKiQTJGgSQblbF5F94Tnw-yzSayawEJPJbJapDBMaqtUDspEpl0yRZPh8GvoobDUTpT5KZkrhPnImW53r-M1kvuU6Pj5_pKz_YGHaTXlX0y50RqiqMyz9l4qmsWbHbtSS35FyVa6MyeGiUikKmErlkdIZiiJ-3XsPf3roUlD0gSb1cSmHZG4mA1H45cBYUyJM6V0j2oWutdBxCgtCrKX-EqKl_8dY4qX2Gl8h4W8iwnSTejX2TMgSLMlcAnwbPPjnMNgQB9Z75K3c5k3hJ-VvP-U5E3Ha2I0myGPYZ7KPYC2IrucPqck5X4YoQ-KvlgH3kKq4Ox9-lbWD5ng", - "NOT_YET_VALID_TOKEN": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBZZnRGaFJJWVRwd0Q2Z3pmTXo2SlRQMHIzdnlhaWtzQkg0VUdIT2FwM3MifQ.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjMyNTA1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3Nzk0NzQ1NiwiZXhwIjoxNjc3OTQ3NDg2LCJqdGkiOiJjMWVkMzg1My1kYmY1LTQ4YjktYjhkOC0yZDUyOGM2OTIwNzkiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.XF1VjLBbgAAue-8C_FLph8xbVMDqfINlhpOqXQ9Dkf19Le4P3yMkaAuSyuOAunQGYLMVU3MjJSo7lcMQi4wt1uENDb12m6d1ePESxYHtQnfmgldUuN3JFHNYWDGxISf1FE-NWqTRfv9y79RDN_NOasMChG8LnSUF-Nk3wt7fSN4h6Ek5Gm_WYMUH7Q7onubGv-GEO_C0SvB3Nr7Luez6akNmnLpZpk5Jdgm1XzEgfHEa8zyZYlqionwvTBITWyj_bLwtcNa_n6iKPui2T8DMudZUxIOiSSLyvMKFKf3NlSkw_BxvbjGHzW6-9E-ABI8ypDFgt574Lzt31AB_59H2lA" + "VALID_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjM1NjAyMSwiZXhwIjoxNjc3ODkyMDIxLCJqdGkiOiJiOWE1YWUxYi0zMmY4LTRiMWQtYjgzNS1mYWJjOWQ5NWVmYTAiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.UHqS6IKYkFUxHJvCnCE2kiBNP0pHrL0lhtT-3reyCu_FLLBTRfmZ9bkb4td9v278m0KupfKfe2-9HgseQPJdZd1QoMIvIsjSN9WfDzyEXLayt3jzbgUn78JNfmShgoiSQi3bOdwOJMIJkP94oMecC3kwTy37n_tfaYPaxfMiPl2w4tjBlOeN1PEd2JEuFmYLWrhxBCfmHFHYFX0S0LwEIz4HCKSs70lBHr6pYuWqWM8LKNtEXGT7XhK1CRim4mA5gHKXn2raImb5Vr4L1kHD4OI_7cdEPEn9DCQrY-JK9ZX9_014ygy4zBZRrYkvEjCCQ_Vnxd48wELTN4bg9BMoTJ11-md5dJNdLpzIt_NT8KhnnQcdi5zjmaZcANyJWTnTL_y9ONeUtVgEuks0S39SqRb446wem-Vig7713cUvT_i245sauXNvWI08ogEX1vjjQ-CyHvoqPnaIrYKa_pQ467xZ_Eic1g98n4VXaqQATXhX-pgyvvTNd9J1wBUc3ukksGpEGmsOgVgTH6KIndz9GUEaHhS7s_9Greg4rdCFzxKO0ZaSkeFD3r10dXEiC2v7pTglr51-JUzoWUzNLZQ3a5Oi1ZfpOArSdJiPblsEzqf9aPNtjsV10QyDvhfZzHpmDWwsnFjGnbVknGP2uAssePLYaSmytKNBPdeb9nNxV0c", + "EXPIRED_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjI2OTYyMSwiZXhwIjoxNjQ2MzU2MDIxLCJqdGkiOiJkMWZlNmRlMy0zYzAwLTQwOGMtYWQ5My1kNjcyYzA1MTcyZjQiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.eDmPCG8YcbSZcsIrWLX73nOQeH6_htIgqwxixu2Vci9wQJQhqiXM-7HojjsmNCnYLlkB0yJG8VkjA_hnWsWyra4zSHkiTrrAh1j9q3LJckGJPqMlawiuaF07V8SAbfP04DR4Cz2oPOeQstYzvcRyaj6B6IxpJckJ5HGWZhNHAha-UxjJUrmOhGkzgHcDtfgUEOam67Z_VHDxht4WDjnJ3Ho94vWmCZMNp4GPhvSGKQq5GjRTgz8lRrnM28jvUndGv2hqsxD4P2z4-g9LUOjW9TEJNyVS88p1t3gEpqgAalKrtrATOIWL35vRlHaSwfoUNTAPv2FelVQxaeZ2Pl0KE9aLHSSXZGtrIuKaaTQ_rY8gkwjibkk4--D_54sNYrzOB9oYa9-RcLR1lSZHitVrRN4oEX7PJAB7soS0XTsmB4F6fNeIq1OQBQNlqPlvKG-znulyGXZEgiI_eCpGt1lPwNGP4Wwvg3eDFnDiibpfRfxERnC8pQPlS947ncCnhv7Sw0NQBhhcTlSSftduN_n-0zRnDaRGi8mB5FJL9Y0NyE-7RscvgHBNap8OAakj0vCoT0a7MyI6RdbEcSASMXqPO3fZIbiGBp-shAS7r_HWib5U_numeI2Bd8wQjWc99TczEB07la61iNPNbA5Hi_JlUaX5iQED-59bMRfoIZNoQvQ", + "NOT_YET_VALID_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3Nzk3ODQyMSwiZXhwIjoxNjc3OTc4NDUxLCJqdGkiOiIyOWU0NTUxYi04ZDIxLTRmZDQtYWM1NS1mNmNjNjUwOTcxZmQiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.QJJNV_lfAysSDLOHYgm2SStIokRIbJS9SjcuXYOwhxNQrsAYlYVad-2S2sH_k2fm_rlLNb-hLWg0cdRGe1ShN4TNGEWXD6VwP002QaV9SvUwLiiWWt4BrxEb4NEfAduDpp0P3GWlCxeoMG7Svzy3fsXY6qd9SeZBsTfcY-YSIj4zEAxFpiJ3gyMIA_CvSFFe6y9sBDhW-UNtF7tIdvhzYg9alFvP3csMi68IWeft3BcBTSPPP3oK3LvWdSh2jhNWN4t9w9-kfX5GYQQwfkyOOsP-ZqDaEvdGJ73f1MqC9tOxEJuigCYqrVLQoTy6TM6TKNsmxapHu4SxQP2mJUMhiX1zNZYJRj4rIqyWQm1DWu-BsUNV3V2VPqdV2C-BSuo4IiYwz1z0Q_d9j8NM9Kx9HBPOyctIyA73YZ8zSKwXOe7yvQN354mJG433DJbHNIP4e5B3gTnc-he_XOMT6ov2EvU0kwM_-qOndWQYzfEkiTRhLz3PemaMfxPFqdJdAziGJ9VyhVycrR8R8EydHFaP752K7RNb2dDzHB48SglRWg9SuDz6f3WxkzYXLUvp04lszv9cNWOmZDxfbdw47bmFEDmKRKtQ6jCLXwFktP3Ki2IInGzX2nn82Lhw8F0yuMAaPZQV2P2ktxk3lAFaAL6rALN2Wc2O1BZg6V_-Xn8ir2c" } diff --git a/tests/vite-app/package-lock.json b/tests/vite-app/package-lock.json index 71dd029..69d1bdb 100644 --- a/tests/vite-app/package-lock.json +++ b/tests/vite-app/package-lock.json @@ -14,7 +14,6 @@ "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", - "node-jose": "^2.1.0", "typescript": "^4.5.4", "vite": "^2.8.0" } @@ -2368,7 +2367,7 @@ "node_modules/aws-jwt-verify": { "version": "2.1.3", "resolved": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-dDbTfnWvHm/qobZMuXA81IbsRJit+cYftswo5/YrHgKBjQf16HL1saGvXbx/tL7e51CuKRjiHlYZm2dmynjL/w==", + "integrity": "sha512-6qeipUjAX7k8dBX9QgwJaGLjiWm4zausVajZuhOuxzcR7qB36GDH5jq5rZu1pSiEYTYfVGlsJsZmDDYHTqPW7g==", "license": "Apache-2.0", "engines": { "node": ">=14.0.0" @@ -2497,15 +2496,6 @@ } ] }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -3105,12 +3095,6 @@ "dev": true, "peer": true }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, "node_modules/esbuild": { "version": "0.14.23", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", @@ -4365,12 +4349,6 @@ "node": ">=8" } }, - "node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==", - "dev": true - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4488,56 +4466,6 @@ "dev": true, "peer": true }, - "node_modules/node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-jose": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.1.0.tgz", - "integrity": "sha512-Zmm8vFPJabphGBc5Wz1/LUMPS+1cynqw16RIhgVNQMEI2yEQrvl7Gx2EwN9GhP8tkm8f7SH53K2nIx8TeNTIdg==", - "dev": true, - "dependencies": { - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "es6-promise": "^4.2.8", - "lodash": "^4.17.21", - "long": "^5.2.0", - "node-forge": "^1.2.1", - "pako": "^2.0.4", - "process": "^0.11.10", - "uuid": "^8.3.2" - } - }, - "node_modules/node-jose/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/node-releases": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", @@ -4670,12 +4598,6 @@ "node": ">=6" } }, - "node_modules/pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4792,15 +4714,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -7523,7 +7436,7 @@ }, "aws-jwt-verify": { "version": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-dDbTfnWvHm/qobZMuXA81IbsRJit+cYftswo5/YrHgKBjQf16HL1saGvXbx/tL7e51CuKRjiHlYZm2dmynjL/w==" + "integrity": "sha512-6qeipUjAX7k8dBX9QgwJaGLjiWm4zausVajZuhOuxzcR7qB36GDH5jq5rZu1pSiEYTYfVGlsJsZmDDYHTqPW7g==" }, "aws-sign2": { "version": "0.7.0", @@ -7614,12 +7527,6 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -8086,12 +7993,6 @@ "dev": true, "peer": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, "esbuild": { "version": "0.14.23", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", @@ -8937,12 +8838,6 @@ } } }, - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9032,41 +8927,6 @@ "dev": true, "peer": true }, - "node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", - "dev": true - }, - "node-jose": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.1.0.tgz", - "integrity": "sha512-Zmm8vFPJabphGBc5Wz1/LUMPS+1cynqw16RIhgVNQMEI2yEQrvl7Gx2EwN9GhP8tkm8f7SH53K2nIx8TeNTIdg==", - "dev": true, - "requires": { - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "es6-promise": "^4.2.8", - "lodash": "^4.17.21", - "long": "^5.2.0", - "node-forge": "^1.2.1", - "pako": "^2.0.4", - "process": "^0.11.10", - "uuid": "^8.3.2" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, "node-releases": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", @@ -9163,12 +9023,6 @@ "dev": true, "peer": true }, - "pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9251,12 +9105,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json index 0d3e3f6..d3e625d 100644 --- a/tests/vite-app/package.json +++ b/tests/vite-app/package.json @@ -6,6 +6,7 @@ "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", + "reinstall": "npm uninstall aws-jwt-verify && npm install ../../aws-jwt-verify.tgz", "tokengen": "tsc util/generateExampleTokens.ts && node util/generateExampleTokens.js", "cypress:run": "cypress run", "cypress:run:preview": "cypress run --config baseUrl=http://localhost:4173/", @@ -13,15 +14,14 @@ "cypress:open:webpack": "DEBUG=cypress:webpack cypress open", "cypress:open:preview": "cypress open --config baseUrl=http://localhost:4173/" }, - "dependencies": { - "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" - }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", - "node-jose": "^2.1.0", "typescript": "^4.5.4", "vite": "^2.8.0" + }, + "dependencies": { + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" } } diff --git a/tests/vite-app/public/example-JWKS.json b/tests/vite-app/public/example-JWKS.json index 74cd3aa..d6318b8 100644 --- a/tests/vite-app/public/example-JWKS.json +++ b/tests/vite-app/public/example-JWKS.json @@ -1,12 +1,12 @@ { "keys": [ { + "kid": "6fdd042a-14ca-4068-8b54-68a31a46e8bd", + "alg": "RS256", "kty": "RSA", - "kid": "PYftFhRIYTpwD6gzfMz6JTP0r3vyaiksBH4UGHOap3s", "use": "sig", - "alg": "RS256", - "e": "AQAB", - "n": "tgFy4kQIMSAiwHM2zohAX8CFd24A3km7ICmdoJN1V4fYK5QPt-kN_igFGb3trQrLcMYpgaOtAczz7NJfXo91GJQVWJLFINVVPgYHKrxUfr9car-Ujl-izyvXMKUOKAbc1FgMfkgnt6tmNCFbE7R3oHnrr3fWzIaM6mBlPdmaNgSM_FPfloukZw7YJQ496gsnHkscXmeIzzX13XnnmyzNlJYJPaTc3yqNJHZRgHqUexJWr8YDsSeY-aIdkqmKnkrqXCsActI9zou_cz3pn1Qm0lhWI3uLMXUjkzY8iNjnBSETUJxlu0Y3wpSm0lB2bAB2C6jms6eQBfruzWLunukFXw" + "n": "qVZa55XyCSvLWx6riFhA5PWwVbuAqpsz0ltQ384ogeHyDoXuJk79HPjOx3xqrhRZwMOh9Sf4kjdIzJP-JeZTUmvsuFfvDOGdxvUKuAvMWppEUsEjydGd7n6cRpwkgxusUfOouUFduR5OHZdkh8HNQGwfxF5tnkAmwCmRJckSbGZHbV6wiPafEDVhSSOvNW9jqtU4_t3d6x0K5xn1BOJpnn3YiiExuknV5vQXogR1OdGEXPc6tR6d1HGFSOeNLRpgo-JM-2sw8I2IlZ4YBLy34HqpFJzKXf8SfNyBQsHSg8KFRHUpcdd-L0-kkdMLeNbfJTyUgsIN0GD5DVL4ujMTR0LqEKIaAFPET27fIdRcudSF4xlJA3NOfZw61j0IuGVt8pvqLK1uGjIhVM6TEIhXn86WP5xBjO86bscxqFDlhGhv4OM7RCqMuzRHcB3r1vhmq_-7Fk8sVg6bG2WS5JjL1gCrC16ZYs3i4IviDF6ZuDscVE5E3Hy8UhWNEuEz3JlpuKkxYSVndtCczjoYXardH8ySdAjCPIeSP8n-4vC2IVy11icskGvoHfq9O-Q713ie7xZV65NEULph_7nHP3_GIwUba3JfJW7zSauP2QctS-TvD71caxmDwKtn3q3dPVDq7XRSopFFOQ5c8vJj7udBp9cyVxKM49-KXJwxlqId7fM", + "e": "AQAB" } ] } diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index 2fa49dd..fccaaca 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -1,8 +1,12 @@ -import { JWK, JWS } from "node-jose"; // https://github.com/cisco/node-jose +import { + generateKeyPair, + signJwt, + base64url, +} from "../../installation-and-basic-usage/test-util"; import { v4 } from "uuid"; import { writeFileSync } from "fs"; +import {} from "aws-jwt-verify"; -const keystore = (JWK as any).createKeyStore(); const ISSUER = "https://example.com"; const AUDIENCE = "aws-jwt-verify"; const JWKSURI = "/example-JWKS.json"; @@ -42,23 +46,6 @@ const notYetValidTokenPayload = { testcase: "not yet valid token", }; -const createSign = async (jwk, payload) => { - return await JWS.createSign( - { - alg: "RS256", - format: "compact", - }, - jwk - ) - .update(JSON.stringify(payload), "utf8") - .final(); -}; - -const props = { - alg: "RS256", - use: "sig", -}; - const saveFile = (filename, contents) => { console.log(`writing ${filename}...`); // eslint-disable-next-line security/detect-non-literal-fs-filename @@ -75,20 +62,33 @@ const tokendata = { }; const main = async () => { - const jwk = await keystore.generate("RSA", 2048, props); - - saveFile("public" + JWKSURI, keystore.toJSON()); - saveFile("cypress/fixtures" + JWKSURI, keystore.toJSON()); + const { privateKey, jwk } = generateKeyPair(); + jwk.kid = v4(); + const jwtHeader = { kid: jwk.kid, alg: "RS256" }; + + // fix: The JWK "n" member contained a leading zero. + // https://bugs.chromium.org/p/chromium/issues/detail?id=383998#c6 + let nBuffer = Buffer.from(jwk.n, "base64"); + if (nBuffer[0] === 0x00) { + nBuffer = nBuffer.subarray(1); + } + // fix: The JWK member "n" could not be base64url decoded or contained padding + const jwkWeb = { ...jwk, n: base64url(nBuffer) }; + const jwks = { keys: [jwkWeb] }; + + saveFile("public" + JWKSURI, jwks); + saveFile("cypress/fixtures" + JWKSURI, jwks); tokendata.ISSUER = ISSUER; tokendata.AUDIENCE = AUDIENCE; tokendata.JWKSURI = JWKSURI; - tokendata.VALID_TOKEN = await createSign(jwk, validTokenPayload); - tokendata.EXPIRED_TOKEN = await createSign(jwk, expiredTokenPayload); - tokendata.NOT_YET_VALID_TOKEN = await createSign( - jwk, - notYetValidTokenPayload + tokendata.VALID_TOKEN = signJwt(jwtHeader, validTokenPayload, privateKey); + tokendata.EXPIRED_TOKEN = signJwt(jwtHeader, expiredTokenPayload, privateKey); + tokendata.NOT_YET_VALID_TOKEN = signJwt( + jwtHeader, + notYetValidTokenPayload, + privateKey ); saveFile("cypress/fixtures/token-data.json", tokendata); From da65e7a61351f31d29b7a41f6a333aa6116641ca Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Thu, 3 Mar 2022 19:09:20 -0600 Subject: [PATCH 46/59] update tests --- tests/vite-app/.gitignore | 1 + .../cypress/integration/forminputs.spec.ts | 24 +++- .../cypress/integration/unittests.spec.ts | 114 ++++++++++++++++-- 3 files changed, 129 insertions(+), 10 deletions(-) diff --git a/tests/vite-app/.gitignore b/tests/vite-app/.gitignore index 4b29b63..7260a70 100644 --- a/tests/vite-app/.gitignore +++ b/tests/vite-app/.gitignore @@ -1,4 +1,5 @@ cypress/videos +cypress/screenshots !cypress/plugins/index.js !cypress/support/commands.js !cypress/support/index.js \ No newline at end of file diff --git a/tests/vite-app/cypress/integration/forminputs.spec.ts b/tests/vite-app/cypress/integration/forminputs.spec.ts index f312894..f84b49c 100644 --- a/tests/vite-app/cypress/integration/forminputs.spec.ts +++ b/tests/vite-app/cypress/integration/forminputs.spec.ts @@ -23,6 +23,7 @@ describe("enable Verify RSA", () => { describe("click Verify RSA", () => { const INVAILD_ISSUER = "https://example.org"; const INVAILD_JWKSURI = "/notexample-JWKS.json"; + const INVAILD_AUDIENCE = "notaudience"; beforeEach(() => { cy.visit("/"); @@ -36,13 +37,13 @@ describe("click Verify RSA", () => { ) => { cy.get("#jwt").type(jwt, { delay: 0 }); if (issuer) { - cy.get("#issuer").type(issuer); + cy.get("#issuer").type(issuer, { delay: 0 }); } if (audience) { - cy.get("#audience").type(audience); + cy.get("#audience").type(audience, { delay: 0 }); } if (jwksuri) { - cy.get("#jwksuri").type(jwksuri); + cy.get("#jwksuri").type(jwksuri, { delay: 0 }); } cy.get("#verifyrsa").click(); @@ -72,6 +73,23 @@ describe("click Verify RSA", () => { cy.get("#result").should("include.text", "Issuer not allowed"); }); + it("invalid audience", () => { + typeInputsAndClick(VALID_TOKEN, ISSUER, INVAILD_AUDIENCE, JWKSURI); + + cy.get("#result").should("include.text", "Audience not allowed"); + }); + + it("invalid signature", () => { + typeInputsAndClick( + VALID_TOKEN.substring(0, VALID_TOKEN.length - 2), + ISSUER, + "", + JWKSURI + ); + + cy.get("#result").should("include.text", "Invalid signature"); + }); + it("invalid JWKS Uri", () => { typeInputsAndClick(VALID_TOKEN, ISSUER, "", INVAILD_JWKSURI); diff --git a/tests/vite-app/cypress/integration/unittests.spec.ts b/tests/vite-app/cypress/integration/unittests.spec.ts index e19a35d..4f65819 100644 --- a/tests/vite-app/cypress/integration/unittests.spec.ts +++ b/tests/vite-app/cypress/integration/unittests.spec.ts @@ -1,32 +1,132 @@ /// import { JwtRsaVerifier } from "aws-jwt-verify"; +import { JwtPayload } from "aws-jwt-verify/jwt-model"; import { - VALID_TOKEN, ISSUER, AUDIENCE, JWKSURI, + VALID_TOKEN, + EXPIRED_TOKEN, + NOT_YET_VALID_TOKEN, } from "../fixtures/token-data.json"; describe("unit tests", () => { - it("JwtRsaVerifier create & verify", async () => { + const INVAILD_ISSUER = "https://example.org"; + const INVAILD_JWKSURI = "/notexample-JWKS.json"; + const INVAILD_AUDIENCE = "notaudience"; + + beforeEach(() => { cy.intercept("GET", JWKSURI, { fixture: "example-JWKS" }); + }); + + it("valid token", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: ISSUER, + audience: AUDIENCE, + jwksUri: JWKSURI, + }); + const payload = await verifier.verify(VALID_TOKEN); + + expect(payload).to.exist; + }); + it("expired token", async () => { const verifier = JwtRsaVerifier.create({ issuer: ISSUER, audience: AUDIENCE, jwksUri: JWKSURI, }); + try { + const payload = await verifier.verify(EXPIRED_TOKEN); + + expect(payload).to.not.exist; + } catch (ex) { + expect(ex.message).to.include("Token expired at "); + } + }); + + it("not yet valid token", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: ISSUER, + audience: AUDIENCE, + jwksUri: JWKSURI, + }); + + try { + const payload = await verifier.verify(NOT_YET_VALID_TOKEN); + + expect(payload).to.not.exist; + } catch (ex) { + expect(ex.message).to.include("Token can't be used before "); + } + }); + + it("invalid issuer", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: INVAILD_ISSUER, + audience: AUDIENCE, + jwksUri: JWKSURI, + }); + try { const payload = await verifier.verify(VALID_TOKEN); - console.log("Token is valid. Payload:", payload); - expect(payload).to.exist; + expect(payload).to.not.exist; } catch (ex) { - console.log(ex); - console.log("Token not valid!"); + expect(ex.message).to.include("Issuer not allowed"); + } + }); + + it("invalid audience", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: ISSUER, + audience: INVAILD_AUDIENCE, + jwksUri: JWKSURI, + }); + + try { + const payload = await verifier.verify(VALID_TOKEN); + + expect(payload).to.not.exist; + } catch (ex) { + expect(ex.message).to.include("Audience not allowed"); + } + }); - expect(ex).to.be.null; + it("invalid signature", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: ISSUER, + audience: AUDIENCE, + jwksUri: JWKSURI, + }); + + try { + const payload = await verifier.verify( + VALID_TOKEN.substring(0, VALID_TOKEN.length - 2) + ); + + expect(payload).to.not.exist; + } catch (ex) { + expect(ex.message).to.include("Invalid signature"); + } + }); + + it("invalid JWKS Uri", async () => { + const verifier = JwtRsaVerifier.create({ + issuer: ISSUER, + audience: AUDIENCE, + jwksUri: INVAILD_JWKSURI, + }); + + try { + const payload = await verifier.verify(VALID_TOKEN); + + expect(payload).to.not.exist; + } catch (ex) { + expect(ex.message).to.include( + "Failed to fetch /notexample-JWKS.json: Status code is 404, expected 200" + ); } }); }); From ac9b9ca2d19e6012dd9dadf067d72639be9369cb Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 4 Mar 2022 12:23:35 +0100 Subject: [PATCH 47/59] First stab at run-tests.sh --- tests/vite-app/package-lock.json | 245 ++++++++++++++++++- tests/vite-app/package.json | 3 +- tests/vite-app/run-tests.sh | 30 +++ tests/vite-app/util/generateExampleTokens.ts | 19 +- tests/vite-app/util/tsconfig.json | 9 + 5 files changed, 294 insertions(+), 12 deletions(-) create mode 100755 tests/vite-app/run-tests.sh create mode 100644 tests/vite-app/util/tsconfig.json diff --git a/tests/vite-app/package-lock.json b/tests/vite-app/package-lock.json index 69d1bdb..9e6b590 100644 --- a/tests/vite-app/package-lock.json +++ b/tests/vite-app/package-lock.json @@ -14,6 +14,7 @@ "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", + "ts-node": "^10.6.0", "typescript": "^4.5.4", "vite": "^2.8.0" } @@ -1795,6 +1796,27 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@cypress/request": { "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", @@ -1937,6 +1959,30 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -2190,7 +2236,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2208,6 +2253,15 @@ "acorn": "^8" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2316,6 +2370,12 @@ } ] }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -2883,6 +2943,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3020,6 +3086,15 @@ "node": ">=0.4.0" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -4387,6 +4462,12 @@ "semver": "bin/semver.js" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5328,6 +5409,48 @@ "node": ">=0.8" } }, + "node_modules/ts-node": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", + "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -5458,6 +5581,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -5653,6 +5782,15 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } } }, "dependencies": { @@ -6941,6 +7079,21 @@ "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@cypress/request": { "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", @@ -7065,6 +7218,30 @@ } } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -7317,8 +7494,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "peer": true + "dev": true }, "acorn-import-assertions": { "version": "1.8.0", @@ -7328,6 +7504,12 @@ "peer": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7395,6 +7577,12 @@ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -7820,6 +8008,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7927,6 +8121,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -8866,6 +9066,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -9562,6 +9768,27 @@ "punycode": "^2.1.1" } }, + "ts-node": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", + "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -9655,6 +9882,12 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -9785,6 +10018,12 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true } } } diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json index d3e625d..0ba6749 100644 --- a/tests/vite-app/package.json +++ b/tests/vite-app/package.json @@ -7,7 +7,7 @@ "build": "tsc && vite build", "preview": "vite preview", "reinstall": "npm uninstall aws-jwt-verify && npm install ../../aws-jwt-verify.tgz", - "tokengen": "tsc util/generateExampleTokens.ts && node util/generateExampleTokens.js", + "tokengen": "cd util && ts-node generateExampleTokens.ts", "cypress:run": "cypress run", "cypress:run:preview": "cypress run --config baseUrl=http://localhost:4173/", "cypress:open": "cypress open", @@ -18,6 +18,7 @@ "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", "cypress": "^9.5.0", + "ts-node": "^10.6.0", "typescript": "^4.5.4", "vite": "^2.8.0" }, diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh new file mode 100755 index 0000000..01b2fbc --- /dev/null +++ b/tests/vite-app/run-tests.sh @@ -0,0 +1,30 @@ +#!/bin/bash -e + +main() { + echo "Generating JWTs ..." + npm run tokengen + + echo "Starting Vite dev server in background ..." + npm run dev & + VITE_PID=$! + echo "Vite dev server launched as PID ${VITE_PID}" + while ! nc -z localhost 3000; do + echo "Waiting for dev server to come on-line ..." + sleep 1 + done + echo "Running cypress tests ..." + if ! npm run cypress:run; then + echo "Cypress test failed :(" + TEST_FAILED=true + fi + echo "Sending stop signal to Vite dev server (SIGINT) ..." + kill -s INT $VITE_PID + echo "Waiting for Vite dev server to actually stop ..." + wait + echo "Vite dev server stopped" + if [ ! -z $TEST_FAILED ]; then + return 1 + fi +} + +main diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index fccaaca..38b52ca 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -3,9 +3,9 @@ import { signJwt, base64url, } from "../../installation-and-basic-usage/test-util"; -import { v4 } from "uuid"; +import { randomUUID } from "crypto"; import { writeFileSync } from "fs"; -import {} from "aws-jwt-verify"; +import { join } from "path"; const ISSUER = "https://example.com"; const AUDIENCE = "aws-jwt-verify"; @@ -26,7 +26,7 @@ const validTokenPayload = { ...baseTokenPayload, nbf: NOW, exp: NOW + ONEYEAR, - jti: v4(), + jti: randomUUID(), testcase: "valid token", }; @@ -34,7 +34,7 @@ const expiredTokenPayload = { ...baseTokenPayload, nbf: NOW - ONEDAY, exp: NOW, - jti: v4(), + jti: randomUUID(), testcase: "expired token", }; @@ -42,14 +42,17 @@ const notYetValidTokenPayload = { ...baseTokenPayload, nbf: NOW + 366 * 24 * 60 * 60, exp: Math.floor(Date.now() / 1000) + 366 * 24 * 60 * 60, - jti: v4(), + jti: randomUUID(), testcase: "not yet valid token", }; -const saveFile = (filename, contents) => { +const saveFile = (filename: string, contents: Record) => { console.log(`writing ${filename}...`); // eslint-disable-next-line security/detect-non-literal-fs-filename - writeFileSync(filename, JSON.stringify(contents, null, 2) + "\n"); + writeFileSync( + join(__dirname, "..", filename), + JSON.stringify(contents, null, 2) + "\n" + ); }; const tokendata = { @@ -63,7 +66,7 @@ const tokendata = { const main = async () => { const { privateKey, jwk } = generateKeyPair(); - jwk.kid = v4(); + jwk.kid = randomUUID(); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; // fix: The JWK "n" member contained a leading zero. diff --git a/tests/vite-app/util/tsconfig.json b/tests/vite-app/util/tsconfig.json new file mode 100644 index 0000000..febd20d --- /dev/null +++ b/tests/vite-app/util/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "commonjs", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true + } +} From 37101d9fb5053848dce7c7dcfb8d408800271f8f Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Fri, 4 Mar 2022 14:27:04 +0100 Subject: [PATCH 48/59] Move B64URL stuff and trim leading zero to test-util --- src/node-web-compat-web.ts | 2 +- tests/installation-and-basic-usage/test-util.ts | 12 ++++++++++-- tests/unit/test-util.ts | 12 ++++++++++-- .../vite-app/cypress/integration/unittests.spec.ts | 1 - tests/vite-app/util/generateExampleTokens.ts | 13 +------------ 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/node-web-compat-web.ts b/src/node-web-compat-web.ts index 92aa4a1..cac0679 100644 --- a/src/node-web-compat-web.ts +++ b/src/node-web-compat-web.ts @@ -27,7 +27,7 @@ export const nodeWebCompat: NodeWebCompat = { const responseTimeout = Number(requestOptions?.["responseTimeout"]); if (responseTimeout) { const abort = new AbortController(); - const i = setTimeout( + setTimeout( () => // eslint-disable-next-line @typescript-eslint/no-explicit-any (abort.abort as any)( diff --git a/tests/installation-and-basic-usage/test-util.ts b/tests/installation-and-basic-usage/test-util.ts index 25881c1..1d1e8f4 100644 --- a/tests/installation-and-basic-usage/test-util.ts +++ b/tests/installation-and-basic-usage/test-util.ts @@ -31,11 +31,17 @@ export function publicKeyToJwk(publicKey: KeyObject) { alg: "RS256", kty: "RSA", use: "sig", - n: Buffer.from(n).toString("base64"), - e: Buffer.from(e).toString("base64"), + n: base64url(removeLeadingZero(n)), + e: base64url(removeLeadingZero(e)), } as Jwk; } +function removeLeadingZero(positiveInteger: Buffer) { + return positiveInteger[0] === 0 + ? positiveInteger.subarray(1) + : positiveInteger; +} + export function signJwt( header: { kid: string; alg: string }, payload: { [key: string]: any }, @@ -58,6 +64,8 @@ export function signJwt( } export function base64url(x: string | Buffer) { + // Note: since Node.js 14.18 you can just do Buffer.from(x).toString("base64url") + // That's pretty recent still, and CI environments might run older Node14, so we'll do it ourselves for a while longer if (typeof x === "string") { x = Buffer.from(x); } diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index b34b947..b819fbd 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -51,11 +51,17 @@ export function publicKeyToJwk( ); return { ...jwkOptions, - n: n.toString("base64"), - e: e.toString("base64"), + n: base64url(removeLeadingZero(n)), + e: base64url(removeLeadingZero(e)), } as Jwk; } +function removeLeadingZero(positiveInteger: Buffer) { + return positiveInteger[0] === 0 + ? positiveInteger.subarray(1) + : positiveInteger; +} + enum JwtSignatureAlgorithms { RS256 = "RSA-SHA256", RS384 = "RSA-SHA384", @@ -92,6 +98,8 @@ export function signJwt( } export function base64url(x: string | Buffer) { + // Note: since Node.js 14.18 you can just do Buffer.from(x).toString("base64url") + // That's pretty recent still, and CI environments might run older Node14, so we'll do it ourselves for a while longer if (typeof x === "string") { x = Buffer.from(x); } diff --git a/tests/vite-app/cypress/integration/unittests.spec.ts b/tests/vite-app/cypress/integration/unittests.spec.ts index 4f65819..cf4eefd 100644 --- a/tests/vite-app/cypress/integration/unittests.spec.ts +++ b/tests/vite-app/cypress/integration/unittests.spec.ts @@ -1,6 +1,5 @@ /// import { JwtRsaVerifier } from "aws-jwt-verify"; -import { JwtPayload } from "aws-jwt-verify/jwt-model"; import { ISSUER, AUDIENCE, diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index 38b52ca..f0ecb2b 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -1,7 +1,6 @@ import { generateKeyPair, signJwt, - base64url, } from "../../installation-and-basic-usage/test-util"; import { randomUUID } from "crypto"; import { writeFileSync } from "fs"; @@ -65,20 +64,10 @@ const tokendata = { }; const main = async () => { - const { privateKey, jwk } = generateKeyPair(); + const { privateKey, jwk, jwks } = generateKeyPair(); jwk.kid = randomUUID(); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; - // fix: The JWK "n" member contained a leading zero. - // https://bugs.chromium.org/p/chromium/issues/detail?id=383998#c6 - let nBuffer = Buffer.from(jwk.n, "base64"); - if (nBuffer[0] === 0x00) { - nBuffer = nBuffer.subarray(1); - } - // fix: The JWK member "n" could not be base64url decoded or contained padding - const jwkWeb = { ...jwk, n: base64url(nBuffer) }; - const jwks = { keys: [jwkWeb] }; - saveFile("public" + JWKSURI, jwks); saveFile("cypress/fixtures" + JWKSURI, jwks); From b41747565a228e8d909c0bc464d9e04e82712318 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 10:17:12 +0100 Subject: [PATCH 49/59] Remove jwt and jwks sample data from git --- tests/vite-app/.gitignore | 2 ++ tests/vite-app/cypress/fixtures/example-JWKS.json | 12 ------------ tests/vite-app/cypress/fixtures/token-data.json | 8 -------- tests/vite-app/public/example-JWKS.json | 12 ------------ 4 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 tests/vite-app/cypress/fixtures/example-JWKS.json delete mode 100644 tests/vite-app/cypress/fixtures/token-data.json delete mode 100644 tests/vite-app/public/example-JWKS.json diff --git a/tests/vite-app/.gitignore b/tests/vite-app/.gitignore index 7260a70..5f086e9 100644 --- a/tests/vite-app/.gitignore +++ b/tests/vite-app/.gitignore @@ -1,5 +1,7 @@ cypress/videos cypress/screenshots +cypress/public/*.json +cypress/fixtures/*.json !cypress/plugins/index.js !cypress/support/commands.js !cypress/support/index.js \ No newline at end of file diff --git a/tests/vite-app/cypress/fixtures/example-JWKS.json b/tests/vite-app/cypress/fixtures/example-JWKS.json deleted file mode 100644 index d6318b8..0000000 --- a/tests/vite-app/cypress/fixtures/example-JWKS.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keys": [ - { - "kid": "6fdd042a-14ca-4068-8b54-68a31a46e8bd", - "alg": "RS256", - "kty": "RSA", - "use": "sig", - "n": "qVZa55XyCSvLWx6riFhA5PWwVbuAqpsz0ltQ384ogeHyDoXuJk79HPjOx3xqrhRZwMOh9Sf4kjdIzJP-JeZTUmvsuFfvDOGdxvUKuAvMWppEUsEjydGd7n6cRpwkgxusUfOouUFduR5OHZdkh8HNQGwfxF5tnkAmwCmRJckSbGZHbV6wiPafEDVhSSOvNW9jqtU4_t3d6x0K5xn1BOJpnn3YiiExuknV5vQXogR1OdGEXPc6tR6d1HGFSOeNLRpgo-JM-2sw8I2IlZ4YBLy34HqpFJzKXf8SfNyBQsHSg8KFRHUpcdd-L0-kkdMLeNbfJTyUgsIN0GD5DVL4ujMTR0LqEKIaAFPET27fIdRcudSF4xlJA3NOfZw61j0IuGVt8pvqLK1uGjIhVM6TEIhXn86WP5xBjO86bscxqFDlhGhv4OM7RCqMuzRHcB3r1vhmq_-7Fk8sVg6bG2WS5JjL1gCrC16ZYs3i4IviDF6ZuDscVE5E3Hy8UhWNEuEz3JlpuKkxYSVndtCczjoYXardH8ySdAjCPIeSP8n-4vC2IVy11icskGvoHfq9O-Q713ie7xZV65NEULph_7nHP3_GIwUba3JfJW7zSauP2QctS-TvD71caxmDwKtn3q3dPVDq7XRSopFFOQ5c8vJj7udBp9cyVxKM49-KXJwxlqId7fM", - "e": "AQAB" - } - ] -} diff --git a/tests/vite-app/cypress/fixtures/token-data.json b/tests/vite-app/cypress/fixtures/token-data.json deleted file mode 100644 index 477b560..0000000 --- a/tests/vite-app/cypress/fixtures/token-data.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "ISSUER": "https://example.com", - "AUDIENCE": "aws-jwt-verify", - "JWKSURI": "/example-JWKS.json", - "VALID_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjM1NjAyMSwiZXhwIjoxNjc3ODkyMDIxLCJqdGkiOiJiOWE1YWUxYi0zMmY4LTRiMWQtYjgzNS1mYWJjOWQ5NWVmYTAiLCJ0ZXN0Y2FzZSI6InZhbGlkIHRva2VuIn0.UHqS6IKYkFUxHJvCnCE2kiBNP0pHrL0lhtT-3reyCu_FLLBTRfmZ9bkb4td9v278m0KupfKfe2-9HgseQPJdZd1QoMIvIsjSN9WfDzyEXLayt3jzbgUn78JNfmShgoiSQi3bOdwOJMIJkP94oMecC3kwTy37n_tfaYPaxfMiPl2w4tjBlOeN1PEd2JEuFmYLWrhxBCfmHFHYFX0S0LwEIz4HCKSs70lBHr6pYuWqWM8LKNtEXGT7XhK1CRim4mA5gHKXn2raImb5Vr4L1kHD4OI_7cdEPEn9DCQrY-JK9ZX9_014ygy4zBZRrYkvEjCCQ_Vnxd48wELTN4bg9BMoTJ11-md5dJNdLpzIt_NT8KhnnQcdi5zjmaZcANyJWTnTL_y9ONeUtVgEuks0S39SqRb446wem-Vig7713cUvT_i245sauXNvWI08ogEX1vjjQ-CyHvoqPnaIrYKa_pQ467xZ_Eic1g98n4VXaqQATXhX-pgyvvTNd9J1wBUc3ukksGpEGmsOgVgTH6KIndz9GUEaHhS7s_9Greg4rdCFzxKO0ZaSkeFD3r10dXEiC2v7pTglr51-JUzoWUzNLZQ3a5Oi1ZfpOArSdJiPblsEzqf9aPNtjsV10QyDvhfZzHpmDWwsnFjGnbVknGP2uAssePLYaSmytKNBPdeb9nNxV0c", - "EXPIRED_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY0NjI2OTYyMSwiZXhwIjoxNjQ2MzU2MDIxLCJqdGkiOiJkMWZlNmRlMy0zYzAwLTQwOGMtYWQ5My1kNjcyYzA1MTcyZjQiLCJ0ZXN0Y2FzZSI6ImV4cGlyZWQgdG9rZW4ifQ.eDmPCG8YcbSZcsIrWLX73nOQeH6_htIgqwxixu2Vci9wQJQhqiXM-7HojjsmNCnYLlkB0yJG8VkjA_hnWsWyra4zSHkiTrrAh1j9q3LJckGJPqMlawiuaF07V8SAbfP04DR4Cz2oPOeQstYzvcRyaj6B6IxpJckJ5HGWZhNHAha-UxjJUrmOhGkzgHcDtfgUEOam67Z_VHDxht4WDjnJ3Ho94vWmCZMNp4GPhvSGKQq5GjRTgz8lRrnM28jvUndGv2hqsxD4P2z4-g9LUOjW9TEJNyVS88p1t3gEpqgAalKrtrATOIWL35vRlHaSwfoUNTAPv2FelVQxaeZ2Pl0KE9aLHSSXZGtrIuKaaTQ_rY8gkwjibkk4--D_54sNYrzOB9oYa9-RcLR1lSZHitVrRN4oEX7PJAB7soS0XTsmB4F6fNeIq1OQBQNlqPlvKG-znulyGXZEgiI_eCpGt1lPwNGP4Wwvg3eDFnDiibpfRfxERnC8pQPlS947ncCnhv7Sw0NQBhhcTlSSftduN_n-0zRnDaRGi8mB5FJL9Y0NyE-7RscvgHBNap8OAakj0vCoT0a7MyI6RdbEcSASMXqPO3fZIbiGBp-shAS7r_HWib5U_numeI2Bd8wQjWc99TczEB07la61iNPNbA5Hi_JlUaX5iQED-59bMRfoIZNoQvQ", - "NOT_YET_VALID_TOKEN": "eyJraWQiOiI2ZmRkMDQyYS0xNGNhLTQwNjgtOGI1NC02OGEzMWE0NmU4YmQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJURVNUIERBVEEiLCJhdWQiOiJhd3Mtand0LXZlcmlmeSIsImlhdCI6MTY0NjM1NjAyMSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsIm5iZiI6MTY3Nzk3ODQyMSwiZXhwIjoxNjc3OTc4NDUxLCJqdGkiOiIyOWU0NTUxYi04ZDIxLTRmZDQtYWM1NS1mNmNjNjUwOTcxZmQiLCJ0ZXN0Y2FzZSI6Im5vdCB5ZXQgdmFsaWQgdG9rZW4ifQ.QJJNV_lfAysSDLOHYgm2SStIokRIbJS9SjcuXYOwhxNQrsAYlYVad-2S2sH_k2fm_rlLNb-hLWg0cdRGe1ShN4TNGEWXD6VwP002QaV9SvUwLiiWWt4BrxEb4NEfAduDpp0P3GWlCxeoMG7Svzy3fsXY6qd9SeZBsTfcY-YSIj4zEAxFpiJ3gyMIA_CvSFFe6y9sBDhW-UNtF7tIdvhzYg9alFvP3csMi68IWeft3BcBTSPPP3oK3LvWdSh2jhNWN4t9w9-kfX5GYQQwfkyOOsP-ZqDaEvdGJ73f1MqC9tOxEJuigCYqrVLQoTy6TM6TKNsmxapHu4SxQP2mJUMhiX1zNZYJRj4rIqyWQm1DWu-BsUNV3V2VPqdV2C-BSuo4IiYwz1z0Q_d9j8NM9Kx9HBPOyctIyA73YZ8zSKwXOe7yvQN354mJG433DJbHNIP4e5B3gTnc-he_XOMT6ov2EvU0kwM_-qOndWQYzfEkiTRhLz3PemaMfxPFqdJdAziGJ9VyhVycrR8R8EydHFaP752K7RNb2dDzHB48SglRWg9SuDz6f3WxkzYXLUvp04lszv9cNWOmZDxfbdw47bmFEDmKRKtQ6jCLXwFktP3Ki2IInGzX2nn82Lhw8F0yuMAaPZQV2P2ktxk3lAFaAL6rALN2Wc2O1BZg6V_-Xn8ir2c" -} diff --git a/tests/vite-app/public/example-JWKS.json b/tests/vite-app/public/example-JWKS.json deleted file mode 100644 index d6318b8..0000000 --- a/tests/vite-app/public/example-JWKS.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "keys": [ - { - "kid": "6fdd042a-14ca-4068-8b54-68a31a46e8bd", - "alg": "RS256", - "kty": "RSA", - "use": "sig", - "n": "qVZa55XyCSvLWx6riFhA5PWwVbuAqpsz0ltQ384ogeHyDoXuJk79HPjOx3xqrhRZwMOh9Sf4kjdIzJP-JeZTUmvsuFfvDOGdxvUKuAvMWppEUsEjydGd7n6cRpwkgxusUfOouUFduR5OHZdkh8HNQGwfxF5tnkAmwCmRJckSbGZHbV6wiPafEDVhSSOvNW9jqtU4_t3d6x0K5xn1BOJpnn3YiiExuknV5vQXogR1OdGEXPc6tR6d1HGFSOeNLRpgo-JM-2sw8I2IlZ4YBLy34HqpFJzKXf8SfNyBQsHSg8KFRHUpcdd-L0-kkdMLeNbfJTyUgsIN0GD5DVL4ujMTR0LqEKIaAFPET27fIdRcudSF4xlJA3NOfZw61j0IuGVt8pvqLK1uGjIhVM6TEIhXn86WP5xBjO86bscxqFDlhGhv4OM7RCqMuzRHcB3r1vhmq_-7Fk8sVg6bG2WS5JjL1gCrC16ZYs3i4IviDF6ZuDscVE5E3Hy8UhWNEuEz3JlpuKkxYSVndtCczjoYXardH8ySdAjCPIeSP8n-4vC2IVy11icskGvoHfq9O-Q713ie7xZV65NEULph_7nHP3_GIwUba3JfJW7zSauP2QctS-TvD71caxmDwKtn3q3dPVDq7XRSopFFOQ5c8vJj7udBp9cyVxKM49-KXJwxlqId7fM", - "e": "AQAB" - } - ] -} From 8e4011bfd586bf6c81d55348d2b76eb164f630dd Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 10:18:22 +0100 Subject: [PATCH 50/59] Consolidated test util script --- src/node-web-compat.ts | 2 +- .../test-script.ts | 7 +- .../installation-and-basic-usage/test-util.ts | 77 ------------ tests/unit/test-util.ts | 109 +++------------- tests/util/util.ts | 119 ++++++++++++++++++ tests/vite-app/util/generateExampleTokens.ts | 10 +- 6 files changed, 145 insertions(+), 179 deletions(-) delete mode 100644 tests/installation-and-basic-usage/test-util.ts create mode 100644 tests/util/util.ts diff --git a/src/node-web-compat.ts b/src/node-web-compat.ts index 349f677..d14cda3 100644 --- a/src/node-web-compat.ts +++ b/src/node-web-compat.ts @@ -6,7 +6,7 @@ // This file contains an interface that the specific Node.js and Web implementations must implement. // // At runtime, either the Node.js or Web implementation is actually loaded. This works because the -// package.json specifies "#node-web-compat" as a subpath import, with conditions pointing to the right file (for Node.js or Web) +// package.json specifies "#node-web-compat" as a subpath import, with conditions pointing to the right implementation (for Node.js or Web) import { Json } from "./safe-json-parse.js"; import { diff --git a/tests/installation-and-basic-usage/test-script.ts b/tests/installation-and-basic-usage/test-script.ts index 4bd175a..47dd064 100644 --- a/tests/installation-and-basic-usage/test-script.ts +++ b/tests/installation-and-basic-usage/test-script.ts @@ -1,14 +1,17 @@ import { JwtRsaVerifier } from "aws-jwt-verify"; -import { generateKeyPair, signJwt } from "./test-util"; +import { generateKeyPair, signJwt } from "../util/util"; import { SimpleJwksCache } from "aws-jwt-verify/jwk"; import { SimpleJsonFetcher } from "aws-jwt-verify/https"; +import { deconstructPublicKeyInDerFormat } from "aws-jwt-verify/asn1"; import { createServer } from "https"; import { readFileSync } from "fs"; import { join } from "path"; const issuer = "https://example.com/idp"; const audience = "myaudience"; -const { privateKey, jwk, jwks } = generateKeyPair(); +const { privateKey, jwk, jwks } = generateKeyPair( + deconstructPublicKeyInDerFormat +); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; const jwtPayload = { hello: "world", diff --git a/tests/installation-and-basic-usage/test-util.ts b/tests/installation-and-basic-usage/test-util.ts deleted file mode 100644 index 1d1e8f4..0000000 --- a/tests/installation-and-basic-usage/test-util.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Stand-alone and trimmed down copy of tests/unit/test-util.ts - * Copied here so that the test in this dir is fully independent of aws-jwt-verify sources, - * and only depends on the aws-jwt-verify package - */ - -import { createSign, generateKeyPairSync, KeyObject } from "crypto"; -import { deconstructPublicKeyInDerFormat } from "aws-jwt-verify/asn1"; -import { Jwk, Jwks } from "aws-jwt-verify/jwk"; - -export function generateKeyPair() { - const { privateKey, publicKey } = generateKeyPairSync("rsa", { - modulusLength: 4096, - publicExponent: 0x10001, - }); - const jwk = publicKeyToJwk(publicKey); - - return { - privateKey, - jwks: { keys: [jwk] } as Jwks, - jwk, - }; -} - -export function publicKeyToJwk(publicKey: KeyObject) { - const { n, e } = deconstructPublicKeyInDerFormat( - publicKey.export({ format: "der", type: "spki" }) - ); - return { - kid: "testkid", - alg: "RS256", - kty: "RSA", - use: "sig", - n: base64url(removeLeadingZero(n)), - e: base64url(removeLeadingZero(e)), - } as Jwk; -} - -function removeLeadingZero(positiveInteger: Buffer) { - return positiveInteger[0] === 0 - ? positiveInteger.subarray(1) - : positiveInteger; -} - -export function signJwt( - header: { kid: string; alg: string }, - payload: { [key: string]: any }, - privateKey: KeyObject, - produceValidSignature = true -) { - const toSign = [ - base64url(JSON.stringify(header)), - base64url(JSON.stringify(payload)), - ].join("."); - const sign = createSign("RSA-SHA256"); - sign.write(toSign); - sign.end(); - const signature = sign.sign(privateKey); - if (!produceValidSignature) { - signature[0] = ~signature[0]; // swap first byte - } - const signedJwt = [toSign, base64url(signature)].join("."); - return signedJwt; -} - -export function base64url(x: string | Buffer) { - // Note: since Node.js 14.18 you can just do Buffer.from(x).toString("base64url") - // That's pretty recent still, and CI environments might run older Node14, so we'll do it ourselves for a while longer - if (typeof x === "string") { - x = Buffer.from(x); - } - return x - .toString("base64") - .replace(/=/g, "") - .replace(/\+/g, "-") - .replace(/\//g, "_"); -} diff --git a/tests/unit/test-util.ts b/tests/unit/test-util.ts index b819fbd..6d7f532 100644 --- a/tests/unit/test-util.ts +++ b/tests/unit/test-util.ts @@ -1,113 +1,34 @@ -import { createSign, generateKeyPairSync, KeyObject } from "crypto"; import nock from "nock"; import { URL } from "url"; +export { base64url, signJwt } from "../util/util"; +import { KeyObject } from "crypto"; +import { + generateKeyPair as generateKeyPairImpl, + publicKeyToJwk as publicKeyToJwkImpl, +} from "../util/util"; import { deconstructPublicKeyInDerFormat } from "../../src/asn1"; -import { Jwk, Jwks } from "../../src/jwk"; - -export function disallowAllRealNetworkTraffic() { - nock.disableNetConnect(); -} - -export function allowAllRealNetworkTraffic() { - nock.enableNetConnect(); -} export function generateKeyPair(options?: { kid?: string; alg?: string }) { - const { privateKey, publicKey } = generateKeyPairSync("rsa", { - modulusLength: 4096, - publicExponent: 0x10001, - }); - const jwk = publicKeyToJwk(publicKey, { - kid: options?.kid, - alg: options?.alg, - }); - - return { - publicKey, - publicKeyDer: publicKey.export({ format: "der", type: "spki" }), - publicKeyPem: publicKey.export({ format: "pem", type: "spki" }), - privateKey, - privateKeyDer: privateKey.export({ format: "der", type: "pkcs8" }), - privateKeyPem: privateKey.export({ format: "pem", type: "pkcs8" }), - jwks: { keys: [jwk] } as Jwks, - jwk, - nBuffer: Buffer.from(jwk.n, "base64"), - eBuffer: Buffer.from(jwk.e, "base64"), - }; + return generateKeyPairImpl(deconstructPublicKeyInDerFormat, options); } export function publicKeyToJwk( publicKey: KeyObject, jwkOptions: { kid?: string; alg?: string; kty?: string; use?: string } = {} ) { - jwkOptions = { - kid: jwkOptions.kid ?? "testkid", - alg: jwkOptions.alg ?? "RS256", - kty: jwkOptions.kty ?? "RSA", - use: jwkOptions.use ?? "sig", - }; - const { n, e } = deconstructPublicKeyInDerFormat( - publicKey.export({ format: "der", type: "spki" }) + return publicKeyToJwkImpl( + publicKey, + deconstructPublicKeyInDerFormat, + jwkOptions ); - return { - ...jwkOptions, - n: base64url(removeLeadingZero(n)), - e: base64url(removeLeadingZero(e)), - } as Jwk; } -function removeLeadingZero(positiveInteger: Buffer) { - return positiveInteger[0] === 0 - ? positiveInteger.subarray(1) - : positiveInteger; -} - -enum JwtSignatureAlgorithms { - RS256 = "RSA-SHA256", - RS384 = "RSA-SHA384", - RS512 = "RSA-SHA512", -} - -export function signJwt( - header: { kid?: string; alg?: string; [key: string]: any }, - payload: { [key: string]: any }, - privateKey: KeyObject, - produceValidSignature = true -) { - header = { - ...header, - alg: Object.keys(header).includes("alg") ? header.alg : "RS256", - }; - payload = { exp: Math.floor(Date.now() / 1000 + 100), ...payload }; - const toSign = [ - base64url(JSON.stringify(header)), - base64url(JSON.stringify(payload)), - ].join("."); - const sign = createSign( - JwtSignatureAlgorithms[header.alg as keyof typeof JwtSignatureAlgorithms] ?? - "RSA-SHA256" - ); - sign.write(toSign); - sign.end(); - const signature = sign.sign(privateKey); - if (!produceValidSignature) { - signature[0] = ~signature[0]; // swap first byte - } - const signedJwt = [toSign, base64url(signature)].join("."); - return signedJwt; +export function disallowAllRealNetworkTraffic() { + nock.disableNetConnect(); } -export function base64url(x: string | Buffer) { - // Note: since Node.js 14.18 you can just do Buffer.from(x).toString("base64url") - // That's pretty recent still, and CI environments might run older Node14, so we'll do it ourselves for a while longer - if (typeof x === "string") { - x = Buffer.from(x); - } - return x - .toString("base64") - .replace(/=/g, "") - .replace(/\+/g, "-") - .replace(/\//g, "_"); +export function allowAllRealNetworkTraffic() { + nock.enableNetConnect(); } export function throwOnUnusedMocks() { diff --git a/tests/util/util.ts b/tests/util/util.ts new file mode 100644 index 0000000..c7d298b --- /dev/null +++ b/tests/util/util.ts @@ -0,0 +1,119 @@ +/** + * Utility functions used by unit and integration tests + */ + +import { createSign, generateKeyPairSync, KeyObject } from "crypto"; + +export function generateKeyPair( + deconstructPublicKeyInDerFormat: (publicKey: Buffer) => { + n: Buffer; + e: Buffer; + }, + options?: { kid?: string; alg?: string } +) { + const { privateKey, publicKey } = generateKeyPairSync("rsa", { + modulusLength: 4096, + publicExponent: 0x10001, + }); + const jwk = publicKeyToJwk(publicKey, deconstructPublicKeyInDerFormat, { + kid: options?.kid, + alg: options?.alg, + }); + + return { + publicKey, + publicKeyDer: publicKey.export({ format: "der", type: "spki" }), + publicKeyPem: publicKey.export({ format: "pem", type: "spki" }), + privateKey, + privateKeyDer: privateKey.export({ format: "der", type: "pkcs8" }), + privateKeyPem: privateKey.export({ format: "pem", type: "pkcs8" }), + jwks: { keys: [jwk] }, + jwk, + nBuffer: Buffer.from(jwk.n, "base64"), + eBuffer: Buffer.from(jwk.e, "base64"), + }; +} + +export function publicKeyToJwk( + publicKey: KeyObject, + deconstructPublicKeyInDerFormat: (k: Buffer) => { n: Buffer; e: Buffer }, + jwkOptions: { kid?: string; alg?: string; kty?: string; use?: string } = {} +) { + jwkOptions = { + kid: jwkOptions.kid ?? "testkid", + alg: jwkOptions.alg ?? "RS256", + kty: jwkOptions.kty ?? "RSA", + use: jwkOptions.use ?? "sig", + }; + const { n, e } = deconstructPublicKeyInDerFormat( + publicKey.export({ format: "der", type: "spki" }) + ); + const res = { + ...(jwkOptions as Required), + n: base64url(removeLeadingZero(n)), + e: base64url(removeLeadingZero(e)), + }; + return res as { + kid: string; + alg?: string; + kty: string; + use: string; + n: string; + e: string; + [key: string]: any; + }; +} + +function removeLeadingZero(positiveInteger: Buffer) { + return positiveInteger[0] === 0 + ? positiveInteger.subarray(1) + : positiveInteger; +} + +enum JwtSignatureAlgorithms { + RS256 = "RSA-SHA256", + RS384 = "RSA-SHA384", + RS512 = "RSA-SHA512", +} + +export function signJwt( + header: { kid?: string; alg?: string; [key: string]: any }, + payload: { [key: string]: any }, + privateKey: KeyObject, + produceValidSignature = true +) { + header = { + ...header, + alg: Object.keys(header).includes("alg") ? header.alg : "RS256", + }; + payload = { exp: Math.floor(Date.now() / 1000 + 100), ...payload }; + const toSign = [ + base64url(JSON.stringify(header)), + base64url(JSON.stringify(payload)), + ].join("."); + const sign = createSign( + JwtSignatureAlgorithms[header.alg as keyof typeof JwtSignatureAlgorithms] ?? + "RSA-SHA256" + ); + sign.write(toSign); + sign.end(); + const signature = sign.sign(privateKey); + if (!produceValidSignature) { + signature[0] = ~signature[0]; // swap first byte + } + const signedJwt = [toSign, base64url(signature)].join("."); + return signedJwt; +} + +export function base64url(x: string | Buffer) { + // Note: since Node.js 14.18 you can just do Buffer.from(x).toString("base64url") + // That's pretty recent still, and CI environments might run older Node14, so we'll do it ourselves for a while longer + if (typeof x === "string") { + x = Buffer.from(x); + } + return x + .toString("base64") + .replace(/=/g, "") + .replace(/\+/g, "-") + .replace(/\//g, "_"); +} diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index f0ecb2b..aba9793 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -1,7 +1,5 @@ -import { - generateKeyPair, - signJwt, -} from "../../installation-and-basic-usage/test-util"; +import { generateKeyPair, signJwt } from "../../util/util"; +import { deconstructPublicKeyInDerFormat } from "aws-jwt-verify/asn1"; import { randomUUID } from "crypto"; import { writeFileSync } from "fs"; import { join } from "path"; @@ -64,7 +62,9 @@ const tokendata = { }; const main = async () => { - const { privateKey, jwk, jwks } = generateKeyPair(); + const { privateKey, jwk, jwks } = generateKeyPair( + deconstructPublicKeyInDerFormat + ); jwk.kid = randomUUID(); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; From 7e513cfae5a756e14f0e794bcd7724252a44adf6 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 11:41:11 +0100 Subject: [PATCH 51/59] gitignore tweak --- tests/vite-app/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/vite-app/.gitignore b/tests/vite-app/.gitignore index 5f086e9..8122d1b 100644 --- a/tests/vite-app/.gitignore +++ b/tests/vite-app/.gitignore @@ -1,6 +1,6 @@ cypress/videos cypress/screenshots -cypress/public/*.json +public/*.json cypress/fixtures/*.json !cypress/plugins/index.js !cypress/support/commands.js From 9cc5a4f197edfa68e2da9f9dc7f4c4c532ea258f Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Mon, 7 Mar 2022 07:35:13 -0600 Subject: [PATCH 52/59] fix tokengen to create directories --- tests/vite-app/util/generateExampleTokens.ts | 29 ++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index aba9793..ecf37a9 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -1,12 +1,13 @@ import { generateKeyPair, signJwt } from "../../util/util"; import { deconstructPublicKeyInDerFormat } from "aws-jwt-verify/asn1"; import { randomUUID } from "crypto"; -import { writeFileSync } from "fs"; +import { writeFileSync, existsSync, mkdirSync } from "fs"; import { join } from "path"; const ISSUER = "https://example.com"; const AUDIENCE = "aws-jwt-verify"; -const JWKSURI = "/example-JWKS.json"; +const JWKSFILE = "example-JWKS.json"; +const JWKSURI = "/" + JWKSFILE; const NOW = Math.floor(Date.now() / 1000) - 30; const ONEDAY = 24 * 60 * 60; @@ -43,13 +44,19 @@ const notYetValidTokenPayload = { testcase: "not yet valid token", }; -const saveFile = (filename: string, contents: Record) => { - console.log(`writing ${filename}...`); +const saveFile = ( + directory: string, + filename: string, + contents: Record +) => { + const fullDir = join(__dirname, "..", directory); + if (!existsSync(fullDir)) { + mkdirSync(fullDir, { recursive: true }); + } + const fullPath = join(fullDir, filename); + console.log(`writing ${fullPath}...`); // eslint-disable-next-line security/detect-non-literal-fs-filename - writeFileSync( - join(__dirname, "..", filename), - JSON.stringify(contents, null, 2) + "\n" - ); + writeFileSync(fullPath, JSON.stringify(contents, null, 2) + "\n"); }; const tokendata = { @@ -68,8 +75,8 @@ const main = async () => { jwk.kid = randomUUID(); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; - saveFile("public" + JWKSURI, jwks); - saveFile("cypress/fixtures" + JWKSURI, jwks); + saveFile("public", JWKSFILE, jwks); + saveFile(join("cypress", "fixtures"), JWKSFILE, jwks); tokendata.ISSUER = ISSUER; tokendata.AUDIENCE = AUDIENCE; @@ -83,7 +90,7 @@ const main = async () => { privateKey ); - saveFile("cypress/fixtures/token-data.json", tokendata); + saveFile(join("cypress", "fixtures"), "token-data.json", tokendata); console.log("done"); }; From bdc16ba1da748ea5d8f059c466421ab6bf9b3c63 Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Mon, 7 Mar 2022 07:35:34 -0600 Subject: [PATCH 53/59] add vite preview server testing --- tests/vite-app/run-tests.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh index 01b2fbc..7928440 100755 --- a/tests/vite-app/run-tests.sh +++ b/tests/vite-app/run-tests.sh @@ -25,6 +25,30 @@ main() { if [ ! -z $TEST_FAILED ]; then return 1 fi + + echo "Building Vite app for preview ..." + npm run build + echo "Starting Vite preview server in background ..." + npm run preview & + VITE_PID=$! + echo "Vite preview server launched as PID ${VITE_PID}" + while ! nc -z localhost 4173; do + echo "Waiting for preview server to come on-line ..." + sleep 1 + done + echo "Running cypress tests ..." + if ! npm run cypress:run:preview; then + echo "Cypress test failed :(" + TEST_FAILED=true + fi + echo "Sending stop signal to Vite preview server (SIGINT) ..." + kill -s INT $VITE_PID + echo "Waiting for Vite preview server to actually stop ..." + wait + echo "Vite preview server stopped" + if [ ! -z $TEST_FAILED ]; then + return 1 + fi } main From 44bf5cd19724527f5ff3553dc8261128d9854f86 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 15:38:10 +0100 Subject: [PATCH 54/59] Created shell function --- tests/vite-app/run-tests.sh | 58 +++++++++----------- tests/vite-app/util/generateExampleTokens.ts | 4 +- 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh index 7928440..b6e1a4b 100755 --- a/tests/vite-app/run-tests.sh +++ b/tests/vite-app/run-tests.sh @@ -1,54 +1,46 @@ #!/bin/bash -e -main() { - echo "Generating JWTs ..." - npm run tokengen +run_test() { + START_SERVER_CMD=$1 + SERVER_PORT=$2 + START_CYPRESS_CMD=$3 - echo "Starting Vite dev server in background ..." - npm run dev & + echo "Starting Vite server in background ..." + $START_SERVER_CMD & VITE_PID=$! - echo "Vite dev server launched as PID ${VITE_PID}" - while ! nc -z localhost 3000; do - echo "Waiting for dev server to come on-line ..." + echo "Vite server launched as PID ${VITE_PID}" + while ! nc -z localhost $SERVER_PORT; do + echo "Waiting for server to come on-line ..." sleep 1 done echo "Running cypress tests ..." - if ! npm run cypress:run; then + if ! $START_CYPRESS_CMD; then echo "Cypress test failed :(" TEST_FAILED=true fi - echo "Sending stop signal to Vite dev server (SIGINT) ..." + echo "Sending stop signal to Vite server (SIGINT) ..." kill -s INT $VITE_PID - echo "Waiting for Vite dev server to actually stop ..." + echo "Waiting for Vite server to actually stop ..." wait - echo "Vite dev server stopped" + echo "Vite server stopped" if [ ! -z $TEST_FAILED ]; then return 1 fi +} +main() { + echo "Generating JWTs ..." + npm run tokengen + + # # Run against dev server, which uses esbuild bundler + echo "Starting Cypress tests against Vite dev server ..." + run_test "npm run dev" 3000 "npm run cypress:run" + + # Run against preview server too, which uses rollup bundler echo "Building Vite app for preview ..." npm run build - echo "Starting Vite preview server in background ..." - npm run preview & - VITE_PID=$! - echo "Vite preview server launched as PID ${VITE_PID}" - while ! nc -z localhost 4173; do - echo "Waiting for preview server to come on-line ..." - sleep 1 - done - echo "Running cypress tests ..." - if ! npm run cypress:run:preview; then - echo "Cypress test failed :(" - TEST_FAILED=true - fi - echo "Sending stop signal to Vite preview server (SIGINT) ..." - kill -s INT $VITE_PID - echo "Waiting for Vite preview server to actually stop ..." - wait - echo "Vite preview server stopped" - if [ ! -z $TEST_FAILED ]; then - return 1 - fi + echo "Starting Cypress tests against Vite preview server ..." + run_test "npm run preview" 4173 "npm run cypress:run:preview" } main diff --git a/tests/vite-app/util/generateExampleTokens.ts b/tests/vite-app/util/generateExampleTokens.ts index ecf37a9..eecb89b 100644 --- a/tests/vite-app/util/generateExampleTokens.ts +++ b/tests/vite-app/util/generateExampleTokens.ts @@ -70,9 +70,9 @@ const tokendata = { const main = async () => { const { privateKey, jwk, jwks } = generateKeyPair( - deconstructPublicKeyInDerFormat + deconstructPublicKeyInDerFormat, + { kid: randomUUID() } ); - jwk.kid = randomUUID(); const jwtHeader = { kid: jwk.kid, alg: "RS256" }; saveFile("public", JWKSFILE, jwks); From dd6eeda3eaf2d02f1bc37fa48987866464450109 Mon Sep 17 00:00:00 2001 From: Kevin Hakanson Date: Mon, 7 Mar 2022 08:49:09 -0600 Subject: [PATCH 55/59] update vite-app README --- tests/vite-app/README.md | 66 +++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/tests/vite-app/README.md b/tests/vite-app/README.md index e61dba6..3062954 100644 --- a/tests/vite-app/README.md +++ b/tests/vite-app/README.md @@ -1,18 +1,68 @@ -# Tests with Vite and Cypress +# Usage in the Web Browser -This is a Vite project allowing browser-based testing using Cypress. +`tests\vite-app` is a Vite project demonstrating browser usage of `aws-jwt-verify` +including how to configure browser-based testing using Cypress. + +## Vite + +The [Why Vite](https://vitejs.dev/guide/why.html) page highlight how code is bundled differently for dev vs. production: + +- Vite pre-bundles dependencies using esbuild. +- Vite serves source code over native ESM. +- Vite bundles for production using Rollup. + +When using Rollup, `aws-jwt-verify` requires `@rollup/plugin-node-resolve` and the `{ browser: true }` configuration. +Here is the minimal `vite.config.js` to support that: + +```javascript +import { defineConfig } from "vite"; +import resolve from "@rollup/plugin-node-resolve"; + +export default defineConfig({ + build: { + rollupOptions: { + plugins: [resolve({ browser: true })], + }, + }, +}); +``` + +## Cypress + +The `cypress\integration` folder includes both functional tests that interact +with an HTML form in the web browser and unit tests that use `JwtRsaVerifier` +directly. To enable the unit tests to work, `@cypress/webpack-preprocessor` is +required. Here is the minimal `cypress\plugins\index.js` to support that: + +```javascript +const webpackPreprocessor = require("@cypress/webpack-preprocessor"); + +module.exports = (on, config) => { + const options = webpackPreprocessor.defaultOptions; + on("file:preprocessor", webpackPreprocessor(options)); + + // additional code including vite "dev-server:start" + return config; +}; +``` ## How to run the tests +If you haven't already done so, create a local build of `aws-jwt-verify`: + - Clone the repo: `git clone https://github.com/awslabs/aws-jwt-verify` - Install dev dependencies and create installable archive: `cd aws-jwt-verify && npm install && npm run pack-for-tests` - Install Vite and Cypress dependencies: `cd tests/vite-app && npm install` -- Start the Vite dev server: `npm run dev` -- Run the Cypress tests: `npm run cypress:open` -To test the Vite distribution build: +The `run-tests.sh` script will test browser usage by: + +1. Generating JWTs and a JWKS for the tests (`npm run tokengen`). + +2. Starting the Vite dev server (`npm run dev`) and running the Cypress tests (`npm run cypress:run`). + +3. Running a Vite distribution build (`npm run build`), starting the Vite preview server (`npm run preview`), and running the Cypress tests (`npm run cypress:run:preview`) -- Start the Vite preview server: `npm run preview` -- Run the Cypress tests: `npm run cypress:open:preview` +## Summary -The tokens used in the test were generated using `npm run tokengen` +The combination of running both functional and unit tests, against both the Vite dev and preview server +has the result of providing samples for and testing `aws-jwt-verify` with each of webpack, Rollup, and native ESM. From 1d1b448783a8148769bf7f01c3baa00b4264c3d1 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 17:13:48 +0100 Subject: [PATCH 56/59] Various tweaks to make running tests from the root of the workspace work nicely --- .github/workflows/main.yml | 1 + .prettierignore | 1 + README.md | 2 +- package.json | 7 +- tests/cognito/package-lock.json | 84 +- .../installation-and-basic-usage/run-tests.sh | 2 +- tests/vite-app/README.md | 2 +- tests/vite-app/package-lock.json | 1672 ++++++++++------- tests/vite-app/package.json | 8 +- tests/vite-app/tsconfig.json | 3 +- 10 files changed, 1012 insertions(+), 770 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5b47974..a115a25 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,3 +26,4 @@ jobs: npm run pack-for-tests npm run test:install npm run test:import + npm run test:browser diff --git a/.prettierignore b/.prettierignore index 00e3420..b77ade9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -24,6 +24,7 @@ typing-util.d.ts # compiled js src/*.js tests/unit/*.js +tests/util/*.js tests/installation-and-basic-usage/*.js tests/cognito/cdk.out/* tests/import-tests/typescript.js diff --git a/README.md b/README.md index 8b557e0..8cde116 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ This library was specifically designed to be easy to use in: Many webdev toolchains (e.g. [CreateReactApp](https://github.com/facebook/create-react-app)) make including `npm` libraries in your web app easy, in which case using this library in your web app should just work. -If you need to bundle this library yourself, be aware that this library uses [subpath imports](https://nodejs.org/api/packages.html#subpath-imports), to automatically select the Web crypto implementation when bundling for the browser. So, you'll need a bundler that supports subpath imports, such as [webpack](https://webpack.js.org/) or [esbuild](https://esbuild.github.io/)). +If you need to bundle this library manually yourself, be aware that this library uses [subpath imports](https://nodejs.org/api/packages.html#subpath-imports), to automatically select the Web crypto implementation when bundling for the browser. This is supported out-of-the-box by [webpack](https://webpack.js.org/) and [esbuild](https://esbuild.github.io/). An example of using this library in a Vite web app, with Cypress tests, is included in this repository [here](tests/vite-app/). ## Table of Contents diff --git a/package.json b/package.json index 8079e7c..34a18b5 100644 --- a/package.json +++ b/package.json @@ -101,10 +101,11 @@ "prepack": "npm run dist", "prettier:check": "prettier --check .", "prettier": "prettier -w .", - "test:all": "npm run prettier:check && npm run test:unit && npm run test:install && npm run test:import && npm run test:speed && npm run test:cognito", - "test:cognito": "cd tests/cognito && npm install --no-package-lock --force ../../aws-jwt-verify.tgz && npm run test", - "test:import": "cd tests/import-tests && rm -rf node_modules package-lock.json && npm install && node esm.mjs && node commonjs.cjs && tsc && node typescript.js && COMPILE_ERRORS=$(2>&1 tsc -p tsconfig-should-not-compile.json || true) && ([ \"$COMPILE_ERRORS\" != \"\" ] || (echo \"Ooops I did compile successfully :(\"; false))", + "test:all": "npm run prettier:check && npm run test:unit && npm run test:install && npm run test:import && npm run test:browser && npm run test:cognito && npm run test:speed", + "test:cognito": "cd tests/cognito && npm remove aws-jwt-verify.tgz && npm i --no-package-lock ../../aws-jwt-verify.tgz && npm run test", + "test:import": "cd tests/import-tests && npm remove aws-jwt-verify.tgz && npm i --no-package-lock ../../aws-jwt-verify.tgz && node esm.mjs && node commonjs.cjs && tsc && node typescript.js && COMPILE_ERRORS=$(2>&1 tsc -p tsconfig-should-not-compile.json || true) && ([ \"$COMPILE_ERRORS\" != \"\" ] || (echo \"Ooops I did compile successfully :(\"; false))", "test:install": "./tests/installation-and-basic-usage/run-tests.sh", + "test:browser": "cd tests/vite-app && npm remove aws-jwt-verify.tgz && npm i --no-package-lock ../../aws-jwt-verify.tgz && ./run-tests.sh", "test:speed": "jest -t \"speed\"", "test:unit": "jest --collect-coverage -t \"unit\" --testMatch '**/*.test.ts' --reporters=\"jest-junit\" --reporters=\"default\"", "test": "npm run test:unit", diff --git a/tests/cognito/package-lock.json b/tests/cognito/package-lock.json index ac8030f..c85c145 100644 --- a/tests/cognito/package-lock.json +++ b/tests/cognito/package-lock.json @@ -18,6 +18,7 @@ "@aws-cdk/core": "1.145.0", "@aws-cdk/custom-resources": "1.145.0", "@aws-sdk/client-cognito-identity-provider": "^3.52.0", + "aws-jwt-verify": "file:../../aws-jwt-verify.tgz", "source-map-support": "^0.5.21" }, "bin": { @@ -1859,22 +1860,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.52.0.tgz", - "integrity": "sha512-YYMZg8odn/hBURgL/w82ay2mvPqXHMdujlSndT1ddUSTRoZX67N3hfYYf36nOalDOjNcanIvFHe4Fe8nw+8JiA==", - "dependencies": { - "@aws-sdk/config-resolver": "3.52.0", - "@aws-sdk/credential-provider-imds": "3.52.0", - "@aws-sdk/node-config-provider": "3.52.0", - "@aws-sdk/property-provider": "3.52.0", - "@aws-sdk/types": "3.52.0", - "tslib": "^2.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/@aws-sdk/util-hex-encoding": { "version": "3.52.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.52.0.tgz", @@ -4929,6 +4914,15 @@ "readable-stream": "^3.6.0" } }, + "node_modules/aws-jwt-verify": { + "version": "2.1.3", + "resolved": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-RDK0PHBODEfhhsXecElv9VStnKgqsKGxAU4BYfGCFOZvrfV62Qix1fTxDDBnEcwH3nziXgVqX+XrkoiP5wV8cA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -5022,6 +5016,7 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "license": "MIT" }, "node_modules/bowser": { @@ -5031,6 +5026,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5227,6 +5223,7 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "dev": true, "license": "MIT" }, "node_modules/constructs": { @@ -5747,7 +5744,8 @@ "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/has": { "version": "1.0.3", @@ -5882,12 +5880,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6933,6 +6925,7 @@ }, "node_modules/minimatch": { "version": "3.0.4", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -7215,6 +7208,7 @@ }, "node_modules/punycode": { "version": "2.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7328,6 +7322,7 @@ }, "node_modules/semver": { "version": "6.3.0", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7824,6 +7819,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -12099,6 +12095,10 @@ } } }, + "aws-jwt-verify": { + "version": "file:../../aws-jwt-verify.tgz", + "integrity": "sha512-RDK0PHBODEfhhsXecElv9VStnKgqsKGxAU4BYfGCFOZvrfV62Qix1fTxDDBnEcwH3nziXgVqX+XrkoiP5wV8cA==" + }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -12169,7 +12169,8 @@ } }, "balanced-match": { - "version": "1.0.2" + "version": "1.0.2", + "dev": true }, "bowser": { "version": "2.11.0", @@ -12178,6 +12179,7 @@ }, "brace-expansion": { "version": "1.1.11", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12314,7 +12316,8 @@ } }, "concat-map": { - "version": "0.0.1" + "version": "0.0.1", + "dev": true }, "constructs": { "version": "3.3.97" @@ -12679,7 +12682,8 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "has": { "version": "1.0.3", @@ -12777,12 +12781,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -13432,12 +13430,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -13591,6 +13583,7 @@ }, "minimatch": { "version": "3.0.4", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -13789,7 +13782,8 @@ "dev": true }, "punycode": { - "version": "2.1.1" + "version": "2.1.1", + "dev": true }, "react-is": { "version": "17.0.2", @@ -13835,12 +13829,6 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13870,7 +13858,8 @@ } }, "semver": { - "version": "6.3.0" + "version": "6.3.0", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -14195,7 +14184,8 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true }, "uri-js": { "version": "4.4.1", diff --git a/tests/installation-and-basic-usage/run-tests.sh b/tests/installation-and-basic-usage/run-tests.sh index c870c0c..7a6d8de 100755 --- a/tests/installation-and-basic-usage/run-tests.sh +++ b/tests/installation-and-basic-usage/run-tests.sh @@ -8,7 +8,7 @@ main() { cd $DIR # Install aws-jwt-verify - npm install --no-package-lock --force ../../aws-jwt-verify.tgz + npm remove aws-jwt-verify && npm i --no-package-lock ../../aws-jwt-verify.tgz # Compile test files npx tsc diff --git a/tests/vite-app/README.md b/tests/vite-app/README.md index 3062954..905af46 100644 --- a/tests/vite-app/README.md +++ b/tests/vite-app/README.md @@ -32,7 +32,7 @@ export default defineConfig({ The `cypress\integration` folder includes both functional tests that interact with an HTML form in the web browser and unit tests that use `JwtRsaVerifier` directly. To enable the unit tests to work, `@cypress/webpack-preprocessor` is -required. Here is the minimal `cypress\plugins\index.js` to support that: +required. Here is the minimal `cypress\plugins\index.js` to support that: ```javascript const webpackPreprocessor = require("@cypress/webpack-preprocessor"); diff --git a/tests/vite-app/package-lock.json b/tests/vite-app/package-lock.json index 9e6b590..1140031 100644 --- a/tests/vite-app/package-lock.json +++ b/tests/vite-app/package-lock.json @@ -13,10 +13,10 @@ "devDependencies": { "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", - "cypress": "^9.5.0", - "ts-node": "^10.6.0", - "typescript": "^4.5.4", - "vite": "^2.8.0" + "cypress": "^9.5.1", + "ts-node": "^10.7.0", + "typescript": "^4.6.2", + "vite": "^2.8.6" } }, "node_modules/@ampproject/remapping": { @@ -86,16 +86,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", @@ -157,16 +147,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.17.6", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", @@ -226,16 +206,6 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", @@ -509,74 +479,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "peer": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", @@ -1705,16 +1607,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -1863,12 +1755,6 @@ "webpack": "^4 || ^5" } }, - "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -1953,12 +1839,6 @@ "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -2006,11 +1886,10 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "peer": true + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.9", @@ -2020,9 +1899,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, "node_modules/@types/resolve": { @@ -2336,18 +2215,16 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/arch": { @@ -2427,7 +2304,7 @@ "node_modules/aws-jwt-verify": { "version": "2.1.3", "resolved": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-6qeipUjAX7k8dBX9QgwJaGLjiWm4zausVajZuhOuxzcR7qB36GDH5jq5rZu1pSiEYTYfVGlsJsZmDDYHTqPW7g==", + "integrity": "sha512-RDK0PHBODEfhhsXecElv9VStnKgqsKGxAU4BYfGCFOZvrfV62Qix1fTxDDBnEcwH3nziXgVqX+XrkoiP5wV8cA==", "license": "Apache-2.0", "engines": { "node": ">=14.0.0" @@ -2493,16 +2370,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", @@ -2582,9 +2449,9 @@ "dev": true }, "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", "dev": true }, "node_modules/brace-expansion": { @@ -2598,14 +2465,14 @@ } }, "node_modules/browserslist": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", - "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", + "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", "dev": true, "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001312", - "electron-to-chromium": "^1.4.71", + "caniuse-lite": "^1.0.30001313", + "electron-to-chromium": "^1.4.76", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.0" @@ -2697,9 +2564,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001313", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz", + "integrity": "sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q==", "dev": true, "peer": true, "funding": { @@ -2714,31 +2581,18 @@ "dev": true }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/check-more-types": { @@ -2819,22 +2673,21 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true }, "node_modules/colorette": { "version": "2.0.16", @@ -2905,13 +2758,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, "node_modules/core-js-compat": { "version": "3.21.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", @@ -2964,9 +2810,9 @@ } }, "node_modules/cypress": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.0.tgz", - "integrity": "sha512-rC5QPolKsVjJ8QJZ7IeZ6HlKM4gswBGZc0XvoAJNL8urQCSL8zTX0A/ai/h35WfF47NQ0iSZnwIXBlHX3MOUIQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.1.tgz", + "integrity": "sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3020,48 +2866,160 @@ "node": ">=12.0.0" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "node_modules/cypress/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/define-properties": { @@ -3106,9 +3064,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.73", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", - "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", + "version": "1.4.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.76.tgz", + "integrity": "sha512-3Vftv7cenJtQb+k00McEBZ2vVmZ/x+HEF7pcZONZIkOsESqAqVuACmBxMv0JhzX7u0YltU0vSqRqgBSTAhFUjA==", "dev": true, "peer": true }, @@ -3138,9 +3096,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", - "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "dev": true, "peer": true, "dependencies": { @@ -3171,9 +3129,9 @@ "peer": true }, "node_modules/esbuild": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", - "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.25.tgz", + "integrity": "sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q==", "dev": true, "hasInstallScript": true, "bin": { @@ -3183,31 +3141,48 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-arm64": "0.14.23", - "esbuild-darwin-64": "0.14.23", - "esbuild-darwin-arm64": "0.14.23", - "esbuild-freebsd-64": "0.14.23", - "esbuild-freebsd-arm64": "0.14.23", - "esbuild-linux-32": "0.14.23", - "esbuild-linux-64": "0.14.23", - "esbuild-linux-arm": "0.14.23", - "esbuild-linux-arm64": "0.14.23", - "esbuild-linux-mips64le": "0.14.23", - "esbuild-linux-ppc64le": "0.14.23", - "esbuild-linux-riscv64": "0.14.23", - "esbuild-linux-s390x": "0.14.23", - "esbuild-netbsd-64": "0.14.23", - "esbuild-openbsd-64": "0.14.23", - "esbuild-sunos-64": "0.14.23", - "esbuild-windows-32": "0.14.23", - "esbuild-windows-64": "0.14.23", - "esbuild-windows-arm64": "0.14.23" + "esbuild-android-64": "0.14.25", + "esbuild-android-arm64": "0.14.25", + "esbuild-darwin-64": "0.14.25", + "esbuild-darwin-arm64": "0.14.25", + "esbuild-freebsd-64": "0.14.25", + "esbuild-freebsd-arm64": "0.14.25", + "esbuild-linux-32": "0.14.25", + "esbuild-linux-64": "0.14.25", + "esbuild-linux-arm": "0.14.25", + "esbuild-linux-arm64": "0.14.25", + "esbuild-linux-mips64le": "0.14.25", + "esbuild-linux-ppc64le": "0.14.25", + "esbuild-linux-riscv64": "0.14.25", + "esbuild-linux-s390x": "0.14.25", + "esbuild-netbsd-64": "0.14.25", + "esbuild-openbsd-64": "0.14.25", + "esbuild-sunos-64": "0.14.25", + "esbuild-windows-32": "0.14.25", + "esbuild-windows-64": "0.14.25", + "esbuild-windows-arm64": "0.14.25" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz", + "integrity": "sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", - "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz", + "integrity": "sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw==", "cpu": [ "arm64" ], @@ -3221,9 +3196,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", - "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz", + "integrity": "sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA==", "cpu": [ "x64" ], @@ -3237,9 +3212,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", - "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz", + "integrity": "sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw==", "cpu": [ "arm64" ], @@ -3253,9 +3228,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", - "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz", + "integrity": "sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ==", "cpu": [ "x64" ], @@ -3269,9 +3244,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", - "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz", + "integrity": "sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug==", "cpu": [ "arm64" ], @@ -3285,9 +3260,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", - "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz", + "integrity": "sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw==", "cpu": [ "ia32" ], @@ -3301,9 +3276,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", - "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz", + "integrity": "sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug==", "cpu": [ "x64" ], @@ -3317,9 +3292,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", - "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz", + "integrity": "sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw==", "cpu": [ "arm" ], @@ -3333,9 +3308,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", - "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz", + "integrity": "sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw==", "cpu": [ "arm64" ], @@ -3349,9 +3324,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", - "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz", + "integrity": "sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ==", "cpu": [ "mips64el" ], @@ -3365,9 +3340,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", - "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz", + "integrity": "sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw==", "cpu": [ "ppc64" ], @@ -3381,9 +3356,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", - "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz", + "integrity": "sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w==", "cpu": [ "riscv64" ], @@ -3397,9 +3372,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", - "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz", + "integrity": "sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ==", "cpu": [ "s390x" ], @@ -3413,9 +3388,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", - "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz", + "integrity": "sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA==", "cpu": [ "x64" ], @@ -3429,9 +3404,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", - "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz", + "integrity": "sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A==", "cpu": [ "x64" ], @@ -3445,9 +3420,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", - "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz", + "integrity": "sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw==", "cpu": [ "x64" ], @@ -3461,9 +3436,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", - "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz", + "integrity": "sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA==", "cpu": [ "ia32" ], @@ -3477,9 +3452,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", - "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz", + "integrity": "sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA==", "cpu": [ "x64" ], @@ -3493,9 +3468,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", - "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz", + "integrity": "sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA==", "cpu": [ "arm64" ], @@ -3939,18 +3914,19 @@ } }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "peer": true, "engines": { @@ -4158,6 +4134,32 @@ "node": ">= 10.13.0" } }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4375,6 +4377,76 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -4393,6 +4465,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -4452,16 +4557,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -4766,12 +4861,12 @@ } }, "node_modules/postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dev": true, "dependencies": { - "nanoid": "^3.2.0", + "nanoid": "^3.3.1", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -4991,9 +5086,9 @@ } }, "node_modules/rollup": { - "version": "2.68.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", - "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", + "version": "2.70.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.0.tgz", + "integrity": "sha512-iEzYw+syFxQ0X9RefVwhr8BA2TNJsTaX8L8dhyeyMECDbmiba+8UQzcu+xZdji0+JQ+s7kouQnw+9Oz5M19XKA==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -5015,24 +5110,10 @@ } }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -5060,18 +5141,13 @@ } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "peer": true, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/serialize-javascript": { @@ -5125,6 +5201,39 @@ "node": ">=8" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -5226,18 +5335,16 @@ } }, "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -5263,9 +5370,9 @@ } }, "node_modules/terser": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", - "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", + "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", "dev": true, "peer": true, "dependencies": { @@ -5410,9 +5517,9 @@ } }, "node_modules/ts-node": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", - "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", @@ -5432,6 +5539,7 @@ "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" @@ -5488,9 +5596,9 @@ } }, "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -5602,9 +5710,9 @@ } }, "node_modules/vite": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", - "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.6.tgz", + "integrity": "sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==", "dev": true, "dependencies": { "esbuild": "^0.14.14", @@ -5653,9 +5761,9 @@ } }, "node_modules/webpack": { - "version": "5.69.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", - "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "dev": true, "peer": true, "dependencies": { @@ -5668,7 +5776,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", + "enhanced-resolve": "^5.9.2", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -5710,6 +5818,13 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -5761,6 +5876,39 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -5843,15 +5991,6 @@ "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "@babel/generator": { @@ -5898,15 +6037,6 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "@babel/helper-create-class-features-plugin": { @@ -5951,15 +6081,6 @@ "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "@babel/helper-environment-visitor": { @@ -6173,64 +6294,6 @@ "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/parser": { @@ -7002,15 +7065,6 @@ "babel-plugin-polyfill-regenerator": "^0.3.0", "core-js-compat": "^3.20.2", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "@babel/preset-modules": { @@ -7129,14 +7183,6 @@ "bluebird": "3.7.1", "debug": "^4.3.2", "lodash": "^4.17.20" - }, - "dependencies": { - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - } } }, "@cypress/xvfb": { @@ -7207,15 +7253,7 @@ "requires": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - } + "picomatch": "^2.2.2" } }, "@tsconfig/node10": { @@ -7265,11 +7303,10 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "peer": true + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true }, "@types/json-schema": { "version": "7.0.9", @@ -7279,9 +7316,9 @@ "peer": true }, "@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, "@types/resolve": { @@ -7563,12 +7600,13 @@ "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "arch": { @@ -7624,7 +7662,7 @@ }, "aws-jwt-verify": { "version": "file:../../aws-jwt-verify.tgz", - "integrity": "sha512-6qeipUjAX7k8dBX9QgwJaGLjiWm4zausVajZuhOuxzcR7qB36GDH5jq5rZu1pSiEYTYfVGlsJsZmDDYHTqPW7g==" + "integrity": "sha512-RDK0PHBODEfhhsXecElv9VStnKgqsKGxAU4BYfGCFOZvrfV62Qix1fTxDDBnEcwH3nziXgVqX+XrkoiP5wV8cA==" }, "aws-sign2": { "version": "0.7.0", @@ -7671,15 +7709,6 @@ "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "babel-plugin-polyfill-corejs3": { @@ -7738,9 +7767,9 @@ "dev": true }, "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", "dev": true }, "brace-expansion": { @@ -7754,14 +7783,14 @@ } }, "browserslist": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", - "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", + "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", "dev": true, "peer": true, "requires": { - "caniuse-lite": "^1.0.30001312", - "electron-to-chromium": "^1.4.71", + "caniuse-lite": "^1.0.30001313", + "electron-to-chromium": "^1.4.76", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.0" @@ -7814,9 +7843,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001313", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz", + "integrity": "sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q==", "dev": true, "peer": true }, @@ -7827,24 +7856,15 @@ "dev": true }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "check-more-types": { @@ -7902,19 +7922,21 @@ } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true }, "colorette": { "version": "2.0.16", @@ -7971,15 +7993,6 @@ "peer": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - } } }, "core-js-compat": { @@ -8026,9 +8039,9 @@ } }, "cypress": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.0.tgz", - "integrity": "sha512-rC5QPolKsVjJ8QJZ7IeZ6HlKM4gswBGZc0XvoAJNL8urQCSL8zTX0A/ai/h35WfF47NQ0iSZnwIXBlHX3MOUIQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.1.tgz", + "integrity": "sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg==", "dev": true, "requires": { "@cypress/request": "^2.88.10", @@ -8073,6 +8086,89 @@ "tmp": "~0.2.1", "untildify": "^4.0.0", "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "dashdash": { @@ -8085,9 +8181,9 @@ } }, "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==", "dev": true }, "debug": { @@ -8138,9 +8234,9 @@ } }, "electron-to-chromium": { - "version": "1.4.73", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", - "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", + "version": "1.4.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.76.tgz", + "integrity": "sha512-3Vftv7cenJtQb+k00McEBZ2vVmZ/x+HEF7pcZONZIkOsESqAqVuACmBxMv0JhzX7u0YltU0vSqRqgBSTAhFUjA==", "dev": true, "peer": true }, @@ -8167,9 +8263,9 @@ } }, "enhanced-resolve": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", - "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "dev": true, "peer": true, "requires": { @@ -8194,162 +8290,170 @@ "peer": true }, "esbuild": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", - "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.14.23", - "esbuild-darwin-64": "0.14.23", - "esbuild-darwin-arm64": "0.14.23", - "esbuild-freebsd-64": "0.14.23", - "esbuild-freebsd-arm64": "0.14.23", - "esbuild-linux-32": "0.14.23", - "esbuild-linux-64": "0.14.23", - "esbuild-linux-arm": "0.14.23", - "esbuild-linux-arm64": "0.14.23", - "esbuild-linux-mips64le": "0.14.23", - "esbuild-linux-ppc64le": "0.14.23", - "esbuild-linux-riscv64": "0.14.23", - "esbuild-linux-s390x": "0.14.23", - "esbuild-netbsd-64": "0.14.23", - "esbuild-openbsd-64": "0.14.23", - "esbuild-sunos-64": "0.14.23", - "esbuild-windows-32": "0.14.23", - "esbuild-windows-64": "0.14.23", - "esbuild-windows-arm64": "0.14.23" - } + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.25.tgz", + "integrity": "sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.25", + "esbuild-android-arm64": "0.14.25", + "esbuild-darwin-64": "0.14.25", + "esbuild-darwin-arm64": "0.14.25", + "esbuild-freebsd-64": "0.14.25", + "esbuild-freebsd-arm64": "0.14.25", + "esbuild-linux-32": "0.14.25", + "esbuild-linux-64": "0.14.25", + "esbuild-linux-arm": "0.14.25", + "esbuild-linux-arm64": "0.14.25", + "esbuild-linux-mips64le": "0.14.25", + "esbuild-linux-ppc64le": "0.14.25", + "esbuild-linux-riscv64": "0.14.25", + "esbuild-linux-s390x": "0.14.25", + "esbuild-netbsd-64": "0.14.25", + "esbuild-openbsd-64": "0.14.25", + "esbuild-sunos-64": "0.14.25", + "esbuild-windows-32": "0.14.25", + "esbuild-windows-64": "0.14.25", + "esbuild-windows-arm64": "0.14.25" + } + }, + "esbuild-android-64": { + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz", + "integrity": "sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==", + "dev": true, + "optional": true }, "esbuild-android-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", - "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz", + "integrity": "sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", - "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz", + "integrity": "sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", - "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz", + "integrity": "sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", - "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz", + "integrity": "sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", - "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz", + "integrity": "sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", - "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz", + "integrity": "sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", - "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz", + "integrity": "sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", - "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz", + "integrity": "sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", - "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz", + "integrity": "sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", - "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz", + "integrity": "sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", - "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz", + "integrity": "sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", - "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz", + "integrity": "sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", - "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz", + "integrity": "sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", - "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz", + "integrity": "sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", - "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz", + "integrity": "sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", - "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz", + "integrity": "sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", - "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz", + "integrity": "sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", - "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz", + "integrity": "sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", - "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "version": "0.14.25", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz", + "integrity": "sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA==", "dev": true, "optional": true }, @@ -8681,15 +8785,16 @@ } }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "peer": true }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "peer": true }, @@ -8830,6 +8935,25 @@ "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "js-tokens": { @@ -9000,6 +9124,57 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "log-update": { @@ -9014,6 +9189,30 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -9055,15 +9254,6 @@ "peer": true, "requires": { "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } } }, "make-error": { @@ -9295,12 +9485,12 @@ } }, "postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dev": true, "requires": { - "nanoid": "^3.2.0", + "nanoid": "^3.3.1", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -9476,9 +9666,9 @@ } }, "rollup": { - "version": "2.68.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", - "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", + "version": "2.70.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.0.tgz", + "integrity": "sha512-iEzYw+syFxQ0X9RefVwhr8BA2TNJsTaX8L8dhyeyMECDbmiba+8UQzcu+xZdji0+JQ+s7kouQnw+9Oz5M19XKA==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -9494,9 +9684,9 @@ } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { @@ -9518,13 +9708,11 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "peer": true }, "serialize-javascript": { "version": "6.0.0", @@ -9566,6 +9754,32 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "source-map": { @@ -9645,12 +9859,13 @@ "dev": true }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, "supports-preserve-symlinks-flag": { @@ -9667,9 +9882,9 @@ "peer": true }, "terser": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", - "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", + "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", "dev": true, "peer": true, "requires": { @@ -9769,9 +9984,9 @@ } }, "ts-node": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", - "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", @@ -9817,9 +10032,9 @@ "dev": true }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, "unicode-canonical-property-names-ecmascript": { @@ -9900,9 +10115,9 @@ } }, "vite": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", - "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.6.tgz", + "integrity": "sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==", "dev": true, "requires": { "esbuild": "^0.14.14", @@ -9924,9 +10139,9 @@ } }, "webpack": { - "version": "5.69.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", - "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "dev": true, "peer": true, "requires": { @@ -9939,7 +10154,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", + "enhanced-resolve": "^5.9.2", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -9956,6 +10171,13 @@ "webpack-sources": "^3.2.3" }, "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -9995,6 +10217,32 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "wrappy": { diff --git a/tests/vite-app/package.json b/tests/vite-app/package.json index 0ba6749..4b9c3f0 100644 --- a/tests/vite-app/package.json +++ b/tests/vite-app/package.json @@ -17,10 +17,10 @@ "devDependencies": { "@cypress/webpack-preprocessor": "^5.11.1", "@rollup/plugin-node-resolve": "^13.1.3", - "cypress": "^9.5.0", - "ts-node": "^10.6.0", - "typescript": "^4.5.4", - "vite": "^2.8.0" + "cypress": "^9.5.1", + "ts-node": "^10.7.0", + "typescript": "^4.6.2", + "vite": "^2.8.6" }, "dependencies": { "aws-jwt-verify": "file:../../aws-jwt-verify.tgz" diff --git a/tests/vite-app/tsconfig.json b/tests/vite-app/tsconfig.json index 1885c8f..2f18437 100644 --- a/tests/vite-app/tsconfig.json +++ b/tests/vite-app/tsconfig.json @@ -12,7 +12,8 @@ "noEmit": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noImplicitReturns": true + "noImplicitReturns": true, + "skipLibCheck": true }, "include": ["src"] } From f42eaf50a471fe0b9839b2154cd41127f00ce10d Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Mon, 7 Mar 2022 17:26:37 +0100 Subject: [PATCH 57/59] Set term --- tests/vite-app/run-tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh index b6e1a4b..cd0bda9 100755 --- a/tests/vite-app/run-tests.sh +++ b/tests/vite-app/run-tests.sh @@ -43,4 +43,5 @@ main() { run_test "npm run preview" 4173 "npm run cypress:run:preview" } +export TERM="${TERM:-xterm}" # Fix for GitHub actions main From 861b2e6fe9569e20f21cc55ce8fe63766f594e7b Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 8 Mar 2022 09:01:09 +0100 Subject: [PATCH 58/59] CI fix --- .github/workflows/main.yml | 2 ++ tests/vite-app/run-tests.sh | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a115a25..9b2a618 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,3 +27,5 @@ jobs: npm run test:install npm run test:import npm run test:browser + env: + CI: "true" diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh index cd0bda9..46f7029 100755 --- a/tests/vite-app/run-tests.sh +++ b/tests/vite-app/run-tests.sh @@ -18,11 +18,14 @@ run_test() { echo "Cypress test failed :(" TEST_FAILED=true fi - echo "Sending stop signal to Vite server (SIGINT) ..." - kill -s INT $VITE_PID - echo "Waiting for Vite server to actually stop ..." - wait - echo "Vite server stopped" + if [ -z $CI ]; then + # Only bother to kill the backgrounded server if we're not running in CI (e.g. on developer laptop) + echo "Sending stop signal to Vite server (SIGINT) ..." + kill -s INT $VITE_PID + echo "Waiting for Vite server to actually stop ..." + wait + echo "Vite server stopped" + fi if [ ! -z $TEST_FAILED ]; then return 1 fi @@ -32,7 +35,7 @@ main() { echo "Generating JWTs ..." npm run tokengen - # # Run against dev server, which uses esbuild bundler + # Run against dev server, which uses esbuild bundler echo "Starting Cypress tests against Vite dev server ..." run_test "npm run dev" 3000 "npm run cypress:run" @@ -43,5 +46,7 @@ main() { run_test "npm run preview" 4173 "npm run cypress:run:preview" } -export TERM="${TERM:-xterm}" # Fix for GitHub actions +if [ -z $CI ]; then + export TERM="${TERM:-xterm}" # Fix for GitHub actions +fi main From 20feeb2f883c5877d18bc5f2c7c023ebee4f0c02 Mon Sep 17 00:00:00 2001 From: Otto Kruse Date: Tue, 8 Mar 2022 09:11:21 +0100 Subject: [PATCH 59/59] CI tweaks --- tests/vite-app/run-tests.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/vite-app/run-tests.sh b/tests/vite-app/run-tests.sh index 46f7029..fc426cb 100755 --- a/tests/vite-app/run-tests.sh +++ b/tests/vite-app/run-tests.sh @@ -13,15 +13,18 @@ run_test() { echo "Waiting for server to come on-line ..." sleep 1 done + if [ -z $CI ]; then + export CYPRESS_VIDEO=false + fi echo "Running cypress tests ..." if ! $START_CYPRESS_CMD; then echo "Cypress test failed :(" TEST_FAILED=true fi if [ -z $CI ]; then - # Only bother to kill the backgrounded server if we're not running in CI (e.g. on developer laptop) + # Only bother to kill the backgrounded server if we're not running in CI (but e.g. on a developer laptop) echo "Sending stop signal to Vite server (SIGINT) ..." - kill -s INT $VITE_PID + kill -INT $VITE_PID echo "Waiting for Vite server to actually stop ..." wait echo "Vite server stopped" @@ -46,7 +49,4 @@ main() { run_test "npm run preview" 4173 "npm run cypress:run:preview" } -if [ -z $CI ]; then - export TERM="${TERM:-xterm}" # Fix for GitHub actions -fi main