From b728e54afda8e4e6444a87da7a2ee2ef78449d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Wed, 26 Jan 2022 16:12:30 +0100 Subject: [PATCH 001/133] - HcsDid uses new DID string format; - FileId is not longer used in HcsDid; - DidDocumentBase does not append verificationMethods and authentication parts to the document if didRootKey is missing; - A few TODO comments added; TODO: - Fix tests --- src/identity/did-document-base.ts | 24 +++- src/identity/did-document-json-properties.ts | 1 + src/identity/did-syntax.ts | 25 ++-- src/identity/hcs/did/hcs-did.ts | 132 +++++-------------- src/identity/hcs/hcs-identity-network.ts | 45 ++++--- 5 files changed, 91 insertions(+), 136 deletions(-) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index dee2bd4..45d1169 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -12,6 +12,9 @@ export class DidDocumentBase { this.context = DidSyntax.DID_DOCUMENT_CONTEXT; } + /** + * TODO: inverstigate, how fexible this method should be? Should it still support old format? + */ public static fromJson(json: string): DidDocumentBase { let result: DidDocumentBase; @@ -58,12 +61,21 @@ export class DidDocumentBase { const rootObject = {}; rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - rootObject[DidDocumentJsonProperties.PUBLIC_KEY] = [ - this.didRootKey.toJsonTree() - ]; - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ - this.didRootKey.getId() - ]; + + /** + * TODO: investigate, should we just leave such cases crash? + */ + if (this.didRootKey) { + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ + this.didRootKey.getId() + ]; + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [ + this.didRootKey.toJsonTree() + ]; + } else { + console.warn('WARNING: didRootKey is not set for the document') + } + return rootObject; } diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index d34637d..b35da5c 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -2,6 +2,7 @@ export module DidDocumentJsonProperties { export const CONTEXT = '@context'; export const ID = 'id'; export const AUTHENTICATION = 'authentication'; + export const VERIFICATION_METHOD = 'verificationMethod'; export const PUBLIC_KEY = 'publicKey'; export const SERVICE = 'service'; export const CREATED = 'created'; diff --git a/src/identity/did-syntax.ts b/src/identity/did-syntax.ts index f994baf..6fea302 100644 --- a/src/identity/did-syntax.ts +++ b/src/identity/did-syntax.ts @@ -1,16 +1,17 @@ export module DidSyntax { - export const DID_PREFIX = 'did'; - export const DID_DOCUMENT_CONTEXT = 'https://www.w3.org/ns/did/v1'; - export const DID_METHOD_SEPARATOR = ':'; - export const DID_PARAMETER_SEPARATOR = ';'; - export const DID_PARAMETER_VALUE_SEPARATOR = '='; + export const DID_PREFIX = "did"; + export const DID_DOCUMENT_CONTEXT = "https://www.w3.org/ns/did/v1"; + export const DID_METHOD_SEPARATOR = ":"; + export const DID_PARAMETER_SEPARATOR = ";"; + export const DID_PARAMETER_VALUE_SEPARATOR = "="; + export const DID_TOPIC_SEPARATOR = "_"; - export enum Method { - HEDERA_HCS = 'hedera', - } + export enum Method { + HEDERA_HCS = "hedera", + } - export module MethodSpecificParameter { - export const ADDRESS_BOOK_FILE_ID = 'fid'; - export const DID_TOPIC_ID = 'tid'; - } + export module MethodSpecificParameter { + export const ADDRESS_BOOK_FILE_ID = "fid"; + export const DID_TOPIC_ID = "tid"; + } } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 87208fc..3ba9e9f 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -1,19 +1,17 @@ -import {HederaDid} from "../../hedera-did"; -import {DidSyntax} from "../../did-syntax"; -import {FileId, PrivateKey, PublicKey, TopicId} from "@hashgraph/sdk"; -import {Hashing} from "../../../utils/hashing"; -import {DidDocumentBase} from "../../did-document-base"; -import {HcsDidRootKey} from "./hcs-did-root-key"; +import { PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; +import { Hashing } from "../../../utils/hashing"; +import { DidDocumentBase } from "../../did-document-base"; +import { DidSyntax } from "../../did-syntax"; +import { HederaDid } from "../../hedera-did"; +import { HcsDidRootKey } from "./hcs-did-root-key"; /** * Hedera Decentralized Identifier for Hedera DID Method specification based on HCS. */ export class HcsDid implements HederaDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; - private static DID_PARAMETER_VALUE_PARTS = 2; private didTopicId: TopicId; - private addressBookFileId: FileId; private network: string; private idString: string; private did: string; @@ -25,47 +23,41 @@ export class HcsDid implements HederaDid { * * @param network The Hedera DID network. * @param didRootKey The public key from which DID is derived. - * @param addressBookFileId The appent's address book {@link FileId} * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, didRootKey: PublicKey, addressBookFileId: FileId, didTopicId?: TopicId); + constructor(network: string, didRootKey: PublicKey, didTopicId?: TopicId); /** * Creates a DID instance with private DID root key. * * @param network The Hedera DID network. * @param privateDidRootKey The private DID root key. - * @param addressBookFileId The appent's address book {@link FileId} * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, privateDidRootKey: PrivateKey, addressBookFileId: FileId, didTopicId?: TopicId); + constructor(network: string, privateDidRootKey: PrivateKey, didTopicId?: TopicId); /** * Creates a DID instance without topic ID specification. * * @param network The Hedera DID network. * @param didRootKey The public key from which DID is derived. - * @param addressBookFileId The appent's address book {@link FileId} */ - constructor(network: string, didRootKey: PublicKey, addressBookFileId: FileId) + constructor(network: string, didRootKey: PublicKey) /** * Creates a DID instance. * * @param network The Hedera DID network. * @param idString The id-string of a DID. - * @param addressBookFileId The appent's address book {@link FileId} * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, idString: string, addressBookFileId: FileId, didTopicId?: TopicId); + constructor(network: string, idString: string, didTopicId?: TopicId); constructor(...args: any[]) { if ( (typeof args[0] === 'string') && (args[1] instanceof PublicKey) && - (args[2] instanceof FileId) && - ((args[4] instanceof TopicId) || args[4] === undefined) && - (args.length === 4) + ((args[2] instanceof TopicId) || args[2] === undefined) && + (args.length === 3) ) { - const [network, didRootKey, addressBookFileId, didTopicId] = args; + const [network, didRootKey, didTopicId] = args; this.didTopicId = didTopicId; - this.addressBookFileId = addressBookFileId; this.network = network; this.didRootKey = didRootKey; this.idString = HcsDid.publicKeyToIdString(didRootKey); @@ -77,14 +69,12 @@ export class HcsDid implements HederaDid { if ( (typeof args[0] === 'string') && (args[1] instanceof PrivateKey) && - (args[2] instanceof FileId) && - ((args[4] instanceof TopicId) || args[4] === undefined) && - (args.length === 4) + ((args[2] instanceof TopicId) || args[2] === undefined) && + (args.length === 3) ) { - const [network, privateDidRootKey, addressBookFileId, didTopicId] = args + const [network, privateDidRootKey, didTopicId] = args this.didTopicId = didTopicId; - this.addressBookFileId = addressBookFileId; this.network = network; this.didRootKey = privateDidRootKey.publicKey; this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); @@ -97,13 +87,11 @@ export class HcsDid implements HederaDid { if ( (typeof args[0] === 'string') && (args[1] instanceof PublicKey) && - (args[2] instanceof FileId) && - (args.length === 3) + (args.length === 2) ) { - const [network, didRootKey, addressBookFileId] = args; + const [network, didRootKey] = args; this.didTopicId = null; - this.addressBookFileId = addressBookFileId; this.network = network; this.didRootKey = didRootKey; this.idString = HcsDid.publicKeyToIdString(didRootKey); @@ -112,17 +100,18 @@ export class HcsDid implements HederaDid { return; } + /** + * TODO: investigate. This version does not fill in didRootKey so DID is missing publicKey information + */ if ( (typeof args[0] === 'string') && (typeof args[1] === 'string') && - (args[2] instanceof FileId) && - ((args[4] instanceof TopicId) || args[4] === undefined) && - (args.length === 4) + ((args[2] instanceof TopicId) || args[2] === undefined) && + (args.length === 3) ) { - const [network, idString, addressBookFileId, didTopicId] = args; + const [network, idString, didTopicId] = args; this.didTopicId = didTopicId; - this.addressBookFileId = addressBookFileId; this.network = network; this.idString = idString; @@ -145,13 +134,15 @@ export class HcsDid implements HederaDid { throw new Error("DID string cannot be null"); } - const mainParts = didString.split(DidSyntax.DID_PARAMETER_SEPARATOR); + const [didPart, topicIdPart] = didString.split(DidSyntax.DID_TOPIC_SEPARATOR); + + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); + } - let - topicId: TopicId, - addressBookFileId: FileId; + const topicId = TopicId.fromString(topicIdPart) - const didParts = mainParts.shift().split(DidSyntax.DID_METHOD_SEPARATOR); + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); if (didParts.shift() !== DidSyntax.DID_PREFIX) { throw new Error('DID string is invalid: invalid prefix.'); @@ -164,58 +155,19 @@ export class HcsDid implements HederaDid { try { const networkName = didParts.shift(); - - const params = this.extractParameters(mainParts, methodName, networkName); - addressBookFileId = FileId.fromString(params.get(DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID)); - if (params.has(DidSyntax.MethodSpecificParameter.DID_TOPIC_ID)) { - topicId = TopicId.fromString(params.get(DidSyntax.MethodSpecificParameter.DID_TOPIC_ID)); - } const didIdString = didParts.shift(); + if (didIdString.length < 32 || didParts.shift()) { throw new Error('DID string is invalid.') } - return new HcsDid(networkName, didIdString, addressBookFileId, topicId); + return new HcsDid(networkName, didIdString, topicId); } catch (e) { throw new Error('DID string is invalid. ' + e.message); } } - /** - * Extracts method-specific URL parameters. - * - * @param mainParts Iterator over main parts of the DID. - * @param methodName The method name. - * @param networkName The network name. - * @return A map of method-specific URL parameters and their values. - */ - private static extractParameters(mainParts: string[], methodName: string, networkName: string): Map { - const result = new Map(); - - const fidParamName = [methodName, networkName, DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID].join(DidSyntax.DID_METHOD_SEPARATOR); - const tidParamName = [methodName, networkName, DidSyntax.MethodSpecificParameter.DID_TOPIC_ID].join(DidSyntax.DID_METHOD_SEPARATOR); - - let mp; - while(mp = mainParts.shift()) { - const paramValue = mp.split(DidSyntax.DID_PARAMETER_VALUE_SEPARATOR); - - if (paramValue.length != this.DID_PARAMETER_VALUE_PARTS) { - continue; - } else if (fidParamName === paramValue[0]) { - result.set(DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID, paramValue[1]); - } else if (tidParamName === paramValue[0]) { - result.set(DidSyntax.MethodSpecificParameter.DID_TOPIC_ID, paramValue[1]); - } - } - - if (!result.has(DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID)) { - throw new Error('DID string is invalid. Required method-specific URL parameter not found: ' + DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID); - } - - return result; - } - /** * Generates a random DID root key. * @@ -259,10 +211,6 @@ export class HcsDid implements HederaDid { return this.didTopicId; } - public getAddressBookFileId(): FileId { - return this.addressBookFileId; - } - public getIdString(): string { return this.idString; } @@ -284,21 +232,11 @@ export class HcsDid implements HederaDid { DidSyntax.DID_METHOD_SEPARATOR + methodNetwork + DidSyntax.DID_METHOD_SEPARATOR + - this.idString + - DidSyntax.DID_PARAMETER_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - DidSyntax.MethodSpecificParameter.ADDRESS_BOOK_FILE_ID + - DidSyntax.DID_PARAMETER_VALUE_SEPARATOR + - this.addressBookFileId.toString(); + this.idString; if(this.didTopicId) { ret = ret + - DidSyntax.DID_PARAMETER_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - DidSyntax.MethodSpecificParameter.DID_TOPIC_ID + - DidSyntax.DID_PARAMETER_VALUE_SEPARATOR + + DidSyntax.DID_TOPIC_SEPARATOR + this.didTopicId.toString(); } diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 2b675b8..6eadfe2 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -1,17 +1,17 @@ -import {AddressBook} from "./address-book"; -import {Client, FileContentsQuery, FileId, PrivateKey, PublicKey, TopicId} from "@hashgraph/sdk"; -import {HcsDid} from "./did/hcs-did"; -import {DidMethodOperation} from "../did-method-operation"; -import {HcsDidTransaction} from "./did/hcs-did-transaction"; -import {MessageEnvelope} from "./message-envelope"; -import {HcsVcMessage} from "./vc/hcs-vc-message"; -import {HcsDidMessage} from "./did/hcs-did-message"; -import {HcsVcTransaction} from "./vc/hcs-vc-transaction"; -import {HcsVcOperation} from "./vc/hcs-vc-operation"; -import {HcsDidResolver} from "./did/hcs-did-resolver"; -import {HcsDidTopicListener} from "./did/hcs-did-topic-listener"; -import {HcsVcStatusResolver} from "./vc/hcs-vc-status-resolver"; -import {HcsVcTopicListener} from "./vc/hcs-vc-topic-listener"; +import { Client, FileContentsQuery, FileId, PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; +import { DidMethodOperation } from "../did-method-operation"; +import { AddressBook } from "./address-book"; +import { HcsDid } from "./did/hcs-did"; +import { HcsDidMessage } from "./did/hcs-did-message"; +import { HcsDidResolver } from "./did/hcs-did-resolver"; +import { HcsDidTopicListener } from "./did/hcs-did-topic-listener"; +import { HcsDidTransaction } from "./did/hcs-did-transaction"; +import { MessageEnvelope } from "./message-envelope"; +import { HcsVcMessage } from "./vc/hcs-vc-message"; +import { HcsVcOperation } from "./vc/hcs-vc-operation"; +import { HcsVcStatusResolver } from "./vc/hcs-vc-status-resolver"; +import { HcsVcTopicListener } from "./vc/hcs-vc-topic-listener"; +import { HcsVcTransaction } from "./vc/hcs-vc-transaction"; /** * Appnet's identity network based on Hedera HCS DID method specification. @@ -70,10 +70,13 @@ export class HcsIdentityNetwork { * @param hcsDid The Hedera HCS DID. * @return The identity network instance. */ - public static async fromHcsDid(client: Client, hcsDid: HcsDid): Promise { - const addressBookFileId = hcsDid.getAddressBookFileId(); - return await HcsIdentityNetwork.fromAddressBookFile(client, hcsDid.getNetwork(), addressBookFileId); - } + /** + * TODO: inspect, should probably be removed since fid is no longer available with new format of DID + */ + // public static async fromHcsDid(client: Client, hcsDid: HcsDid): Promise { + // const addressBookFileId = hcsDid.getAddressBookFileId(); + // return await HcsIdentityNetwork.fromAddressBookFile(client, hcsDid.getNetwork(), addressBookFileId); + // } /** * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. @@ -185,7 +188,7 @@ export class HcsIdentityNetwork { const privateKey = HcsDid.generateDidRootKey(); const tid = withTid ? this.getDidTopicId() : null; - return new HcsDid(this.getNetwork(), privateKey, this.addressBook.getFileId(), tid); + return new HcsDid(this.getNetwork(), privateKey, tid); } else if ( (args.length === 2) && (args[0] instanceof PublicKey) && @@ -194,7 +197,7 @@ export class HcsIdentityNetwork { const [publicKey, withTid] = args; const tid = withTid ? this.getDidTopicId() : null; - return new HcsDid(this.getNetwork(), publicKey, this.addressBook.getFileId(), tid); + return new HcsDid(this.getNetwork(), publicKey, tid); } else if ( (args.length === 2) && (args[0] instanceof PrivateKey) && @@ -203,7 +206,7 @@ export class HcsIdentityNetwork { const [privateKey, withTid] = args; const tid = withTid ? this.getDidTopicId() : null; - return new HcsDid(this.getNetwork(), privateKey, this.addressBook.getFileId(), tid); + return new HcsDid(this.getNetwork(), privateKey, tid); } } From b45fe92b9978ed06e22a299cfc43ba5d8a94245b Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 11:29:07 +1100 Subject: [PATCH 002/133] fill in missing didRootKey information --- src/identity/hcs/did/hcs-did.ts | 103 ++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 39 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 3ba9e9f..4668082 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -33,14 +33,18 @@ export class HcsDid implements HederaDid { * @param privateDidRootKey The private DID root key. * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, privateDidRootKey: PrivateKey, didTopicId?: TopicId); + constructor( + network: string, + privateDidRootKey: PrivateKey, + didTopicId?: TopicId + ); /** * Creates a DID instance without topic ID specification. * * @param network The Hedera DID network. * @param didRootKey The public key from which DID is derived. */ - constructor(network: string, didRootKey: PublicKey) + constructor(network: string, didRootKey: PublicKey); /** * Creates a DID instance. * @@ -51,10 +55,10 @@ export class HcsDid implements HederaDid { constructor(network: string, idString: string, didTopicId?: TopicId); constructor(...args: any[]) { if ( - (typeof args[0] === 'string') && - (args[1] instanceof PublicKey) && - ((args[2] instanceof TopicId) || args[2] === undefined) && - (args.length === 3) + typeof args[0] === "string" && + args[1] instanceof PublicKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 ) { const [network, didRootKey, didTopicId] = args; this.didTopicId = didTopicId; @@ -67,17 +71,19 @@ export class HcsDid implements HederaDid { } if ( - (typeof args[0] === 'string') && - (args[1] instanceof PrivateKey) && - ((args[2] instanceof TopicId) || args[2] === undefined) && - (args.length === 3) + typeof args[0] === "string" && + args[1] instanceof PrivateKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 ) { - const [network, privateDidRootKey, didTopicId] = args + const [network, privateDidRootKey, didTopicId] = args; this.didTopicId = didTopicId; this.network = network; this.didRootKey = privateDidRootKey.publicKey; - this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); + this.idString = HcsDid.publicKeyToIdString( + privateDidRootKey.publicKey + ); this.did = this.buildDid(); this.privateDidRootKey = privateDidRootKey; @@ -85,9 +91,9 @@ export class HcsDid implements HederaDid { } if ( - (typeof args[0] === 'string') && - (args[1] instanceof PublicKey) && - (args.length === 2) + typeof args[0] === "string" && + args[1] instanceof PublicKey && + args.length === 2 ) { const [network, didRootKey] = args; @@ -100,27 +106,24 @@ export class HcsDid implements HederaDid { return; } - /** - * TODO: investigate. This version does not fill in didRootKey so DID is missing publicKey information - */ if ( - (typeof args[0] === 'string') && - (typeof args[1] === 'string') && - ((args[2] instanceof TopicId) || args[2] === undefined) && - (args.length === 3) + typeof args[0] === "string" && + typeof args[1] === "string" && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 ) { const [network, idString, didTopicId] = args; this.didTopicId = didTopicId; this.network = network; - + this.didRootKey = HcsDid.idStringToPublicKey(idString); this.idString = idString; this.did = this.buildDid(); return; } - throw new Error('Couldn\'t find constructor'); + throw new Error("Couldn't find constructor"); } /** @@ -134,23 +137,27 @@ export class HcsDid implements HederaDid { throw new Error("DID string cannot be null"); } - const [didPart, topicIdPart] = didString.split(DidSyntax.DID_TOPIC_SEPARATOR); + const [didPart, topicIdPart] = didString.split( + DidSyntax.DID_TOPIC_SEPARATOR + ); if (!topicIdPart) { throw new Error("DID string is invalid: topic ID is missing"); } - const topicId = TopicId.fromString(topicIdPart) + const topicId = TopicId.fromString(topicIdPart); const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error('DID string is invalid: invalid prefix.'); + throw new Error("DID string is invalid: invalid prefix."); } const methodName = didParts.shift(); if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error('DID string is invalid: invalid method name: ' + methodName); + throw new Error( + "DID string is invalid: invalid method name: " + methodName + ); } try { @@ -158,13 +165,12 @@ export class HcsDid implements HederaDid { const didIdString = didParts.shift(); if (didIdString.length < 32 || didParts.shift()) { - throw new Error('DID string is invalid.') + throw new Error("DID string is invalid."); } return new HcsDid(networkName, didIdString, topicId); - } catch (e) { - throw new Error('DID string is invalid. ' + e.message); + throw new Error("DID string is invalid. " + e.message); } } @@ -187,14 +193,16 @@ export class HcsDid implements HederaDid { public generateDidDocument(): DidDocumentBase { const result = new DidDocumentBase(this.toDid()); if (this.didRootKey) { - const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); + const rootKey = HcsDidRootKey.fromHcsIdentity( + this, + this.didRootKey + ); result.setDidRootKey(rootKey); } return result; } - public getNetwork(): string { return this.network; } @@ -216,7 +224,7 @@ export class HcsDid implements HederaDid { } public toDid() { - return this.did + return this.did; } /** @@ -225,17 +233,21 @@ export class HcsDid implements HederaDid { * @return A DID string. */ private buildDid(): string { - const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); + const methodNetwork = [this.getMethod().toString(), this.network].join( + DidSyntax.DID_METHOD_SEPARATOR + ); let ret: string; - ret = DidSyntax.DID_PREFIX + + ret = + DidSyntax.DID_PREFIX + DidSyntax.DID_METHOD_SEPARATOR + methodNetwork + DidSyntax.DID_METHOD_SEPARATOR + this.idString; - if(this.didTopicId) { - ret = ret + + if (this.didTopicId) { + ret = + ret + DidSyntax.DID_TOPIC_SEPARATOR + this.didTopicId.toString(); } @@ -250,7 +262,20 @@ export class HcsDid implements HederaDid { * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. */ public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); + return Hashing.base58.encode( + Hashing.sha256.digest(didRootKey.toBytes()) + ); + } + + /** + * Constructs a public key from a given id-string. + * + * @param idString The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. + * @return Public Key from which the DID is created. + */ + public static idStringToPublicKey(idString: string): PublicKey { + const publicKeyBytes: Uint8Array = Hashing.base58.decode(idString); + return PublicKey.fromBytes(publicKeyBytes); } /** From c59a4d148ed1821d5c69d6afb1239c0a64fc78d0 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 11:29:45 +1100 Subject: [PATCH 003/133] added package lock --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec2de9c..38d41b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@hashgraph/did-sdk-js", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@hashgraph/did-sdk-js", - "version": "0.1.0", + "version": "0.1.1", "license": "Apache-2.0", "dependencies": { "@hashgraph/sdk": "^2.0.20", From 1dd1cbbfbc61dddb6ed87c193c6ee18e345a8362 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 11:36:40 +1100 Subject: [PATCH 004/133] remove public_key from did document --- src/identity/did-document-base.ts | 8 ++++---- src/identity/did-document-json-properties.ts | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index 45d1169..7aff84f 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -21,11 +21,11 @@ export class DidDocumentBase { try { const root = JSON.parse(json); result = new DidDocumentBase(root.id); - if (root.hasOwnProperty(DidDocumentJsonProperties.PUBLIC_KEY)) { - if (!Array.isArray(root[DidDocumentJsonProperties.PUBLIC_KEY])) { - throw new Error(`${root[DidDocumentJsonProperties.PUBLIC_KEY]} is not an array`); + if (root.hasOwnProperty(DidDocumentJsonProperties.VERIFICATION_METHOD)) { + if (!Array.isArray(root[DidDocumentJsonProperties.VERIFICATION_METHOD])) { + throw new Error(`${root[DidDocumentJsonProperties.VERIFICATION_METHOD]} is not an array`); } - for (let publicKeyObj of root[DidDocumentJsonProperties.PUBLIC_KEY]) { + for (let publicKeyObj of root[DidDocumentJsonProperties.VERIFICATION_METHOD]) { if (publicKeyObj.hasOwnProperty(DidDocumentJsonProperties.ID) && (publicKeyObj[DidDocumentJsonProperties.ID] === (result.getId() + HcsDidRootKey.DID_ROOT_KEY_NAME))) { const didRootKey = HcsDidRootKey.fromJsonTree(publicKeyObj); diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index b35da5c..85441fc 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -1,11 +1,10 @@ export module DidDocumentJsonProperties { - export const CONTEXT = '@context'; - export const ID = 'id'; - export const AUTHENTICATION = 'authentication'; - export const VERIFICATION_METHOD = 'verificationMethod'; - export const PUBLIC_KEY = 'publicKey'; - export const SERVICE = 'service'; - export const CREATED = 'created'; - export const UPDATED = 'updated'; - export const PROOF = 'proof'; + export const CONTEXT = "@context"; + export const ID = "id"; + export const AUTHENTICATION = "authentication"; + export const VERIFICATION_METHOD = "verificationMethod"; + export const SERVICE = "service"; + export const CREATED = "created"; + export const UPDATED = "updated"; + export const PROOF = "proof"; } From cc8608f63be14814a9929e65130939950e2adb5f Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 11:56:17 +1100 Subject: [PATCH 005/133] topic id can not be optional --- src/identity/hcs/did/hcs-did.ts | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 4668082..6f797fd 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -25,7 +25,7 @@ export class HcsDid implements HederaDid { * @param didRootKey The public key from which DID is derived. * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, didRootKey: PublicKey, didTopicId?: TopicId); + constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); /** * Creates a DID instance with private DID root key. * @@ -36,7 +36,7 @@ export class HcsDid implements HederaDid { constructor( network: string, privateDidRootKey: PrivateKey, - didTopicId?: TopicId + didTopicId: TopicId ); /** * Creates a DID instance without topic ID specification. @@ -52,7 +52,7 @@ export class HcsDid implements HederaDid { * @param idString The id-string of a DID. * @param didTopicId The appnet's DID topic ID. */ - constructor(network: string, idString: string, didTopicId?: TopicId); + constructor(network: string, idString: string, didTopicId: TopicId); constructor(...args: any[]) { if ( typeof args[0] === "string" && @@ -243,15 +243,10 @@ export class HcsDid implements HederaDid { DidSyntax.DID_METHOD_SEPARATOR + methodNetwork + DidSyntax.DID_METHOD_SEPARATOR + - this.idString; - - if (this.didTopicId) { - ret = - ret + - DidSyntax.DID_TOPIC_SEPARATOR + - this.didTopicId.toString(); - } - + this.idString + + DidSyntax.DID_TOPIC_SEPARATOR + + this.didTopicId.toString(); + return ret; } From 2851b60d4fbaa3b5cbe106ab3a67fa98fc0d9b57 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 12:27:06 +1100 Subject: [PATCH 006/133] addressbook and appnet no loger required --- src/identity/hcs/address-book.ts | 109 ------------------ .../hcs/hcs-identity-network-builder.ts | 13 +-- src/identity/hcs/hcs-identity-network.ts | 104 ++++------------- src/index.ts | 2 - 4 files changed, 22 insertions(+), 206 deletions(-) delete mode 100644 src/identity/hcs/address-book.ts diff --git a/src/identity/hcs/address-book.ts b/src/identity/hcs/address-book.ts deleted file mode 100644 index 8d0f446..0000000 --- a/src/identity/hcs/address-book.ts +++ /dev/null @@ -1,109 +0,0 @@ -import {FileId} from "@hashgraph/sdk"; - -/** - * Appnet's address book for HCS identity network. - */ -export class AddressBook { - private fileId: FileId; - private appnetName: string; - private didTopicId: string; - private vcTopicId: string; - private appnetDidServers: string[]; - - /** - * Converts an address book JSON string into address book object. - * - * @param json Address book JSON file. - * @param addressBookFileId FileId of this address book in Hedera File Service. - * @return The {@link AddressBook}. - */ - public static fromJson(json: string, addressBookFileId: FileId | string): AddressBook { - const result = new AddressBook(); - const item = JSON.parse(json); - result.appnetName = item.appnetName; - result.didTopicId = item.didTopicId; - result.vcTopicId = item.vcTopicId; - result.appnetDidServers = item.appnetDidServers; - - if (typeof addressBookFileId === 'string') { - result.setFileId(FileId.fromString(addressBookFileId)); - } else if (addressBookFileId instanceof FileId) { - result.setFileId(addressBookFileId); - } - - return result; - } - - /** - * Creates a new {@link AddressBook} instance. Does not create the file on Hedera File Service!. - * - * @param appnetName Name of the appnet. - * @param didTopicId TopicID of the DID topic. - * @param vcTopicId Topic ID of the Verifiable Credentials topic. - * @param appnetDidServers List of appnet API servers. - * @return The {@link AddressBook}. - */ - public static create(appnetName: string, didTopicId: string, vcTopicId: string, appnetDidServers: string[]) { - const result = new AddressBook(); - result.appnetDidServers = appnetDidServers; - result.didTopicId = didTopicId; - result.vcTopicId = vcTopicId; - result.appnetName = appnetName; - - return result; - } - - /** - * Converts this address book file into JSON string. - * - * @return The JSON representation of this address book. - */ - public toJSON(): string { - return JSON.stringify({ - appnetName: this.appnetName, - didTopicId: this.didTopicId, - vcTopicId: this.vcTopicId, - appnetDidServers: this.appnetDidServers - }); - } - - public getAppnetName(): string { - return this.appnetName; - } - - public setAppnetName(appnetName: string): void { - this.appnetName = appnetName; - } - - public getDidTopicId(): string { - return this.didTopicId; - } - - public setDidTopicId(didTopicId: string): void { - this.didTopicId = didTopicId; - } - - public getVcTopicId(): string { - return this.vcTopicId; - } - - public setVcTopicId(vcTopicId: string): void { - this.vcTopicId = vcTopicId; - } - - public getAppnetDidServers(): string[] { - return this.appnetDidServers; - } - - public setAppnetDidServers(appnetDidServers: string[]): void { - this.appnetDidServers = appnetDidServers; - } - - public getFileId(): FileId { - return this.fileId; - } - - public setFileId(fileId: FileId): void { - this.fileId = fileId; - } -} diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts index c616978..e05de15 100644 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ b/src/identity/hcs/hcs-identity-network-builder.ts @@ -1,6 +1,5 @@ import {Client, FileCreateTransaction, Hbar, PublicKey, TopicCreateTransaction, TopicId} from "@hashgraph/sdk"; import {HcsIdentityNetwork} from "./hcs-identity-network"; -import {AddressBook} from "./address-book"; export class HcsIdentityNetworkBuilder { private appnetName: string; @@ -36,17 +35,7 @@ export class HcsIdentityNetworkBuilder { const vcTxId = await vcTopicCreateTransaction.execute(client); this.vcTopicId = (await vcTxId.getReceipt(client)).topicId; - const addressBook = AddressBook.create(this.appnetName, this.didTopicId.toString(), this.vcTopicId.toString(), this.didServers); - - const fileCreateTx = new FileCreateTransaction().setContents(addressBook.toJSON()); - - const response = await fileCreateTx.execute(client); - const receipt = await response.getReceipt(client); - const fileId = receipt.fileId; - - addressBook.setFileId(fileId); - - return HcsIdentityNetwork.fromAddressBook(this.network, addressBook); + return HcsIdentityNetwork.fromHcsDid(this.network, this.didTopicId, this.vcTopicId); } public addAppnetDidServer(serverUrl: string): HcsIdentityNetworkBuilder { diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 6eadfe2..6a7a1bf 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -1,6 +1,5 @@ import { Client, FileContentsQuery, FileId, PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../did-method-operation"; -import { AddressBook } from "./address-book"; import { HcsDid } from "./did/hcs-did"; import { HcsDidMessage } from "./did/hcs-did-message"; import { HcsDidResolver } from "./did/hcs-did-resolver"; @@ -17,67 +16,31 @@ import { HcsVcTransaction } from "./vc/hcs-vc-transaction"; * Appnet's identity network based on Hedera HCS DID method specification. */ export class HcsIdentityNetwork { - /** - * The address book of appnet's identity network. - */ - private addressBook: AddressBook; /** * The Hedera network on which this identity network is created. */ private network: string; - /** - * Instantiates existing identity network from a provided address book. - * - * @param network The Hedera network. - * @param addressBook The {@link AddressBook} of the identity network. - * @return The identity network instance. - */ - public static fromAddressBook(network: string, addressBook: AddressBook): HcsIdentityNetwork { - const result = new HcsIdentityNetwork(); - result.network = network; - result.addressBook = addressBook; + private didTopicId: TopicId; + + private vcTopicId: TopicId; - return result; - } /** - * Instantiates existing identity network using an address book file read from Hedera File Service. + * Instantiates existing identity network using a DID generated for this network. * - * @param client The Hedera network client. - * @param network The Hedera network. - * @param addressBookFileId The FileID of {@link AddressBook} file stored on Hedera File Service. + * @param network The Hedera network. * @return The identity network instance. */ - public static async fromAddressBookFile(client: Client, network: string, addressBookFileId: FileId): Promise { - const fileContentsQueryCost = (new FileContentsQuery()).setFileId(addressBookFileId).getCost(client); - const fileQuery = (new FileContentsQuery()).setFileId(addressBookFileId); - - const contents = await fileQuery.execute(client); - + public static async fromHcsDid(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { const result = new HcsIdentityNetwork(); result.network = network; - result.addressBook = AddressBook.fromJson(contents.toString(), addressBookFileId); - + result.didTopicId = didTopicId; + result.vcTopicId = vcTopicId; return result; } - /** - * Instantiates existing identity network using a DID generated for this network. - * - * @param client The Hedera network client. - * @param hcsDid The Hedera HCS DID. - * @return The identity network instance. - */ - /** - * TODO: inspect, should probably be removed since fid is no longer available with new format of DID - */ - // public static async fromHcsDid(client: Client, hcsDid: HcsDid): Promise { - // const addressBookFileId = hcsDid.getAddressBookFileId(); - // return await HcsIdentityNetwork.fromAddressBookFile(client, hcsDid.getNetwork(), addressBookFileId); - // } - /** * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. * @@ -100,13 +63,13 @@ export class HcsIdentityNetwork { (args[0] instanceof MessageEnvelope) ) { const [message] = args; - return new HcsDidTransaction(message, this.getDidTopicId()); + return new HcsDidTransaction(message, this.didTopicId); } else if ( (args.length === 1) // (args[0] instanceof DidMethodOperation) ) { const [operation] = args; - return new HcsDidTransaction(operation, this.getDidTopicId()); + return new HcsDidTransaction(operation, this.didTopicId); } else { throw new Error('Invalid arguments'); } @@ -139,14 +102,14 @@ export class HcsIdentityNetwork { (args[2] instanceof PublicKey) ) { const [operation, credentialHash, signerPublicKey] = args; - return new HcsVcTransaction(this.getVcTopicId(), operation, credentialHash, signerPublicKey); + return new HcsVcTransaction(this.vcTopicId, operation, credentialHash, signerPublicKey); } else if ( (args.length === 2) && (args[0] instanceof MessageEnvelope) && (args[1] instanceof PublicKey) ) { const [message, signerPublicKey] = args; - return new HcsVcTransaction(this.getVcTopicId(), message, signerPublicKey); + return new HcsVcTransaction(this.vcTopicId, message, signerPublicKey); } else { throw new Error('Invalid arguments'); } @@ -186,7 +149,7 @@ export class HcsIdentityNetwork { ) { const [withTid] = args; const privateKey = HcsDid.generateDidRootKey(); - const tid = withTid ? this.getDidTopicId() : null; + const tid = withTid ? this.didTopicId : null; return new HcsDid(this.getNetwork(), privateKey, tid); } else if ( @@ -195,7 +158,7 @@ export class HcsIdentityNetwork { (typeof args[1] === 'boolean') ) { const [publicKey, withTid] = args; - const tid = withTid ? this.getDidTopicId() : null; + const tid = withTid ? this.didTopicId : null; return new HcsDid(this.getNetwork(), publicKey, tid); } else if ( @@ -204,7 +167,7 @@ export class HcsIdentityNetwork { (typeof args[1] === 'boolean') ) { const [privateKey, withTid] = args; - const tid = withTid ? this.getDidTopicId() : null; + const tid = withTid ? this.didTopicId : null; return new HcsDid(this.getNetwork(), privateKey, tid); } @@ -216,17 +179,9 @@ export class HcsIdentityNetwork { * @return The DID resolver for this network. */ public getDidResolver(): HcsDidResolver { - return new HcsDidResolver(this.getDidTopicId()); + return new HcsDidResolver(this.didTopicId); } - /** - * Returns DID topic ID for this network. - * - * @return The DID topic ID. - */ - public getDidTopicId(): TopicId { - return TopicId.fromString(this.addressBook.getDidTopicId()); - } /** * Returns a DID topic listener for this network. @@ -234,26 +189,9 @@ export class HcsIdentityNetwork { * @return The DID topic listener. */ public getDidTopicListener(): HcsDidTopicListener { - return new HcsDidTopicListener(this.getDidTopicId()); + return new HcsDidTopicListener(this.didTopicId); } - /** - * Returns Verifiable Credentials topic ID for this network. - * - * @return The VC topic ID. - */ - public getVcTopicId(): TopicId { - return TopicId.fromString(this.addressBook.getVcTopicId()); - } - - /** - * Returns the address book of this identity network. - * - * @return The address book of this identity network. - */ - public getAddressBook(): AddressBook { - return this.addressBook; - } /** * Returns a VC status resolver for this network. @@ -274,10 +212,10 @@ export class HcsIdentityNetwork { public getVcStatusResolver(...args): HcsVcStatusResolver { if (args.length === 0) { - return new HcsVcStatusResolver(this.getVcTopicId()); + return new HcsVcStatusResolver(this.vcTopicId); } else if (args.length === 1) { const [publicKeysProvider] = args; - return new HcsVcStatusResolver(this.getVcTopicId(), publicKeysProvider); + return new HcsVcStatusResolver(this.vcTopicId, publicKeysProvider); } else { throw Error('Invalid arguments'); } @@ -302,10 +240,10 @@ export class HcsIdentityNetwork { public getVcTopicListener(...args): HcsVcTopicListener { if (args.length === 0) { - return new HcsVcTopicListener(this.getVcTopicId()); + return new HcsVcTopicListener(this.vcTopicId); } else if (args.length === 1) { const [publicKeysProvider] = args; - return new HcsVcTopicListener(this.getVcTopicId(), publicKeysProvider); + return new HcsVcTopicListener(this.vcTopicId, publicKeysProvider); } else { throw new Error('Invalid arguments'); } diff --git a/src/index.ts b/src/index.ts index f35c83d..19de087 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -import {AddressBook} from "./identity/hcs/address-book"; import {ArraysUtils} from "./utils/arrays-utils"; import {CredentialSubject} from "./identity/hcs/vc/credential-subject"; import {DidDocumentBase} from "./identity/did-document-base"; @@ -36,7 +35,6 @@ import {Validator} from "./utils/validator"; import {Issuer} from "./identity/hcs/vc/issuer"; export { - AddressBook, ArraysUtils, CredentialSubject, DidDocumentBase, From c029fcddcffb7decfba16ad53b695346b47b3107 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 13:34:17 +1100 Subject: [PATCH 007/133] removed unwanted DID Method specificaitons prams and DidSyntax --- src/identity/did-syntax.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/identity/did-syntax.ts b/src/identity/did-syntax.ts index 6fea302..f3fb26f 100644 --- a/src/identity/did-syntax.ts +++ b/src/identity/did-syntax.ts @@ -2,16 +2,9 @@ export module DidSyntax { export const DID_PREFIX = "did"; export const DID_DOCUMENT_CONTEXT = "https://www.w3.org/ns/did/v1"; export const DID_METHOD_SEPARATOR = ":"; - export const DID_PARAMETER_SEPARATOR = ";"; - export const DID_PARAMETER_VALUE_SEPARATOR = "="; export const DID_TOPIC_SEPARATOR = "_"; export enum Method { HEDERA_HCS = "hedera", } - - export module MethodSpecificParameter { - export const ADDRESS_BOOK_FILE_ID = "fid"; - export const DID_TOPIC_ID = "tid"; - } } From cd21033c58ea0d2789a6e49960caf98b0b280150 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 13:36:22 +1100 Subject: [PATCH 008/133] removed hcs did creation without topic id --- src/identity/hcs/did/hcs-did.ts | 492 +++++++++++++++----------------- 1 file changed, 231 insertions(+), 261 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 6f797fd..6fc4fca 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -9,287 +9,257 @@ import { HcsDidRootKey } from "./hcs-did-root-key"; * Hedera Decentralized Identifier for Hedera DID Method specification based on HCS. */ export class HcsDid implements HederaDid { - public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; - - private didTopicId: TopicId; - private network: string; - private idString: string; - private did: string; - private didRootKey: PublicKey; - private privateDidRootKey: PrivateKey; - - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param didRootKey The public key from which DID is derived. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); - /** - * Creates a DID instance with private DID root key. - * - * @param network The Hedera DID network. - * @param privateDidRootKey The private DID root key. - * @param didTopicId The appnet's DID topic ID. - */ - constructor( - network: string, - privateDidRootKey: PrivateKey, - didTopicId: TopicId - ); - /** - * Creates a DID instance without topic ID specification. - * - * @param network The Hedera DID network. - * @param didRootKey The public key from which DID is derived. - */ - constructor(network: string, didRootKey: PublicKey); - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param idString The id-string of a DID. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, idString: string, didTopicId: TopicId); - constructor(...args: any[]) { - if ( - typeof args[0] === "string" && - args[1] instanceof PublicKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, didRootKey, didTopicId] = args; - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = didRootKey; - this.idString = HcsDid.publicKeyToIdString(didRootKey); - this.did = this.buildDid(); - - return; - } - - if ( - typeof args[0] === "string" && - args[1] instanceof PrivateKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, privateDidRootKey, didTopicId] = args; - - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = privateDidRootKey.publicKey; - this.idString = HcsDid.publicKeyToIdString( - privateDidRootKey.publicKey - ); - this.did = this.buildDid(); - this.privateDidRootKey = privateDidRootKey; - - return; - } - - if ( - typeof args[0] === "string" && - args[1] instanceof PublicKey && - args.length === 2 - ) { - const [network, didRootKey] = args; - - this.didTopicId = null; - this.network = network; - this.didRootKey = didRootKey; - this.idString = HcsDid.publicKeyToIdString(didRootKey); - this.did = this.buildDid(); - - return; - } - - if ( - typeof args[0] === "string" && - typeof args[1] === "string" && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, idString, didTopicId] = args; - - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = HcsDid.idStringToPublicKey(idString); - this.idString = idString; - this.did = this.buildDid(); - - return; - } - - throw new Error("Couldn't find constructor"); + public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; + + private didTopicId: TopicId; + private network: string; + private idString: string; + private did: string; + private didRootKey: PublicKey; + private privateDidRootKey: PrivateKey; + + /** + * Creates a DID instance. + * + * @param network The Hedera DID network. + * @param didRootKey The public key from which DID is derived. + * @param didTopicId The appnet's DID topic ID. + */ + constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); + /** + * Creates a DID instance with private DID root key. + * + * @param network The Hedera DID network. + * @param privateDidRootKey The private DID root key. + * @param didTopicId The appnet's DID topic ID. + */ + constructor( + network: string, + privateDidRootKey: PrivateKey, + didTopicId: TopicId + ); + /** + * Creates a DID instance. + * + * @param network The Hedera DID network. + * @param idString The id-string of a DID. + * @param didTopicId The appnet's DID topic ID. + */ + constructor(network: string, idString: string, didTopicId: TopicId); + constructor(...args: any[]) { + if ( + typeof args[0] === "string" && + args[1] instanceof PublicKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, didRootKey, didTopicId] = args; + this.didTopicId = didTopicId; + this.network = network; + this.didRootKey = didRootKey; + this.idString = HcsDid.publicKeyToIdString(didRootKey); + this.did = this.buildDid(); + + return; } - /** - * Converts a Hedera DID string into {@link HcsDid} object. - * - * @param didString A Hedera DID string. - * @return {@link HcsDid} object derived from the given Hedera DID string. - */ - public static fromString(didString: string): HcsDid { - if (!didString) { - throw new Error("DID string cannot be null"); - } - - const [didPart, topicIdPart] = didString.split( - DidSyntax.DID_TOPIC_SEPARATOR - ); - - if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); - } - - const topicId = TopicId.fromString(topicIdPart); - - const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); - - if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); - } - - const methodName = didParts.shift(); - if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error( - "DID string is invalid: invalid method name: " + methodName - ); - } - - try { - const networkName = didParts.shift(); - const didIdString = didParts.shift(); - - if (didIdString.length < 32 || didParts.shift()) { - throw new Error("DID string is invalid."); - } - - return new HcsDid(networkName, didIdString, topicId); - } catch (e) { - throw new Error("DID string is invalid. " + e.message); - } + if ( + typeof args[0] === "string" && + args[1] instanceof PrivateKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, privateDidRootKey, didTopicId] = args; + + this.didTopicId = didTopicId; + this.network = network; + this.didRootKey = privateDidRootKey.publicKey; + this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); + this.did = this.buildDid(); + this.privateDidRootKey = privateDidRootKey; + + return; } - /** - * Generates a random DID root key. - * - * @return A private key of generated public DID root key. - */ - public static generateDidRootKey(): PrivateKey { - return PrivateKey.generate(); + if ( + typeof args[0] === "string" && + typeof args[1] === "string" && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, idString, didTopicId] = args; + + this.didTopicId = didTopicId; + this.network = network; + this.didRootKey = HcsDid.idStringToPublicKey(idString); + this.idString = idString; + this.did = this.buildDid(); + + return; } - /** - * Generates DID document base from the given DID and its root key. - * - * @param didRootKey Public key used to build this DID. - * @return The DID document base. - * @throws IllegalArgumentException In case given DID root key does not match this DID. - */ - public generateDidDocument(): DidDocumentBase { - const result = new DidDocumentBase(this.toDid()); - if (this.didRootKey) { - const rootKey = HcsDidRootKey.fromHcsIdentity( - this, - this.didRootKey - ); - result.setDidRootKey(rootKey); - } - - return result; + throw new Error("Couldn't find constructor"); + } + + /** + * Converts a Hedera DID string into {@link HcsDid} object. + * + * @param didString A Hedera DID string. + * @return {@link HcsDid} object derived from the given Hedera DID string. + */ + public static fromString(didString: string): HcsDid { + if (!didString) { + throw new Error("DID string cannot be null"); } - public getNetwork(): string { - return this.network; - } + const [didPart, topicIdPart] = didString.split( + DidSyntax.DID_TOPIC_SEPARATOR + ); - public getMethod(): DidSyntax.Method { - return DidSyntax.Method.HEDERA_HCS; + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); } - public toString(): string { - return this.did; - } + const topicId = TopicId.fromString(topicIdPart); - public getDidTopicId(): TopicId { - return this.didTopicId; - } + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); - public getIdString(): string { - return this.idString; + if (didParts.shift() !== DidSyntax.DID_PREFIX) { + throw new Error("DID string is invalid: invalid prefix."); } - public toDid() { - return this.did; + const methodName = didParts.shift(); + if (DidSyntax.Method.HEDERA_HCS !== methodName) { + throw new Error( + "DID string is invalid: invalid method name: " + methodName + ); } - /** - * Constructs DID string from the instance of DID object. - * - * @return A DID string. - */ - private buildDid(): string { - const methodNetwork = [this.getMethod().toString(), this.network].join( - DidSyntax.DID_METHOD_SEPARATOR - ); - - let ret: string; - ret = - DidSyntax.DID_PREFIX + - DidSyntax.DID_METHOD_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - this.idString + - DidSyntax.DID_TOPIC_SEPARATOR + - this.didTopicId.toString(); - - return ret; - } + try { + const networkName = didParts.shift(); + const didIdString = didParts.shift(); - /** - * Constructs an id-string of a DID from a given public key. - * - * @param didRootKey Public Key from which the DID is created. - * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. - */ - public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.base58.encode( - Hashing.sha256.digest(didRootKey.toBytes()) - ); - } + if (didIdString.length < 32 || didParts.shift()) { + throw new Error("DID string is invalid."); + } - /** - * Constructs a public key from a given id-string. - * - * @param idString The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. - * @return Public Key from which the DID is created. - */ - public static idStringToPublicKey(idString: string): PublicKey { - const publicKeyBytes: Uint8Array = Hashing.base58.decode(idString); - return PublicKey.fromBytes(publicKeyBytes); + return new HcsDid(networkName, didIdString, topicId); + } catch (e) { + throw new Error("DID string is invalid. " + e.message); } - - /** - * Returns a private key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPrivateDidRootKey(): PrivateKey { - return this.privateDidRootKey; + } + + /** + * Generates a random DID root key. + * + * @return A private key of generated public DID root key. + */ + public static generateDidRootKey(): PrivateKey { + return PrivateKey.generate(); + } + + /** + * Generates DID document base from the given DID and its root key. + * + * @param didRootKey Public key used to build this DID. + * @return The DID document base. + * @throws IllegalArgumentException In case given DID root key does not match this DID. + */ + public generateDidDocument(): DidDocumentBase { + const result = new DidDocumentBase(this.toDid()); + if (this.didRootKey) { + const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); + result.setDidRootKey(rootKey); } - /** - * Returns a public key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPublicDidRootKey(): PublicKey { - return this.didRootKey; - } + return result; + } + + public getNetwork(): string { + return this.network; + } + + public getMethod(): DidSyntax.Method { + return DidSyntax.Method.HEDERA_HCS; + } + + public toString(): string { + return this.did; + } + + public getDidTopicId(): TopicId { + return this.didTopicId; + } + + public getIdString(): string { + return this.idString; + } + + public toDid() { + return this.did; + } + + /** + * Constructs DID string from the instance of DID object. + * + * @return A DID string. + */ + private buildDid(): string { + const methodNetwork = [this.getMethod().toString(), this.network].join( + DidSyntax.DID_METHOD_SEPARATOR + ); + + let ret: string; + ret = + DidSyntax.DID_PREFIX + + DidSyntax.DID_METHOD_SEPARATOR + + methodNetwork + + DidSyntax.DID_METHOD_SEPARATOR + + this.idString + + DidSyntax.DID_TOPIC_SEPARATOR + + this.didTopicId.toString(); + + return ret; + } + + /** + * Constructs an id-string of a DID from a given public key. + * + * @param didRootKey Public Key from which the DID is created. + * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. + */ + public static publicKeyToIdString(didRootKey: PublicKey): string { + return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); + } + + /** + * Constructs a public key from a given id-string. + * + * @param idString The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. + * @return Public Key from which the DID is created. + */ + public static idStringToPublicKey(idString: string): PublicKey { + const publicKeyBytes: Uint8Array = Hashing.base58.decode(idString); + return PublicKey.fromBytes(publicKeyBytes); + } + + /** + * Returns a private key of DID root key. + * This is only available if it was provided during {@link HcsDid} construction. + * + * @return The private key of DID root key. + */ + public getPrivateDidRootKey(): PrivateKey { + return this.privateDidRootKey; + } + + /** + * Returns a public key of DID root key. + * This is only available if it was provided during {@link HcsDid} construction. + * + * @return The private key of DID root key. + */ + public getPublicDidRootKey(): PublicKey { + return this.didRootKey; + } } From 506d57dda6a3ac8bd460e523a3489cad5cea67c9 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 13:58:05 +1100 Subject: [PATCH 009/133] removed code idStringToPublicKey buggy code --- src/identity/hcs/did/hcs-did.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 6fc4fca..6d46b26 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -91,7 +91,6 @@ export class HcsDid implements HederaDid { this.didTopicId = didTopicId; this.network = network; - this.didRootKey = HcsDid.idStringToPublicKey(idString); this.idString = idString; this.did = this.buildDid(); @@ -232,17 +231,6 @@ export class HcsDid implements HederaDid { return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); } - /** - * Constructs a public key from a given id-string. - * - * @param idString The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. - * @return Public Key from which the DID is created. - */ - public static idStringToPublicKey(idString: string): PublicKey { - const publicKeyBytes: Uint8Array = Hashing.base58.decode(idString); - return PublicKey.fromBytes(publicKeyBytes); - } - /** * Returns a private key of DID root key. * This is only available if it was provided during {@link HcsDid} construction. From 0f168a74ba78540a8fa6c2d8f7256b08da600b7b Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 14:16:00 +1100 Subject: [PATCH 010/133] fix hcs did test and added hedera network constant --- src/identity/did-syntax.ts | 2 + src/identity/hcs/did/hcs-did.ts | 8 ++ test/did/hcs-did.js | 211 +++++++++++++------------------- 3 files changed, 96 insertions(+), 125 deletions(-) diff --git a/src/identity/did-syntax.ts b/src/identity/did-syntax.ts index f3fb26f..410f709 100644 --- a/src/identity/did-syntax.ts +++ b/src/identity/did-syntax.ts @@ -3,6 +3,8 @@ export module DidSyntax { export const DID_DOCUMENT_CONTEXT = "https://www.w3.org/ns/did/v1"; export const DID_METHOD_SEPARATOR = ":"; export const DID_TOPIC_SEPARATOR = "_"; + export const HEDERA_NETWORK_MAINNET = "mainnet"; + export const HEDERA_NETWORK_TESTNET = "testnet"; export enum Method { HEDERA_HCS = "hedera", diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 6d46b26..9b1dac3 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -136,6 +136,14 @@ export class HcsDid implements HederaDid { try { const networkName = didParts.shift(); + + if ( + networkName != DidSyntax.HEDERA_NETWORK_MAINNET && + networkName != DidSyntax.HEDERA_NETWORK_TESTNET + ) { + throw new Error("Invalid Hedera network."); + } + const didIdString = didParts.shift(); if (didIdString.length < 32 || didParts.shift()) { diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 91f436f..4431ea6 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -1,126 +1,87 @@ -const { - FileId, - TopicId -} = require('@hashgraph/sdk'); -const bs58 = require('bs58'); -const { - DidSyntax, - HcsDid -} = require("../../dist"); - -const {assert} = require('chai'); - -const network = 'network'; - -describe('HcsDid', function() { - it('Test Generate And Parse Did Without Tid', async function() { - const addressBook = '0.0.24352'; - - const privKey = HcsDid.generateDidRootKey(); - const pubKey = privKey.publicKey; - - const did = new HcsDid(network, pubKey, FileId.fromString(addressBook)); - - const didString = did.toString(); - - assert.exists(didString); - - const parsedDid = HcsDid.fromString(didString); - - assert.exists(parsedDid); - assert.exists(parsedDid.getAddressBookFileId()); - - assert.notExists(parsedDid.getDidTopicId()); - - assert.equal(parsedDid.toString(), didString); - assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); - assert.equal(parsedDid.getNetwork(), network); - assert.equal(parsedDid.getAddressBookFileId().toString(), addressBook); - assert.equal(parsedDid.getIdString(), did.getIdString()); - }); - - it('Test Generate And Parse Did With Tid', async function() { - const addressBook = '0.0.24352'; - const didTopicId = '1.5.23462345'; - - const privateKey = HcsDid.generateDidRootKey(); - - const fileId = FileId.fromString(addressBook); - const topicId = TopicId.fromString(didTopicId); - const did = new HcsDid(network, privateKey.publicKey, fileId, topicId); - - const didString = did.toString(); - - assert.exists(didString); - - const parsedDid = HcsDid.fromString(didString); - - assert.exists(parsedDid); - assert.exists(parsedDid.getAddressBookFileId()); - assert.exists(parsedDid.getDidTopicId()); - - assert.equal(parsedDid.toDid(), didString); - assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); - assert.equal(parsedDid.getNetwork(), network); - assert.equal(parsedDid.getAddressBookFileId().toString(), addressBook); - assert.equal(parsedDid.getDidTopicId().toString(), didTopicId); - assert.equal(parsedDid.getIdString(), did.getIdString()); - - const parsedDocument = parsedDid.generateDidDocument(); - - assert.exists(parsedDocument); - assert.equal(parsedDocument.getId(), parsedDid.toString()); - assert.equal(parsedDocument.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.notExists(parsedDocument.getDidRootKey()); - - const document = did.generateDidDocument(); - - assert.exists(document); - assert.equal(document.getId(), parsedDid.toString()); - assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.exists(document.getDidRootKey()); - assert.equal(document.getDidRootKey().getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); - }); - - it('Test Parse Predefined Dids', async function() { - const addressBook = '0.0.24352'; - const didTopicId = '1.5.23462345'; - - const validDidWithSwitchedParamsOrder = "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" - + ";hedera:testnet:tid=" + didTopicId - + ";hedera:testnet:fid=" + addressBook; - - const invalidDids = [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;hedera:testnet:fid=0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;hedera:testnet:fid=0.0.24352", - "did:hedera:testnet:invalidAddress;hedera:testnet:fid=0.0.24352;hedera:testnet:tid=1.5.23462345", - "did:hedera:testnet;hedera:testnet:fid=0.0.24352;hedera:testnet:tid=1.5.23462345", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;missing:fid=0.0.24352;" - + "hedera:testnet:tid=1.5.2", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;missing:fid=0.0.1;" - + "hedera:testnet:tid=1.5.2;unknown:parameter=1", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;hedera:testnet:fid=0.0.1=1", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;hedera:testnet:fid", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart;hedera:testnet:fid=0.0.1", - "did:notHedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak;hedera:testnet:fid=0.0.1" - ]; - - for (let did of invalidDids) { - assert.throw(() => { - HcsDid.fromString(did); - }); - } - - const validDid = HcsDid.fromString(validDidWithSwitchedParamsOrder); - - assert.exists(validDid); - assert.exists(validDid.getAddressBookFileId()); - assert.exists(validDid.getDidTopicId()); - - assert.equal(validDid.getAddressBookFileId().toString(), addressBook); - assert.equal(validDid.getDidTopicId().toString(), didTopicId); - }); +const { FileId, TopicId } = require("@hashgraph/sdk"); +const bs58 = require("bs58"); +const { DidSyntax, HcsDid } = require("../../dist"); + +const { assert } = require("chai"); + +const network = "network"; + +describe("HcsDid", function () { + it("Test Generate And Parse Did With Tid", async function () { + const didTopicId = "1.5.23462345"; + + const privateKey = HcsDid.generateDidRootKey(); + + const topicId = TopicId.fromString(didTopicId); + const did = new HcsDid(network, privateKey.publicKey, topicId); + + const didString = did.toString(); + + assert.exists(didString); + + const parsedDid = HcsDid.fromString(didString); + + assert.exists(parsedDid); + assert.exists(parsedDid.getDidTopicId()); + + assert.equal(parsedDid.toDid(), didString); + assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); + assert.equal(parsedDid.getNetwork(), network); + assert.equal(parsedDid.getDidTopicId().toString(), didTopicId); + assert.equal(parsedDid.getIdString(), did.getIdString()); + + const parsedDocument = parsedDid.generateDidDocument(); + + assert.exists(parsedDocument); + assert.equal(parsedDocument.getId(), parsedDid.toString()); + assert.equal(parsedDocument.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); + assert.notExists(parsedDocument.getDidRootKey()); + + const document = did.generateDidDocument(); + + assert.exists(document); + assert.equal(document.getId(), parsedDid.toString()); + assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); + assert.exists(document.getDidRootKey()); + assert.equal( + document.getDidRootKey().getPublicKeyBase58(), + bs58.encode(privateKey.publicKey.toBytes()) + ); + }); + + it("Test Parse Predefined Dids", async function () { + const didTopicId = "1.5.23462345"; + + const validDidWithSwitchedParamsOrder = + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + + "_" + + didTopicId; + + const invalidDids = [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ]; + + for (let did of invalidDids) { + assert.throw(() => { + HcsDid.fromString(did); + }); + } + + const validDid = HcsDid.fromString(validDidWithSwitchedParamsOrder); + + assert.exists(validDid); + assert.exists(validDid.getDidTopicId()); + assert.equal(validDid.getDidTopicId().toString(), didTopicId); + }); }); From c3b99e9c0d0b7356b580601692c84b7a51833fb8 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 14:21:46 +1100 Subject: [PATCH 011/133] fix did creation and message creation tests --- test/did/hcs-did-message.js | 284 +++++++++++++++++++++-------------- test/did/hcs-did-root-key.js | 65 ++++---- 2 files changed, 207 insertions(+), 142 deletions(-) diff --git a/test/did/hcs-did-message.js b/test/did/hcs-did-message.js index 96e3629..375d097 100644 --- a/test/did/hcs-did-message.js +++ b/test/did/hcs-did-message.js @@ -1,120 +1,176 @@ -const {encrypt, decrypt} = require("../aes-encryption-util"); +const { encrypt, decrypt } = require("../aes-encryption-util"); +const { FileId, TopicId } = require("@hashgraph/sdk"); const { - FileId, - TopicId, -} = require('@hashgraph/sdk'); -const { - HcsDidMessage, - MessageEnvelope, - DidMethodOperation, - HcsDid, - ArraysUtils + HcsDidMessage, + MessageEnvelope, + DidMethodOperation, + HcsDid, + ArraysUtils, } = require("../../dist"); -const {assert} = require('chai'); - -const network = 'network'; -const ADDRESS_BOOK_FID = FileId.fromString('0.0.1'); -const DID_TOPIC_ID1 = TopicId.fromString('0.0.2'); -const DID_TOPIC_ID2 = TopicId.fromString('0.0.3'); - -describe('HcsDidMessage', function() { - it('Test Valid Message', async function() { - const privateKey = HcsDid.generateDidRootKey(); - - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - const message = originalEnvelope.sign(msg => privateKey.sign(msg)); - - const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - - assert.isTrue(envelope.isSignatureValid(e => e.open().extractDidRootKey())); - assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); - assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); - }); - - it('Test Encrypted Message', async function() { - const secret = 'Secret encryption password'; - - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - - const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter(m => encrypt(m, secret))); - const encryptedSignedMsg = MessageEnvelope.fromJson(ArraysUtils.toString(encryptedMsg.sign(m => privateKey.sign(m))), HcsDidMessage); - - assert.exists(encryptedSignedMsg); - assert.throw(() => {encryptedSignedMsg.open()}); - - const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); - - assert.exists(decryptedMsg); - assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); - assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); +const { assert } = require("chai"); + +const network = "testnet"; +const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); +const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); + +describe("HcsDidMessage", function () { + it("Test Valid Message", async function () { + const privateKey = HcsDid.generateDidRootKey(); + + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const didJson = doc.toJSON(); + const originalEnvelope = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ); + const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); + + const envelope = MessageEnvelope.fromJson( + Buffer.from(message).toString("utf8"), + HcsDidMessage + ); + + assert.isTrue( + envelope.isSignatureValid((e) => e.open().extractDidRootKey()) + ); + assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); + assert.deepEqual( + originalEnvelope.open().getTimestamp(), + envelope.open().getTimestamp() + ); + }); + + it("Test Encrypted Message", async function () { + const secret = "Secret encryption password"; + + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const didJson = doc.toJSON(); + + const originalEnvelope = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ); + const encryptedMsg = originalEnvelope.encrypt( + HcsDidMessage.getEncrypter((m) => encrypt(m, secret)) + ); + const encryptedSignedMsg = MessageEnvelope.fromJson( + ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), + HcsDidMessage + ); + + assert.exists(encryptedSignedMsg); + assert.throw(() => { + encryptedSignedMsg.open(); }); - it('Test Invalid Did', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign(msg => privateKey.sign(msg)); - const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - - const differentDid = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, ADDRESS_BOOK_FID); - msg.did = differentDid.toDid(); - - assert.isFalse(msg.isValid()); - }); - - it('Test Invalid Topic', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign(msg => privateKey.sign(msg)); - const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - - assert.isTrue(msg.isValid(DID_TOPIC_ID1)); - assert.isFalse(msg.isValid(DID_TOPIC_ID2)); - }); - - it('Test Missing Data', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const operation = DidMethodOperation.CREATE; - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign(msg => privateKey.sign(msg)); - - const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - - let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); - assert.isFalse(msg.isValid()); - - msg = new HcsDidMessage(operation, validMsg.getDid(), null); - assert.isFalse(msg.isValid()); - assert.notExists(msg.getDidDocument()); - assert.exists(msg.getDid()); - assert.equal(operation, msg.getOperation()); - }); - - it('Test Invalid Signature', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, ADDRESS_BOOK_FID, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign(msg => HcsDid.generateDidRootKey().sign(msg)); - const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - - assert.isFalse(envelope.isSignatureValid(e => e.open().extractDidRootKey())); - }); + const decryptedMsg = await encryptedSignedMsg.open( + HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret)) + ); + + assert.exists(decryptedMsg); + assert.equal( + originalEnvelope.open().getDidDocumentBase64(), + decryptedMsg.getDidDocumentBase64() + ); + assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); + }); + + it("Test Invalid Did", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ).sign((msg) => privateKey.sign(msg)); + const msg = MessageEnvelope.fromJson( + Buffer.from(message).toString("utf8"), + HcsDidMessage + ).open(); + + const differentDid = new HcsDid( + network, + HcsDid.generateDidRootKey().publicKey, + DID_TOPIC_ID1 + ); + msg.did = differentDid.toDid(); + + assert.isFalse(msg.isValid()); + }); + + it("Test Invalid Topic", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ).sign((msg) => privateKey.sign(msg)); + const msg = await MessageEnvelope.fromJson( + Buffer.from(message).toString("utf8"), + HcsDidMessage + ).open(); + + assert.isTrue(msg.isValid(DID_TOPIC_ID1)); + assert.isFalse(msg.isValid(DID_TOPIC_ID2)); + }); + + it("Test Missing Data", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const operation = DidMethodOperation.CREATE; + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ).sign((msg) => privateKey.sign(msg)); + + const validMsg = MessageEnvelope.fromJson( + Buffer.from(message).toString("utf8"), + HcsDidMessage + ).open(); + + let msg = new HcsDidMessage( + operation, + null, + validMsg.getDidDocumentBase64() + ); + assert.isFalse(msg.isValid()); + + msg = new HcsDidMessage(operation, validMsg.getDid(), null); + assert.isFalse(msg.isValid()); + assert.notExists(msg.getDidDocument()); + assert.exists(msg.getDid()); + assert.equal(operation, msg.getOperation()); + }); + + it("Test Invalid Signature", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson( + didJson, + DidMethodOperation.CREATE + ).sign((msg) => HcsDid.generateDidRootKey().sign(msg)); + const envelope = MessageEnvelope.fromJson( + Buffer.from(message).toString("utf8"), + HcsDidMessage + ); + + assert.isFalse( + envelope.isSignatureValid((e) => e.open().extractDidRootKey()) + ); + }); }); diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js index b10c0db..b8b309a 100644 --- a/test/did/hcs-did-root-key.js +++ b/test/did/hcs-did-root-key.js @@ -1,37 +1,46 @@ -const { - FileId -} = require('@hashgraph/sdk'); -const bs58 = require('bs58'); -const { - HcsDid, - HcsDidRootKey -} = require("../../dist"); +const { FileId, TopicId } = require("@hashgraph/sdk"); +const bs58 = require("bs58"); +const { HcsDid, HcsDidRootKey } = require("../../dist"); -const {assert} = require('chai'); +const { assert } = require("chai"); -const network = 'network'; +const network = "network"; -describe('HcsDidRootKey', function() { - it('Test Generate', async function() { - const addressBook = '0.0.1'; +describe("HcsDidRootKey", function () { + it("Test Generate", async function () { + const didTopicId = TopicId.fromString("1.5.23462345"); - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, FileId.fromString(addressBook)); + const did = new HcsDid(network, privateKey.publicKey, didTopicId); - assert.throw(() => {HcsDidRootKey.fromHcsIdentity(null, null);}); - assert.throw(() => {HcsDidRootKey.fromHcsIdentity(did, null);}); - assert.throw(() => {HcsDidRootKey.fromHcsIdentity(null, privateKey.publicKey);}); - - const differentPublicKey = HcsDid.generateDidRootKey().publicKey; - assert.throw(() => {HcsDidRootKey.fromHcsIdentity(did, differentPublicKey);}); - - const didRootKey = HcsDidRootKey.fromHcsIdentity(did, privateKey.publicKey); - assert.exists(didRootKey); + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(null, null); + }); + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(did, null); + }); + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(null, privateKey.publicKey); + }); - assert.equal(didRootKey.getType(), 'Ed25519VerificationKey2018'); - assert.equal(didRootKey.getId(), did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); - assert.equal(didRootKey.getController(), did.toDid()); - assert.equal(didRootKey.getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); + const differentPublicKey = HcsDid.generateDidRootKey().publicKey; + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(did, differentPublicKey); }); + + const didRootKey = HcsDidRootKey.fromHcsIdentity(did, privateKey.publicKey); + assert.exists(didRootKey); + + assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); + assert.equal( + didRootKey.getId(), + did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME + ); + assert.equal(didRootKey.getController(), did.toDid()); + assert.equal( + didRootKey.getPublicKeyBase58(), + bs58.encode(privateKey.publicKey.toBytes()) + ); + }); }); From e948a3c83e3400730ad5604ab20bf8b87f7aad30 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 15:07:47 +1100 Subject: [PATCH 012/133] fix more tests --- test/did-document-base.js | 300 +++++++++++++++++++---------------- test/did/hcs-did-root-key.js | 2 +- test/did/hcs-did.js | 2 +- 3 files changed, 162 insertions(+), 142 deletions(-) diff --git a/test/did-document-base.js b/test/did-document-base.js index a71246e..0c7f4b0 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -1,144 +1,164 @@ const { - HcsDid, - DidDocumentBase, - DidDocumentJsonProperties, - DidSyntax, - HcsDidRootKey + HcsDid, + DidDocumentBase, + DidDocumentJsonProperties, + DidSyntax, + HcsDidRootKey, } = require("../dist"); -const {FileId} = require("@hashgraph/sdk"); -const bs58 = require('bs58'); -const {expect, assert} = require('chai'); - -const network = 'testnet'; - -describe("DidDocumentBase", function() { - it('Test Serialization', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, FileId.fromString('0.0.1')); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const root = JSON.parse(didJson); - - expect(root).to.have.keys([ - DidDocumentJsonProperties.CONTEXT, - DidDocumentJsonProperties.ID, - DidDocumentJsonProperties.PUBLIC_KEY, - DidDocumentJsonProperties.AUTHENTICATION, - ]); - assert.equal(root[DidDocumentJsonProperties.CONTEXT], DidSyntax.DID_DOCUMENT_CONTEXT); - assert.equal(root[DidDocumentJsonProperties.ID], did.toDid()); - - const didRootKey = root[DidDocumentJsonProperties.PUBLIC_KEY][0]; - assert.equal(didRootKey['type'], HcsDidRootKey.DID_ROOT_KEY_TYPE); - assert.equal(didRootKey[DidDocumentJsonProperties.ID], did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); - assert.equal(didRootKey['controller'], did.toDid()); - assert.equal(didRootKey['publicKeyBase58'], bs58.encode(privateKey.publicKey.toBytes())); - }); - - it('Test Deserialization', async function() { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, FileId.fromString('0.0.1')); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const parsedDoc = DidDocumentBase.fromJson(didJson); - assert.equal(parsedDoc.getId(), doc.getId()); - - const didRootKey = parsedDoc.getDidRootKey(); - assert.exists(didRootKey); - assert.equal(didRootKey.getPublicKeyBase58(), doc.getDidRootKey().getPublicKeyBase58()); - assert.equal(didRootKey.getController(), doc.getDidRootKey().getController()); - assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); - assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); - }); - - it('Test Invalid Deserialization', async function() { - const didJson = "{" - + " \"@context\": \"https://www.w3.org/ns/did/v1\"," - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1\"," - + " \"authentication\": [" - + " \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#did-root-key\"" - + " ]," - + " \"publicKey\":\"invalidPublicKey\"," - + " \"service\": [" - + " {" - + " \"id\":\"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#vcs\"," - + " \"type\": \"VerifiableCredentialService\"," - + " \"serviceEndpoint\": \"https://example.com/vc/\"" - + " }" - + " ]" - + "}"; - - assert.throw(() => { - DidDocumentBase.fromJson(didJson); - }); - }); - - it('Test Incomplete Json Deserialization', async function() { - const didJsonMissingPublicKeys = "{" - + " \"@context\": \"https://www.w3.org/ns/did/v1\"," - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1\"," - + " \"authentication\": [" - + " \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#did-root-key\"" - + " ]" - + "}"; - - const didJsonMissingRootKey = "{" - + " \"@context\": \"https://www.w3.org/ns/did/v1\"," - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1\"," - + " \"authentication\": [" - + " \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#did-root-key\"" - + " ]," - + " \"publicKey\": [" - + " {" - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#key-1\"," - + " \"type\": \"Ed25519VerificationKey2018\"," - + " \"publicKeyBase58\": \"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"" - + " }" - + " ]," - + " \"service\": [" - + " {" - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#vcs\"," - + " \"type\": \"VerifiableCredentialService\"," - + " \"serviceEndpoint\": \"https://example.com/vc/\"" - + " }" - + " ]" - + "}"; - - const didJsonMissingPublicKeyId = "{" - + " \"@context\": \"https://www.w3.org/ns/did/v1\"," - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1\"," - + " \"authentication\": [" - + " \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#did-root-key\"" - + " ]," - + " \"publicKey\": [" - + " {" - + " \"type\": \"Ed25519VerificationKey2018\"," - + " \"publicKeyBase58\": \"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"" - + " }" - + " ]," - + " \"service\": [" - + " {" - + " \"id\": \"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm;hedera:mainnet:fid=0.0.1#vcs\"," - + " \"type\": \"VerifiableCredentialService\"," - + " \"serviceEndpoint\": \"https://example.com/vc/\"" - + " }" - + " ]" - + "}"; - - let doc = DidDocumentBase.fromJson(didJsonMissingPublicKeys); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingRootKey); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingPublicKeyId); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); +const { TopicId } = require("@hashgraph/sdk"); +const bs58 = require("bs58"); +const { expect, assert } = require("chai"); + +const network = "testnet"; +const DID_TOPIC_ID = TopicId.fromString("0.0.2"); + +describe("DidDocumentBase", function () { + it("Test Serialization", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + + const root = JSON.parse(didJson); + + expect(root).to.have.keys([ + DidDocumentJsonProperties.CONTEXT, + DidDocumentJsonProperties.ID, + DidDocumentJsonProperties.VERIFICATION_METHOD, + DidDocumentJsonProperties.AUTHENTICATION, + ]); + assert.equal( + root[DidDocumentJsonProperties.CONTEXT], + DidSyntax.DID_DOCUMENT_CONTEXT + ); + assert.equal(root[DidDocumentJsonProperties.ID], did.toDid()); + + const didRootKey = root[DidDocumentJsonProperties.VERIFICATION_METHOD][0]; + assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); + assert.equal( + didRootKey[DidDocumentJsonProperties.ID], + did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME + ); + assert.equal(didRootKey["controller"], did.toDid()); + assert.equal( + didRootKey["publicKeyBase58"], + bs58.encode(privateKey.publicKey.toBytes()) + ); + }); + + it("Test Deserialization", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + + const parsedDoc = DidDocumentBase.fromJson(didJson); + assert.equal(parsedDoc.getId(), doc.getId()); + + const didRootKey = parsedDoc.getDidRootKey(); + assert.exists(didRootKey); + assert.equal( + didRootKey.getPublicKeyBase58(), + doc.getDidRootKey().getPublicKeyBase58() + ); + assert.equal( + didRootKey.getController(), + doc.getDidRootKey().getController() + ); + assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); + assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); + }); + + it("Test Invalid Deserialization", async function () { + const didJson = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "verificationMethod":"invalidPublicKey",' + + ' "service": [' + + " {" + + ' "id":"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + assert.throw(() => { + DidDocumentBase.fromJson(didJson); }); + }); + + it("Test Incomplete Json Deserialization", async function () { + const didJsonMissingPublicKeys = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]" + + "}"; + + const didJsonMissingRootKey = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "publicKey": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + + ' "type": "Ed25519VerificationKey2018",' + + ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + " }" + + " ]," + + ' "service": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + const didJsonMissingPublicKeyId = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "publicKey": [' + + " {" + + ' "type": "Ed25519VerificationKey2018",' + + ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + " }" + + " ]," + + ' "service": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + let doc = DidDocumentBase.fromJson(didJsonMissingPublicKeys); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); + + doc = DidDocumentBase.fromJson(didJsonMissingRootKey); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); + + doc = DidDocumentBase.fromJson(didJsonMissingPublicKeyId); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); + }); }); diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js index b8b309a..785d0bd 100644 --- a/test/did/hcs-did-root-key.js +++ b/test/did/hcs-did-root-key.js @@ -1,4 +1,4 @@ -const { FileId, TopicId } = require("@hashgraph/sdk"); +const { TopicId } = require("@hashgraph/sdk"); const bs58 = require("bs58"); const { HcsDid, HcsDidRootKey } = require("../../dist"); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 4431ea6..bbf86dd 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -4,7 +4,7 @@ const { DidSyntax, HcsDid } = require("../../dist"); const { assert } = require("chai"); -const network = "network"; +const network = "testnet"; describe("HcsDid", function () { it("Test Generate And Parse Did With Tid", async function () { From 08a957797b1135bee7a254a54ddf5bd718bf9563 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 27 Jan 2022 16:26:53 +1100 Subject: [PATCH 013/133] fix identity network and related tests --- .../hcs/hcs-identity-network-builder.ts | 43 +- src/identity/hcs/hcs-identity-network.ts | 76 ++-- test/did/hcs-did-method-operations.js | 318 ++++++++------- test/hcs-identity-network.js | 282 ++++++------- test/network-ready-test-base.js | 379 +++++++++--------- 5 files changed, 539 insertions(+), 559 deletions(-) diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts index e05de15..b174675 100644 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ b/src/identity/hcs/hcs-identity-network-builder.ts @@ -1,30 +1,31 @@ -import {Client, FileCreateTransaction, Hbar, PublicKey, TopicCreateTransaction, TopicId} from "@hashgraph/sdk"; +import {Client, Hbar, PublicKey, TopicCreateTransaction, TopicId} from "@hashgraph/sdk"; import {HcsIdentityNetwork} from "./hcs-identity-network"; export class HcsIdentityNetworkBuilder { - private appnetName: string; private didTopicId: TopicId; private vcTopicId: TopicId; private network: string; - private didServers: string[]; private publicKey: PublicKey; private maxTransactionFee: Hbar = new Hbar(2); private didTopicMemo: string = ''; private vcTopicMemo: string = ''; public async execute(client: Client): Promise { - const didTopicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(this.maxTransactionFee) - .setTopicMemo(this.didTopicMemo); - - if (this.publicKey) { - didTopicCreateTransaction.setAdminKey(this.publicKey); - } - const didTxId = await didTopicCreateTransaction.execute(client); - this.didTopicId = (await didTxId.getReceipt(client)).topicId; - const vcTopicCreateTransaction = new TopicCreateTransaction() + if(!this.didTopicId){ + const didTopicCreateTransaction = new TopicCreateTransaction() + .setMaxTransactionFee(this.maxTransactionFee) + .setTopicMemo(this.didTopicMemo); + if (this.publicKey) { + didTopicCreateTransaction.setAdminKey(this.publicKey); + } + const didTxId = await didTopicCreateTransaction.execute(client); + this.didTopicId = (await didTxId.getReceipt(client)).topicId; + } + + if(!this.vcTopicId){ + const vcTopicCreateTransaction = new TopicCreateTransaction() .setMaxTransactionFee(this.maxTransactionFee) .setTopicMemo(this.vcTopicMemo); @@ -34,26 +35,12 @@ export class HcsIdentityNetworkBuilder { const vcTxId = await vcTopicCreateTransaction.execute(client); this.vcTopicId = (await vcTxId.getReceipt(client)).topicId; - - return HcsIdentityNetwork.fromHcsDid(this.network, this.didTopicId, this.vcTopicId); - } - - public addAppnetDidServer(serverUrl: string): HcsIdentityNetworkBuilder { - if (!this.didServers) { - this.didServers = []; } - if (this.didServers.indexOf(serverUrl) == -1) { - this.didServers.push(serverUrl); - } - return this; + return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId, this.vcTopicId); } - public setAppnetName(appnetName: string): HcsIdentityNetworkBuilder { - this.appnetName = appnetName; - return this; - } public setDidTopicMemo(didTopicMemo: string): HcsIdentityNetworkBuilder { this.didTopicMemo = didTopicMemo; diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 6a7a1bf..2342e09 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -1,4 +1,4 @@ -import { Client, FileContentsQuery, FileId, PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; +import { PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../did-method-operation"; import { HcsDid } from "./did/hcs-did"; import { HcsDidMessage } from "./did/hcs-did-message"; @@ -13,7 +13,7 @@ import { HcsVcTopicListener } from "./vc/hcs-vc-topic-listener"; import { HcsVcTransaction } from "./vc/hcs-vc-transaction"; /** - * Appnet's identity network based on Hedera HCS DID method specification. + * Identity network based on Hedera HCS DID method specification. */ export class HcsIdentityNetwork { @@ -33,14 +33,27 @@ export class HcsIdentityNetwork { * @param network The Hedera network. * @return The identity network instance. */ - public static async fromHcsDid(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { + public static async fromHcsDidTopic(network: string, didTopicId: TopicId): Promise { const result = new HcsIdentityNetwork(); result.network = network; result.didTopicId = didTopicId; - result.vcTopicId = vcTopicId; return result; } + /** + * Instantiates existing identity network using a DID generated for this network. + * + * @param network The Hedera network. + * @return The identity network instance. + */ + public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { + const result = new HcsIdentityNetwork(); + result.network = network; + result.didTopicId = didTopicId; + result.vcTopicId = vcTopicId; + return result; + } + /** * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. * @@ -124,15 +137,32 @@ export class HcsIdentityNetwork { return this.network; } + /** + * Returns the Did Topic on which this identity network sends messages to. + * + * @return The TopicId. + */ + public getDidTopicId(): TopicId { + return this.didTopicId; + } + + /** + * Returns the VC Topic on which this identity network sends messages to. + * + * @return The Hedera TopicId. + */ + public getVcTopicId(): TopicId { + return this.vcTopicId; + } + /** * Generates a new DID and it's root key. * - * @param withTid Indicates if DID topic ID should be added to the DID as tid parameter. * @return Generated {@link HcsDid} with it's private DID root key. */ - public generateDid(withTid: boolean): HcsDid; + public generateDid(): HcsDid; - public generateDid(privateKey: PrivateKey, withTid: boolean): HcsDid; + public generateDid(privateKey: PrivateKey): HcsDid; /** * Generates a new DID from the given public DID root key. @@ -141,35 +171,25 @@ export class HcsIdentityNetwork { * @param withTid Indicates if DID topic ID should be added to the DID as tid parameter. * @return A newly generated DID. */ - public generateDid(publicKey: PublicKey, withTid: boolean): HcsDid; + public generateDid(publicKey: PublicKey): HcsDid; public generateDid(...args): HcsDid { if ( - (args.length === 1) && - (typeof args[0] === 'boolean') + (args.length === 0) ) { - const [withTid] = args; const privateKey = HcsDid.generateDidRootKey(); - const tid = withTid ? this.didTopicId : null; - - return new HcsDid(this.getNetwork(), privateKey, tid); + return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); } else if ( - (args.length === 2) && - (args[0] instanceof PublicKey) && - (typeof args[1] === 'boolean') + (args.length === 1) && + (args[0] instanceof PublicKey) ) { - const [publicKey, withTid] = args; - const tid = withTid ? this.didTopicId : null; - - return new HcsDid(this.getNetwork(), publicKey, tid); + const [publicKey] = args; + return new HcsDid(this.getNetwork(), publicKey, this.didTopicId); } else if ( - (args.length === 2) && - (args[0] instanceof PrivateKey) && - (typeof args[1] === 'boolean') + (args.length === 1) && + (args[0] instanceof PrivateKey) ) { - const [privateKey, withTid] = args; - const tid = withTid ? this.didTopicId : null; - - return new HcsDid(this.getNetwork(), privateKey, tid); + const [privateKey] = args; + return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); } } diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index dbc4891..5b2a4cf 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -1,151 +1,175 @@ -const {DidMethodOperation, DidDocumentJsonProperties} = require("../../dist"); -const {NetworkReadyTestBase} = require("../network-ready-test-base"); +const { DidMethodOperation, DidDocumentJsonProperties } = require("../../dist"); +const { NetworkReadyTestBase } = require("../network-ready-test-base"); -const {assert} = require('chai'); +const { assert } = require("chai"); const testBase = new NetworkReadyTestBase(); -let hcsDid, - didDocument; - -const EXPECT_NO_ERROR = function(err) { - throw err; -} - -describe('Hcs Did Method Operations', function() { - before(async function() { - this.timeout(60000); - await testBase.setup(); - hcsDid = testBase.didNetwork.generateDid(false); - didDocument = hcsDid.generateDidDocument().toJSON(); - }); - - after(async function() { - testBase.cleanup(); - }); - - it('Test Create', async function() { - this.timeout(60000); - const op = DidMethodOperation.CREATE; - - const envelope = await testBase.sendDidTransaction(hcsDid, didDocument, op, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - assert.exists(msg); - assert.exists(msg.getDidDocument()); - - assert.equal(hcsDid.toDid(), msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it('Test Resolve After Create', async function() { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it('Test Update', async function() { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - const publicKeys = rootObject[DidDocumentJsonProperties.PUBLIC_KEY]; - publicKeys.push(JSON.parse("{" - + "\"id\": \"did:example:123456789abcdefghi#keys-2\"," - + "\"type\": \"Ed25519VerificationKey2018\"," - + "\"controller\": \"did:example:pqrstuvwxyz0987654321\"," - + "\"publicKeyBase58\": \"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"" - + "}")); - rootObject[DidDocumentJsonProperties.PUBLIC_KEY] = publicKeys; - - const newDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.UPDATE; - const envelope = await testBase.sendDidTransaction(hcsDid, newDoc, operation, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(newDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it('Test Resolve After Update', async function() { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.UPDATE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it('Test Delete', async function() { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - if(rootObject.hasOwnProperty(DidDocumentJsonProperties.AUTHENTICATION)) { - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; - } - - const deletedDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.DELETE; - const envelope = await testBase.sendDidTransaction(hcsDid, deletedDoc, operation, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(deletedDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it('Test Resolve After Delete', async function() { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it('Test Resolve After Delete And Another Invalid Submit', async function() { - this.timeout(60000); - await testBase.sendDidTransaction(hcsDid, didDocument, DidMethodOperation.UPDATE, EXPECT_NO_ERROR); - - const didString = hcsDid.toDid(); - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); -}) +let hcsDid, didDocument; + +const EXPECT_NO_ERROR = function (err) { + throw err; +}; + +describe("Hcs Did Method Operations", function () { + before(async function () { + this.timeout(60000); + await testBase.setup(); + hcsDid = testBase.didNetwork.generateDid(); + didDocument = hcsDid.generateDidDocument().toJSON(); + }); + + after(async function () { + testBase.cleanup(); + }); + + it("Test Create", async function () { + this.timeout(60000); + const op = DidMethodOperation.CREATE; + + const envelope = await testBase.sendDidTransaction( + hcsDid, + didDocument, + op, + EXPECT_NO_ERROR + ); + assert.exists(envelope); + + const msg = envelope.open(); + assert.exists(msg); + assert.exists(msg.getDidDocument()); + + assert.equal(hcsDid.toDid(), msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.CREATE, msg.getOperation()); + }); + + it("Test Resolve After Create", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.CREATE, msg.getOperation()); + }); + + it("Test Update", async function () { + this.timeout(60000); + const rootObject = JSON.parse(didDocument); + + const publicKeys = + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD]; + publicKeys.push( + JSON.parse( + "{" + + '"id": "did:example:123456789abcdefghi#keys-2",' + + '"type": "Ed25519VerificationKey2018",' + + '"controller": "did:example:pqrstuvwxyz0987654321",' + + '"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + "}" + ) + ); + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = publicKeys; + + const newDoc = JSON.stringify(rootObject); + + const operation = DidMethodOperation.UPDATE; + const envelope = await testBase.sendDidTransaction( + hcsDid, + newDoc, + operation, + EXPECT_NO_ERROR + ); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(newDoc, msg.getDidDocument()); + assert.equal(operation, msg.getOperation()); + }); + + it("Test Resolve After Update", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.UPDATE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); + + it("Test Delete", async function () { + this.timeout(60000); + const rootObject = JSON.parse(didDocument); + + if (rootObject.hasOwnProperty(DidDocumentJsonProperties.AUTHENTICATION)) { + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; + } + + const deletedDoc = JSON.stringify(rootObject); + + const operation = DidMethodOperation.DELETE; + const envelope = await testBase.sendDidTransaction( + hcsDid, + deletedDoc, + operation, + EXPECT_NO_ERROR + ); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(deletedDoc, msg.getDidDocument()); + assert.equal(operation, msg.getOperation()); + }); + + it("Test Resolve After Delete", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.DELETE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); + + it("Test Resolve After Delete And Another Invalid Submit", async function () { + this.timeout(60000); + await testBase.sendDidTransaction( + hcsDid, + didDocument, + DidMethodOperation.UPDATE, + EXPECT_NO_ERROR + ); + + const didString = hcsDid.toDid(); + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.DELETE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); +}); diff --git a/test/hcs-identity-network.js b/test/hcs-identity-network.js index 93c94c0..315b5a7 100644 --- a/test/hcs-identity-network.js +++ b/test/hcs-identity-network.js @@ -1,168 +1,130 @@ -const {OPERATOR_KEY, OPERATOR_ID, NETWORK} = require("./variables"); +const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("./variables"); const { - AccountId, - PrivateKey, - Client, - FileCreateTransaction, - Hbar, - TopicInfoQuery -} = require('@hashgraph/sdk'); + AccountId, + PrivateKey, + Client, + Hbar, + TopicInfoQuery, + TopicId, +} = require("@hashgraph/sdk"); const { - AddressBook, - HcsDid, - HcsIdentityNetworkBuilder, - HcsIdentityNetwork + HcsDid, + HcsIdentityNetworkBuilder, + HcsIdentityNetwork, } = require("../dist"); -const {assert} = require('chai'); +const { assert } = require("chai"); const FEE = new Hbar(2); -const ADDRESS_BOOK_JSON = "{\"appnetName\":\"Test Identity SDK appnet\",\"didTopicId\":\"0.0.214919\",\"vcTopicId\":\"0.0.214920\",\"appnetDidServers\":[\"http://localhost:3000/api/v1\"]}"; - -let client, - operatorId, - operatorKey, - addressBookFileId, - network; - -describe('HcsIdentityNetwork', function() { - before(async function() { - this.timeout(60000); - - operatorId = AccountId.fromString(OPERATOR_ID); - operatorKey = PrivateKey.fromString(OPERATOR_KEY); - network = NETWORK; - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + network + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - - const response = await new FileCreateTransaction() - .setContents(ADDRESS_BOOK_JSON) - .setKeys([operatorKey.publicKey]) - .setMaxTransactionFee(FEE) - .execute(client); - - const receipt = await response.getReceipt(client); - addressBookFileId = receipt.fileId; - }); - - it('Test Create Identity Network', async function() { - this.timeout(60000); - const appnetName = 'Test Identity SDK appnet'; - const didServerUrl = 'http://localhost:3000/api/v1'; - const didTopicMemo = 'Test Identity SDK appnet DID topic'; - const vcTopicMemo = 'Test Identity SDK appnet VC topic'; - - const didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(network) - .setAppnetName(appnetName) - .addAppnetDidServer(didServerUrl) - .setPublicKey(operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .execute(client); - - assert.exists(didNetwork); - assert.exists(didNetwork.getAddressBook()); - - const addressBook = didNetwork.getAddressBook(); - assert.exists(addressBook.getDidTopicId()); - assert.exists(addressBook.getVcTopicId()); - assert.exists(addressBook.getAppnetDidServers()); - assert.exists(addressBook.getFileId()); - assert.equal(addressBook.getAppnetName(), appnetName); - assert.equal(didNetwork.getNetwork(), network); - - const didTopicInfo = await new TopicInfoQuery() - .setTopicId(didNetwork.getDidTopicId()) - .execute(client); - - assert.exists(didTopicInfo); - assert.equal(didTopicInfo.topicMemo, didTopicMemo); - - const vcTopicInfo = await new TopicInfoQuery() - .setTopicId(didNetwork.getVcTopicId()) - .execute(client); - - assert.exists(vcTopicInfo); - assert.equal(vcTopicInfo.topicMemo, vcTopicMemo); - - const createdNetwork = await HcsIdentityNetwork.fromAddressBookFile(client, network, addressBook.getFileId()); - assert.exists(createdNetwork); - assert.equal(addressBook.toJSON(), createdNetwork.getAddressBook().toJSON()); - }); - - it('Test Init Network From Json AddressBook', async function() { - this.timeout(60000); - const addressBook = AddressBook.fromJson(ADDRESS_BOOK_JSON, addressBookFileId); - const didNetwork = HcsIdentityNetwork.fromAddressBook(network, addressBook); - - assert.exists(didNetwork); - assert.exists(didNetwork.getAddressBook().getFileId()); - assert.equal(didNetwork.getNetwork(), network); - }); - - it('Test Init Network From Did', async function() { - this.timeout(60000); - const did = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, addressBookFileId); - - const didNetwork = await HcsIdentityNetwork.fromHcsDid(client, did); - - assert.exists(didNetwork); - assert.exists(didNetwork.getAddressBook().getFileId()); - assert.equal(didNetwork.getNetwork(), network); - assert.equal(ADDRESS_BOOK_JSON, didNetwork.getAddressBook().toJSON()); - }); - - it('Test Generate Did For Network', async function() { - this.timeout(60000); - - function checkTestGenerateDidForNetwork(did, publicKey, didTopicId, withTid) { - assert.exists(did); - assert.equal(HcsDid.publicKeyToIdString(publicKey), did.getIdString()); - assert.equal(did.getNetwork(), network); - assert.equal(did.getAddressBookFileId(), addressBookFileId); - if (withTid) { - assert.equal(did.getDidTopicId().toString(), didTopicId) - } else { - assert.notExists(did.getDidTopicId()); - } - assert.equal(did.getMethod(), HcsDid.DID_METHOD); - } - - const addressBook = AddressBook.fromJson(ADDRESS_BOOK_JSON, addressBookFileId); - const didNetwork = HcsIdentityNetwork.fromAddressBook(network, addressBook); - - let did = didNetwork.generateDid(true); - assert.exists(did.getPrivateDidRootKey()); - - let publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), true); - - did = didNetwork.generateDid(false); - assert.exists(did.getPrivateDidRootKey()); - - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), false); - - did = didNetwork.generateDid(true); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), true); - - did = didNetwork.generateDid(false); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), false); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey, true); - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), true); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey, false); - checkTestGenerateDidForNetwork(did, publicKey, addressBook.getDidTopicId(), false); - }); +const DID_TOPIC_ID = TopicId.fromString("0.0.214920"); + +let client, operatorId, operatorKey, network; + +describe("HcsIdentityNetwork", function () { + before(async function () { + this.timeout(60000); + + operatorId = AccountId.fromString(OPERATOR_ID); + operatorKey = PrivateKey.fromString(OPERATOR_KEY); + network = NETWORK; + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + network + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("Test Create Identity Network", async function () { + this.timeout(60000); + const didTopicMemo = "Test Identity SDK appnet DID topic"; + const vcTopicMemo = "Test Identity SDK appnet VC topic"; + + const didNetwork = await new HcsIdentityNetworkBuilder() + .setNetwork(network) + .setPublicKey(operatorKey.publicKey) + .setMaxTransactionFee(FEE) + .setDidTopicMemo(didTopicMemo) + .setVCTopicMemo(vcTopicMemo) + .execute(client); + + assert.exists(didNetwork); + + const didTopicInfo = await new TopicInfoQuery() + .setTopicId(didNetwork.getDidTopicId()) + .execute(client); + + assert.exists(didTopicInfo); + assert.equal(didTopicInfo.topicMemo, didTopicMemo); + + const vcTopicInfo = await new TopicInfoQuery() + .setTopicId(didNetwork.getVcTopicId()) + .execute(client); + + assert.exists(vcTopicInfo); + assert.equal(vcTopicInfo.topicMemo, vcTopicMemo); + }); + + it("Test Init Network From Did topic", async function () { + this.timeout(60000); + const did = new HcsDid( + network, + HcsDid.generateDidRootKey().publicKey, + DID_TOPIC_ID + ); + + const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic( + network, + did.getDidTopicId() + ); + + assert.exists(didNetwork); + assert.equal(didNetwork.getDidTopicId(), DID_TOPIC_ID); + assert.equal(didNetwork.getNetwork(), network); + }); + + it("Test Generate Did For Network", async function () { + this.timeout(60000); + + function checkTestGenerateDidForNetwork(did, publicKey, didTopicId) { + assert.exists(did); + assert.equal(HcsDid.publicKeyToIdString(publicKey), did.getIdString()); + assert.equal(did.getNetwork(), network); + assert.equal(did.getDidTopicId().toString(), didTopicId); + assert.equal(did.getMethod(), HcsDid.DID_METHOD); + } + + const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic( + network, + DID_TOPIC_ID + ); + + let did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + + let publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + publicKey = HcsDid.generateDidRootKey().publicKey; + did = didNetwork.generateDid(publicKey); + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + publicKey = HcsDid.generateDidRootKey().publicKey; + did = didNetwork.generateDid(publicKey); + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + }); }); diff --git a/test/network-ready-test-base.js b/test/network-ready-test-base.js index d17ef93..28e08da 100644 --- a/test/network-ready-test-base.js +++ b/test/network-ready-test-base.js @@ -1,220 +1,207 @@ -const {OPERATOR_KEY, OPERATOR_ID, NETWORK} = require("./variables"); -const { - AccountId, - PrivateKey, - Client, - FileId, - Hbar -} = require('@hashgraph/sdk'); - -const { - AddressBook, - HcsIdentityNetworkBuilder, - HcsIdentityNetwork -} = require("../dist"); +const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("./variables"); +const { AccountId, PrivateKey, Client, Hbar } = require("@hashgraph/sdk"); + +const { HcsIdentityNetworkBuilder } = require("../dist"); const MIRROR_NODE_TIMEOUT = 30 * 1000; const NO_MORE_MESSAGES_TIMEOUT = 15 * 1000; const FEE = new Hbar(2); -const EXISTING_ADDRESS_BOOK_FILE_ID = null; -const EXISTING_ADDRESS_BOOK_JSON = null; +const EXISTING_DID_TOPIC_ID = null; +const EXISTING_VC_TOPIC_ID = null; const sleep = function (sleepTime) { - return new Promise(resolve => { - setTimeout(() => { - resolve(); - }, sleepTime) - }) -} + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, sleepTime); + }); +}; const until = function (maxTime, untilFunction) { - return new Promise((resolve, reject) => { - let t, i; - i = setInterval(() => { - if (untilFunction()) { - clearInterval(i); - clearTimeout(t); - resolve(); - } - }, 100); - t = setTimeout(() => { - clearInterval(i); - clearTimeout(t); - resolve(); - }, maxTime) - }) -} - + return new Promise((resolve) => { + let t, i; + i = setInterval(() => { + if (untilFunction()) { + clearInterval(i); + clearTimeout(t); + resolve(); + } + }, 100); + t = setTimeout(() => { + clearInterval(i); + clearTimeout(t); + resolve(); + }, maxTime); + }); +}; /** * Base class for test classes that need a hedera identity network set up before running. */ class NetworkReadyTestBase { - operatorId; - operatorKey; - network; - didNetwork; - client; - - /** - * Initialize hedera clients and accounts. - */ - // BeforeAll - async setup() { - this.operatorId = AccountId.fromString(OPERATOR_ID); - this.operatorKey = PrivateKey.fromString(OPERATOR_KEY); - this.network = NETWORK; - - // Build Hedera testnet client - switch (this.network.toUpperCase()) { - case "MAINNET": - this.client = Client.forMainnet(); - break; - case "TESTNET": - this.client = Client.forTestnet(); - break; - case "PREVIEWNET": - this.client = Client.forPreviewnet(); - break; - default: - throw "Illegal argument for network."; - } - - // Set the operator account ID and operator private key - this.client.setOperator(this.operatorId, this.operatorKey); - - // If identity network is provided as environment variable read from there, otherwise setup new one: - const abJson = EXISTING_ADDRESS_BOOK_JSON; - const abFileId = EXISTING_ADDRESS_BOOK_FILE_ID; - if (!(abJson) || !(abFileId)) { - await this.setupIdentityNetwork(); - } else { - const addressBook = AddressBook.fromJson(abJson, FileId.fromString(abFileId)); - this.didNetwork = HcsIdentityNetwork.fromAddressBook(this.network, addressBook); - } - } - - async setupIdentityNetwork() { - const appnetName = "Test Identity SDK appnet"; - const didServerUrl = "http://localhost:3000/api/v1"; - const didTopicMemo = "Test Identity SDK appnet DID topic"; - const vcTopicMemo = "Test Identity SDK appnet VC topic"; - - this.didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(this.network) - .setAppnetName(appnetName) - .addAppnetDidServer(didServerUrl) - .setPublicKey(this.operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .execute(this.client); - console.info("New identity network created: " + appnetName); - console.info("Sleeping 10s to allow propagation of new topics to mirror node"); - - await sleep(10000); + operatorId; + operatorKey; + network; + didNetwork; + client; + + /** + * Initialize hedera clients and accounts. + */ + // BeforeAll + async setup() { + this.operatorId = AccountId.fromString(OPERATOR_ID); + this.operatorKey = PrivateKey.fromString(OPERATOR_KEY); + this.network = NETWORK; + + // Build Hedera testnet client + switch (this.network.toUpperCase()) { + case "MAINNET": + this.client = Client.forMainnet(); + break; + case "TESTNET": + this.client = Client.forTestnet(); + break; + case "PREVIEWNET": + this.client = Client.forPreviewnet(); + break; + default: + throw "Illegal argument for network."; } - //AfterAll - cleanup() { - try { - if (this.client != null) { - this.client.close(); - } - - if (this.client != null) { - this.client.close(); - } - } catch (e) { - // ignore - } + // Set the operator account ID and operator private key + this.client.setOperator(this.operatorId, this.operatorKey); + + await this.setupIdentityNetwork(); + } + + async setupIdentityNetwork() { + const appnetName = "Test Identity SDK appnet"; + const didServerUrl = "http://localhost:3000/api/v1"; + const didTopicMemo = "Test Identity SDK appnet DID topic"; + const vcTopicMemo = "Test Identity SDK appnet VC topic"; + + this.didNetwork = await new HcsIdentityNetworkBuilder() + .setNetwork(this.network) + .setPublicKey(this.operatorKey.publicKey) + .setMaxTransactionFee(FEE) + .setDidTopicMemo(didTopicMemo) + .setVCTopicMemo(vcTopicMemo) + .setDidTopicId(EXISTING_DID_TOPIC_ID) + .setVCTopicId(EXISTING_VC_TOPIC_ID) + .execute(this.client); + console.info("New identity network created: " + appnetName); + console.info( + "Sleeping 10s to allow propagation of new topics to mirror node" + ); + + await sleep(10000); + } + + //AfterAll + cleanup() { + try { + if (this.client != null) { + this.client.close(); + } + + if (this.client != null) { + this.client.close(); + } + } catch (e) { + // ignore } - - async sendDidTransaction(did, didDocumentJson, operation, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork.createDidTransaction(operation) - .setDidDocument(didDocumentJson) - .signMessage(doc => did.getPrivateDidRootKey().sign(doc)) - .buildAndSignTransaction(tx => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed(msg => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined - } + } + + async sendDidTransaction(did, didDocumentJson, operation, onError) { + const messageRef = []; + + // Build and execute transaction + await this.didNetwork + .createDidTransaction(operation) + .setDidDocument(didDocumentJson) + .signMessage((doc) => did.getPrivateDidRootKey().sign(doc)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) + .onMessageConfirmed((msg) => messageRef.push(msg)) + .onError(onError) + .execute(this.client); + + // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. + await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); + + try { + return messageRef[0]; + } catch (error) { + return undefined; } - - async resolveDid(didString, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork.getDidResolver() - .addDid(didString) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished(m => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(didString); - } catch (error) { - return undefined - } + } + + async resolveDid(didString, onError) { + const mapRef = []; + + // Now resolve the DID. + this.didNetwork + .getDidResolver() + .addDid(didString) + .setTimeout(NO_MORE_MESSAGES_TIMEOUT) + .onError(onError) + .whenFinished((m) => mapRef.push(m)) + .execute(this.client); + + // Wait until mirror node resolves the DID. + await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); + + try { + return mapRef[0].get(didString); + } catch (error) { + return undefined; } - - async sendVcTransaction(operation, credentialHash, signingKey, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork.createVcTransaction(operation, credentialHash, signingKey.publicKey) - .signMessage(doc => signingKey.sign(doc)) - .buildAndSignTransaction(tx => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed(msg => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined - } + } + + async sendVcTransaction(operation, credentialHash, signingKey, onError) { + const messageRef = []; + + // Build and execute transaction + await this.didNetwork + .createVcTransaction(operation, credentialHash, signingKey.publicKey) + .signMessage((doc) => signingKey.sign(doc)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) + .onMessageConfirmed((msg) => messageRef.push(msg)) + .onError(onError) + .execute(this.client); + + // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. + await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); + + try { + return messageRef[0]; + } catch (error) { + return undefined; } - - async resolveVcStatus(credentialHash, provider, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork.getVcStatusResolver(provider) - .addCredentialHash(credentialHash) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished(m => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(credentialHash); - } catch (error) { - return undefined - } + } + + async resolveVcStatus(credentialHash, provider, onError) { + const mapRef = []; + + // Now resolve the DID. + this.didNetwork + .getVcStatusResolver(provider) + .addCredentialHash(credentialHash) + .setTimeout(NO_MORE_MESSAGES_TIMEOUT) + .onError(onError) + .whenFinished((m) => mapRef.push(m)) + .execute(this.client); + + // Wait until mirror node resolves the DID. + await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); + + try { + return mapRef[0].get(credentialHash); + } catch (error) { + return undefined; } + } } exports.NetworkReadyTestBase = NetworkReadyTestBase; From 439fefe1f9aee0ab40f94a6fed03ccbb2b6ac022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 27 Jan 2022 12:35:50 +0100 Subject: [PATCH 014/133] Remove left references to the AddressBook, make sure package builds, fix failing tests --- .../hcs/hcs-identity-network-builder.ts | 45 ++++++++++++------- src/identity/hcs/hcs-identity-network.ts | 15 +++---- test/vc/hcs-vc-document-base-test.js | 4 +- test/vc/hcs-vc-document-operations-test.js | 4 +- test/vc/hcs-vc-encryption-test.js | 4 +- 5 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts index b174675..b885e70 100644 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ b/src/identity/hcs/hcs-identity-network-builder.ts @@ -1,31 +1,30 @@ -import {Client, Hbar, PublicKey, TopicCreateTransaction, TopicId} from "@hashgraph/sdk"; -import {HcsIdentityNetwork} from "./hcs-identity-network"; +import { Client, FileCreateTransaction, Hbar, PublicKey, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; +import { HcsIdentityNetwork } from "./hcs-identity-network"; export class HcsIdentityNetworkBuilder { + private appnetName: string; private didTopicId: TopicId; private vcTopicId: TopicId; private network: string; + private didServers: string[]; private publicKey: PublicKey; private maxTransactionFee: Hbar = new Hbar(2); private didTopicMemo: string = ''; private vcTopicMemo: string = ''; public async execute(client: Client): Promise { - - - if(!this.didTopicId){ - const didTopicCreateTransaction = new TopicCreateTransaction() + const didTopicCreateTransaction = new TopicCreateTransaction() .setMaxTransactionFee(this.maxTransactionFee) - .setTopicMemo(this.didTopicMemo); - if (this.publicKey) { - didTopicCreateTransaction.setAdminKey(this.publicKey); - } - const didTxId = await didTopicCreateTransaction.execute(client); - this.didTopicId = (await didTxId.getReceipt(client)).topicId; + .setTopicMemo(this.didTopicMemo); + + if (this.publicKey) { + didTopicCreateTransaction.setAdminKey(this.publicKey); } - - if(!this.vcTopicId){ - const vcTopicCreateTransaction = new TopicCreateTransaction() + + const didTxId = await didTopicCreateTransaction.execute(client); + this.didTopicId = (await didTxId.getReceipt(client)).topicId; + + const vcTopicCreateTransaction = new TopicCreateTransaction() .setMaxTransactionFee(this.maxTransactionFee) .setTopicMemo(this.vcTopicMemo); @@ -35,12 +34,26 @@ export class HcsIdentityNetworkBuilder { const vcTxId = await vcTopicCreateTransaction.execute(client); this.vcTopicId = (await vcTxId.getReceipt(client)).topicId; + + return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId, this.vcTopicId); + } + + public addAppnetDidServer(serverUrl: string): HcsIdentityNetworkBuilder { + if (!this.didServers) { + this.didServers = []; } + if (this.didServers.indexOf(serverUrl) == -1) { + this.didServers.push(serverUrl); + } - return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId, this.vcTopicId); + return this; } + public setAppnetName(appnetName: string): HcsIdentityNetworkBuilder { + this.appnetName = appnetName; + return this; + } public setDidTopicMemo(didTopicMemo: string): HcsIdentityNetworkBuilder { this.didTopicMemo = didTopicMemo; diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 2342e09..80d0d9b 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -46,13 +46,13 @@ export class HcsIdentityNetwork { * @param network The Hedera network. * @return The identity network instance. */ - public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { - const result = new HcsIdentityNetwork(); - result.network = network; - result.didTopicId = didTopicId; - result.vcTopicId = vcTopicId; - return result; - } + public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { + const result = new HcsIdentityNetwork(); + result.network = network; + result.didTopicId = didTopicId; + result.vcTopicId = vcTopicId; + return result; + } /** * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. @@ -168,7 +168,6 @@ export class HcsIdentityNetwork { * Generates a new DID from the given public DID root key. * * @param publicKey A DID root key. - * @param withTid Indicates if DID topic ID should be added to the DID as tid parameter. * @return A newly generated DID. */ public generateDid(publicKey: PublicKey): HcsDid; diff --git a/test/vc/hcs-vc-document-base-test.js b/test/vc/hcs-vc-document-base-test.js index fac0dd6..6adec15 100644 --- a/test/vc/hcs-vc-document-base-test.js +++ b/test/vc/hcs-vc-document-base-test.js @@ -25,8 +25,8 @@ describe("HcsVcDocumentBaseTest", function () { this.timeout(60000); await network.setup(); - issuer = network.didNetwork.generateDid(false); - owner = network.didNetwork.generateDid(false); + issuer = network.didNetwork.generateDid(); + owner = network.didNetwork.generateDid(); }); after(async function () { diff --git a/test/vc/hcs-vc-document-operations-test.js b/test/vc/hcs-vc-document-operations-test.js index abf0372..8f18804 100644 --- a/test/vc/hcs-vc-document-operations-test.js +++ b/test/vc/hcs-vc-document-operations-test.js @@ -27,10 +27,10 @@ describe("HcsVcDocumentOperationsTest", function () { this.timeout(60000); await network.setup(); - issuer = network.didNetwork.generateDid(false); + issuer = network.didNetwork.generateDid(); issuersPrivateKey = issuer.getPrivateDidRootKey(); - owner = network.didNetwork.generateDid(false); + owner = network.didNetwork.generateDid(); // For tests only we do not need to submit DID documents, as we will not validate them. // final DidMethodOperation op = DidMethodOperation.CREATE; diff --git a/test/vc/hcs-vc-encryption-test.js b/test/vc/hcs-vc-encryption-test.js index 980e9c0..413e804 100644 --- a/test/vc/hcs-vc-encryption-test.js +++ b/test/vc/hcs-vc-encryption-test.js @@ -44,10 +44,10 @@ describe("HcsVcEncryptionTest", function () { this.timeout(120000); await network.setup(); - issuer = network.didNetwork.generateDid(false); + issuer = network.didNetwork.generateDid(); issuersPrivateKey = issuer.getPrivateDidRootKey(); - owner = network.didNetwork.generateDid(false); + owner = network.didNetwork.generateDid(); // For tests only we do not need to submit DID documents, as we will not validate them. // final DidMethodOperation op = DidMethodOperation.CREATE; From b06729fe76ad47f01916aa21d4de375d606a11d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 27 Jan 2022 16:29:17 +0100 Subject: [PATCH 015/133] Add basic prettier configuration and format the source --- .prettierignore | 1 + .prettierrc.json | 6 + package-lock.json | 19 + package.json | 1 + src/identity/did-document-base.ts | 26 +- src/identity/did-method-operation.ts | 6 +- src/identity/did-parser.ts | 10 +- src/identity/did-syntax.ts | 18 +- src/identity/hcs/did/hcs-did-message.ts | 11 +- src/identity/hcs/did/hcs-did-resolver.ts | 27 +- src/identity/hcs/did/hcs-did-root-key.ts | 14 +- .../hcs/did/hcs-did-topic-listener.ts | 1 - src/identity/hcs/did/hcs-did-transaction.ts | 30 +- src/identity/hcs/did/hcs-did.ts | 439 +++++++++--------- .../hcs/hcs-identity-network-builder.ts | 4 +- src/identity/hcs/hcs-identity-network.ts | 62 +-- src/identity/hcs/json-class.ts | 2 +- src/identity/hcs/message-envelope.ts | 30 +- src/identity/hcs/message-listener.ts | 6 +- src/identity/hcs/message-mode.ts | 4 +- src/identity/hcs/message-resolver.ts | 15 +- src/identity/hcs/message-transaction.ts | 37 +- src/identity/hcs/message.interface.ts | 2 - src/identity/hcs/message.ts | 5 +- .../serializable-mirror-consensus-response.ts | 20 +- src/identity/hcs/vc/credential-subject.ts | 9 +- src/identity/hcs/vc/hcs-vc-document-base.ts | 46 +- .../hcs/vc/hcs-vc-document-hash-base.ts | 25 +- .../hcs/vc/hcs-vc-document-json-properties.ts | 20 +- src/identity/hcs/vc/hcs-vc-message.ts | 2 +- src/identity/hcs/vc/hcs-vc-operation.ts | 8 +- src/identity/hcs/vc/hcs-vc-status-resolver.ts | 34 +- src/identity/hcs/vc/hcs-vc-topic-listener.ts | 2 +- src/identity/hcs/vc/hcs-vc-transaction.ts | 40 +- src/identity/hcs/vc/issuer.ts | 11 +- src/identity/hedera-did.ts | 6 +- src/index.ts | 74 +-- src/utils/arrays-utils.ts | 9 +- src/utils/hashing.ts | 16 +- src/utils/sleep.ts | 6 +- src/utils/timestamp-utils.ts | 4 +- src/utils/validator.ts | 2 +- test/aes-encryption-util.js | 25 +- test/did-document-base.js | 287 ++++++------ test/did/hcs-did-message.js | 273 +++++------ test/did/hcs-did-method-operations.js | 301 ++++++------ test/did/hcs-did-root-key.js | 64 ++- test/did/hcs-did.js | 149 +++--- test/hcs-identity-network.js | 213 ++++----- test/network-ready-test-base.js | 348 +++++++------- test/variables.js | 24 +- test/vc/demo-access-credential.js | 4 +- .../vc/demo-verifiable-credential-document.js | 6 +- test/vc/hcs-vc-document-base-test.js | 34 +- test/vc/hcs-vc-document-operations-test.js | 37 +- test/vc/hcs-vc-encryption-test.js | 76 ++- 56 files changed, 1389 insertions(+), 1562 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..838458f --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +/dist/ \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..246059f --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": false, + "printWidth": 120, + "tabWidth": 4, + "trailingComma": "es5" +} diff --git a/package-lock.json b/package-lock.json index 38d41b1..a97603e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "chai": "^4.3.4", "mocha": "^9.0.1", "nodemon": "^2.0.7", + "prettier": "2.5.1", "typescript": "^4.3.2" } }, @@ -1644,6 +1645,18 @@ "node": ">=4" } }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", @@ -3536,6 +3549,12 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, "protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", diff --git a/package.json b/package.json index 0aad9dd..3db515d 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "chai": "^4.3.4", "mocha": "^9.0.1", "nodemon": "^2.0.7", + "prettier": "2.5.1", "typescript": "^4.3.2" }, "dependencies": { diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index 7aff84f..fa026d3 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -1,6 +1,6 @@ -import {DidSyntax} from "./did-syntax"; -import {DidDocumentJsonProperties} from "./did-document-json-properties"; -import {HcsDidRootKey} from "./hcs/did/hcs-did-root-key"; +import { DidSyntax } from "./did-syntax"; +import { DidDocumentJsonProperties } from "./did-document-json-properties"; +import { HcsDidRootKey } from "./hcs/did/hcs-did-root-key"; export class DidDocumentBase { private id: string; @@ -26,8 +26,10 @@ export class DidDocumentBase { throw new Error(`${root[DidDocumentJsonProperties.VERIFICATION_METHOD]} is not an array`); } for (let publicKeyObj of root[DidDocumentJsonProperties.VERIFICATION_METHOD]) { - if (publicKeyObj.hasOwnProperty(DidDocumentJsonProperties.ID) && (publicKeyObj[DidDocumentJsonProperties.ID] === - (result.getId() + HcsDidRootKey.DID_ROOT_KEY_NAME))) { + if ( + publicKeyObj.hasOwnProperty(DidDocumentJsonProperties.ID) && + publicKeyObj[DidDocumentJsonProperties.ID] === result.getId() + HcsDidRootKey.DID_ROOT_KEY_NAME + ) { const didRootKey = HcsDidRootKey.fromJsonTree(publicKeyObj); result.setDidRootKey(didRootKey); break; @@ -35,7 +37,7 @@ export class DidDocumentBase { } } } catch (e) { - throw new Error('Given JSON string is not a valid DID document ' + e.message); + throw new Error("Given JSON string is not a valid DID document " + e.message); } return result; @@ -54,7 +56,7 @@ export class DidDocumentBase { } public setDidRootKey(rootKey: HcsDidRootKey): void { - this.didRootKey = rootKey + this.didRootKey = rootKey; } public toJsonTree(): any { @@ -66,14 +68,10 @@ export class DidDocumentBase { * TODO: investigate, should we just leave such cases crash? */ if (this.didRootKey) { - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ - this.didRootKey.getId() - ]; - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [ - this.didRootKey.toJsonTree() - ]; + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; } else { - console.warn('WARNING: didRootKey is not set for the document') + console.warn("WARNING: didRootKey is not set for the document"); } return rootObject; diff --git a/src/identity/did-method-operation.ts b/src/identity/did-method-operation.ts index 0b794cf..47c05ca 100644 --- a/src/identity/did-method-operation.ts +++ b/src/identity/did-method-operation.ts @@ -1,5 +1,5 @@ export enum DidMethodOperation { - CREATE = 'create', - UPDATE = 'update', - DELETE = 'delete' + CREATE = "create", + UPDATE = "update", + DELETE = "delete", } diff --git a/src/identity/did-parser.ts b/src/identity/did-parser.ts index 6ddccb4..6617b7a 100644 --- a/src/identity/did-parser.ts +++ b/src/identity/did-parser.ts @@ -1,6 +1,6 @@ -import {HederaDid} from "./hedera-did"; -import {DidSyntax} from "./did-syntax"; -import {HcsDid} from "./hcs/did/hcs-did"; +import { HederaDid } from "./hedera-did"; +import { DidSyntax } from "./did-syntax"; +import { HcsDid } from "./hcs/did/hcs-did"; /** * Parses the given DID string into it's corresponding Hedera DID object. @@ -12,13 +12,13 @@ export class DidParser { public static parse(didString: string): HederaDid { const methodIndex = DidSyntax.DID_PREFIX.length + 1; if (!didString || didString.length <= methodIndex) { - throw new Error('DID string cannot be null'); + throw new Error("DID string cannot be null"); } if (didString.startsWith(HcsDid.DID_METHOD + DidSyntax.DID_METHOD_SEPARATOR, methodIndex)) { return HcsDid.fromString(didString); } else { - throw new Error('DID string is invalid.'); + throw new Error("DID string is invalid."); } } } diff --git a/src/identity/did-syntax.ts b/src/identity/did-syntax.ts index 410f709..301ba0b 100644 --- a/src/identity/did-syntax.ts +++ b/src/identity/did-syntax.ts @@ -1,12 +1,12 @@ export module DidSyntax { - export const DID_PREFIX = "did"; - export const DID_DOCUMENT_CONTEXT = "https://www.w3.org/ns/did/v1"; - export const DID_METHOD_SEPARATOR = ":"; - export const DID_TOPIC_SEPARATOR = "_"; - export const HEDERA_NETWORK_MAINNET = "mainnet"; - export const HEDERA_NETWORK_TESTNET = "testnet"; + export const DID_PREFIX = "did"; + export const DID_DOCUMENT_CONTEXT = "https://www.w3.org/ns/did/v1"; + export const DID_METHOD_SEPARATOR = ":"; + export const DID_TOPIC_SEPARATOR = "_"; + export const HEDERA_NETWORK_MAINNET = "mainnet"; + export const HEDERA_NETWORK_TESTNET = "testnet"; - export enum Method { - HEDERA_HCS = "hedera", - } + export enum Method { + HEDERA_HCS = "hedera", + } } diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 2498a25..2400f1f 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -147,7 +147,11 @@ export class HcsDidMessage extends Message { } // Verify that the message was sent to the right topic, if the DID contains the topic - if (!!didTopicId && !!hcsDid.getDidTopicId() && (didTopicId.toString() != hcsDid.getDidTopicId().toString())) { + if ( + !!didTopicId && + !!hcsDid.getDidTopicId() && + didTopicId.toString() != hcsDid.getDidTopicId().toString() + ) { return false; } } catch (e) { @@ -214,7 +218,10 @@ export class HcsDidMessage extends Message { * @param operation The operation on DID document. * @return The HCS message wrapped in an envelope for the given DID document and method operation. */ - public static fromDidDocumentJson(didDocumentJson: string, operation: DidMethodOperation): MessageEnvelope { + public static fromDidDocumentJson( + didDocumentJson: string, + operation: DidMethodOperation + ): MessageEnvelope { const didDocumentBase: DidDocumentBase = DidDocumentBase.fromJson(didDocumentJson); const didDocumentBase64 = Hashing.base64.encode(didDocumentJson); const message: HcsDidMessage = new HcsDidMessage(operation, didDocumentBase.getId(), didDocumentBase64); diff --git a/src/identity/hcs/did/hcs-did-resolver.ts b/src/identity/hcs/did/hcs-did-resolver.ts index 9755eca..df3c5e5 100644 --- a/src/identity/hcs/did/hcs-did-resolver.ts +++ b/src/identity/hcs/did/hcs-did-resolver.ts @@ -21,11 +21,11 @@ export class HcsDidResolver extends MessageResolver { } /** - * Adds a DID to resolve. - * - * @param did The DID string. - * @return This resolver instance. - */ + * Adds a DID to resolve. + * + * @param did The DID string. + * @return This resolver instance. + */ public addDid(did: string): HcsDidResolver { if (did != null) { this.results.set(did, null); @@ -41,7 +41,7 @@ export class HcsDidResolver extends MessageResolver { */ public addDids(dids: string[]): HcsDidResolver { if (dids) { - dids.forEach(d => this.addDid(d)); + dids.forEach((d) => this.addDid(d)); } return this; } @@ -56,16 +56,11 @@ export class HcsDidResolver extends MessageResolver { // Also skip messages that are older than the once collected or if we already have a DELETE message const existing: MessageEnvelope = this.results.get(message.getDid()); - const chackOperation = ( - (existing != null) && - ( - (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp())) || - ( - DidMethodOperation.DELETE == (existing.open().getOperation()) && - DidMethodOperation.DELETE != (message.getOperation()) - ) - ) - ) + const chackOperation = + existing != null && + (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || + (DidMethodOperation.DELETE == existing.open().getOperation() && + DidMethodOperation.DELETE != message.getOperation())); if (chackOperation) { return; } diff --git a/src/identity/hcs/did/hcs-did-root-key.ts b/src/identity/hcs/did/hcs-did-root-key.ts index e25928c..5b83ea6 100644 --- a/src/identity/hcs/did/hcs-did-root-key.ts +++ b/src/identity/hcs/did/hcs-did-root-key.ts @@ -1,14 +1,14 @@ -import {PublicKey} from "@hashgraph/sdk"; +import { PublicKey } from "@hashgraph/sdk"; import bs58 from "bs58"; -import {HcsDid} from "./hcs-did"; +import { HcsDid } from "./hcs-did"; /** * Represents a root key of HCS Identity DID. * That is a public key of type Ed25519VerificationKey2018 compatible with a single publicKey entry of a DID Document. */ export class HcsDidRootKey { - public static DID_ROOT_KEY_NAME = '#did-root-key'; - public static DID_ROOT_KEY_TYPE = 'Ed25519VerificationKey2018'; + public static DID_ROOT_KEY_NAME = "#did-root-key"; + public static DID_ROOT_KEY_TYPE = "Ed25519VerificationKey2018"; private id: string; private type: string; @@ -24,13 +24,13 @@ export class HcsDidRootKey { */ public static fromHcsIdentity(did: HcsDid, didRootKey: PublicKey): HcsDidRootKey { if (!did) { - throw new Error('DID cannot be ' + did); + throw new Error("DID cannot be " + did); } if (!didRootKey) { - throw new Error('DID root key cannot be ' + didRootKey); + throw new Error("DID root key cannot be " + didRootKey); } if (HcsDid.publicKeyToIdString(didRootKey) !== did.getIdString()) { - throw new Error('The specified DID does not correspond to the given DID root key'); + throw new Error("The specified DID does not correspond to the given DID root key"); } const result = new HcsDidRootKey(); result.controller = did.toDid(); diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 5b7c4d4..7e63662 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -56,6 +56,5 @@ export class HcsDidTopicListener extends MessageListener { this.reportInvalidMessage(response, "Exception while validating message: " + err.message); return false; } - } } diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index 9e8b82b..36e79d2 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -1,12 +1,12 @@ -import {MessageTransaction} from "../message-transaction"; -import {HcsDidMessage} from "./hcs-did-message"; -import {DidMethodOperation} from "../../did-method-operation"; -import {PublicKey, TopicId} from "@hashgraph/sdk"; -import {MessageEnvelope} from "../message-envelope"; -import {Validator} from "../../../utils/validator"; -import {MessageListener} from "../message-listener"; -import {HcsDidTopicListener} from "./hcs-did-topic-listener"; -import {Encrypter} from "../message"; +import { MessageTransaction } from "../message-transaction"; +import { HcsDidMessage } from "./hcs-did-message"; +import { DidMethodOperation } from "../../did-method-operation"; +import { PublicKey, TopicId } from "@hashgraph/sdk"; +import { MessageEnvelope } from "../message-envelope"; +import { Validator } from "../../../utils/validator"; +import { MessageListener } from "../message-listener"; +import { HcsDidTopicListener } from "./hcs-did-topic-listener"; +import { Encrypter } from "../message"; /** * The DID document creation, update or deletion transaction. @@ -32,11 +32,7 @@ export class HcsDidTransaction extends MessageTransaction { */ constructor(operation: DidMethodOperation, topicId: TopicId); constructor(...args) { - if ( - (args[0] instanceof MessageEnvelope) && - (args[1] instanceof TopicId) && - (args.length === 2) - ) { + if (args[0] instanceof MessageEnvelope && args[1] instanceof TopicId && args.length === 2) { const [message, topicId] = args; super(topicId, message); this.operation = null; @@ -45,7 +41,7 @@ export class HcsDidTransaction extends MessageTransaction { super(topicId); this.operation = operation; } else { - throw new Error('Invalid arguments') + throw new Error("Invalid arguments"); } } @@ -62,8 +58,8 @@ export class HcsDidTransaction extends MessageTransaction { protected validate(validator: Validator): void { super.validate(validator); - validator.require(!!this.didDocument || !!this.message, 'DID document is mandatory.'); - validator.require(!!this.operation || !!this.message, 'DID method operation is not defined.'); + validator.require(!!this.didDocument || !!this.message, "DID document is mandatory."); + validator.require(!!this.operation || !!this.message, "DID method operation is not defined."); } protected buildMessage(): MessageEnvelope { diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 9b1dac3..ad24445 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -9,253 +9,240 @@ import { HcsDidRootKey } from "./hcs-did-root-key"; * Hedera Decentralized Identifier for Hedera DID Method specification based on HCS. */ export class HcsDid implements HederaDid { - public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; - - private didTopicId: TopicId; - private network: string; - private idString: string; - private did: string; - private didRootKey: PublicKey; - private privateDidRootKey: PrivateKey; - - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param didRootKey The public key from which DID is derived. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); - /** - * Creates a DID instance with private DID root key. - * - * @param network The Hedera DID network. - * @param privateDidRootKey The private DID root key. - * @param didTopicId The appnet's DID topic ID. - */ - constructor( - network: string, - privateDidRootKey: PrivateKey, - didTopicId: TopicId - ); - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param idString The id-string of a DID. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, idString: string, didTopicId: TopicId); - constructor(...args: any[]) { - if ( - typeof args[0] === "string" && - args[1] instanceof PublicKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, didRootKey, didTopicId] = args; - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = didRootKey; - this.idString = HcsDid.publicKeyToIdString(didRootKey); - this.did = this.buildDid(); - - return; + public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; + + private didTopicId: TopicId; + private network: string; + private idString: string; + private did: string; + private didRootKey: PublicKey; + private privateDidRootKey: PrivateKey; + + /** + * Creates a DID instance. + * + * @param network The Hedera DID network. + * @param didRootKey The public key from which DID is derived. + * @param didTopicId The appnet's DID topic ID. + */ + constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); + /** + * Creates a DID instance with private DID root key. + * + * @param network The Hedera DID network. + * @param privateDidRootKey The private DID root key. + * @param didTopicId The appnet's DID topic ID. + */ + constructor(network: string, privateDidRootKey: PrivateKey, didTopicId: TopicId); + /** + * Creates a DID instance. + * + * @param network The Hedera DID network. + * @param idString The id-string of a DID. + * @param didTopicId The appnet's DID topic ID. + */ + constructor(network: string, idString: string, didTopicId: TopicId); + constructor(...args: any[]) { + if ( + typeof args[0] === "string" && + args[1] instanceof PublicKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, didRootKey, didTopicId] = args; + this.didTopicId = didTopicId; + this.network = network; + this.didRootKey = didRootKey; + this.idString = HcsDid.publicKeyToIdString(didRootKey); + this.did = this.buildDid(); + + return; + } + + if ( + typeof args[0] === "string" && + args[1] instanceof PrivateKey && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, privateDidRootKey, didTopicId] = args; + + this.didTopicId = didTopicId; + this.network = network; + this.didRootKey = privateDidRootKey.publicKey; + this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); + this.did = this.buildDid(); + this.privateDidRootKey = privateDidRootKey; + + return; + } + + if ( + typeof args[0] === "string" && + typeof args[1] === "string" && + (args[2] instanceof TopicId || args[2] === undefined) && + args.length === 3 + ) { + const [network, idString, didTopicId] = args; + + this.didTopicId = didTopicId; + this.network = network; + this.idString = idString; + this.did = this.buildDid(); + + return; + } + + throw new Error("Couldn't find constructor"); } - if ( - typeof args[0] === "string" && - args[1] instanceof PrivateKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, privateDidRootKey, didTopicId] = args; - - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = privateDidRootKey.publicKey; - this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); - this.did = this.buildDid(); - this.privateDidRootKey = privateDidRootKey; - - return; - } + /** + * Converts a Hedera DID string into {@link HcsDid} object. + * + * @param didString A Hedera DID string. + * @return {@link HcsDid} object derived from the given Hedera DID string. + */ + public static fromString(didString: string): HcsDid { + if (!didString) { + throw new Error("DID string cannot be null"); + } - if ( - typeof args[0] === "string" && - typeof args[1] === "string" && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, idString, didTopicId] = args; + const [didPart, topicIdPart] = didString.split(DidSyntax.DID_TOPIC_SEPARATOR); - this.didTopicId = didTopicId; - this.network = network; - this.idString = idString; - this.did = this.buildDid(); + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); + } - return; - } + const topicId = TopicId.fromString(topicIdPart); - throw new Error("Couldn't find constructor"); - } - - /** - * Converts a Hedera DID string into {@link HcsDid} object. - * - * @param didString A Hedera DID string. - * @return {@link HcsDid} object derived from the given Hedera DID string. - */ - public static fromString(didString: string): HcsDid { - if (!didString) { - throw new Error("DID string cannot be null"); - } + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); + + if (didParts.shift() !== DidSyntax.DID_PREFIX) { + throw new Error("DID string is invalid: invalid prefix."); + } + + const methodName = didParts.shift(); + if (DidSyntax.Method.HEDERA_HCS !== methodName) { + throw new Error("DID string is invalid: invalid method name: " + methodName); + } + + try { + const networkName = didParts.shift(); + + if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { + throw new Error("Invalid Hedera network."); + } + + const didIdString = didParts.shift(); + + if (didIdString.length < 32 || didParts.shift()) { + throw new Error("DID string is invalid."); + } - const [didPart, topicIdPart] = didString.split( - DidSyntax.DID_TOPIC_SEPARATOR - ); + return new HcsDid(networkName, didIdString, topicId); + } catch (e) { + throw new Error("DID string is invalid. " + e.message); + } + } - if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); + /** + * Generates a random DID root key. + * + * @return A private key of generated public DID root key. + */ + public static generateDidRootKey(): PrivateKey { + return PrivateKey.generate(); } - const topicId = TopicId.fromString(topicIdPart); + /** + * Generates DID document base from the given DID and its root key. + * + * @param didRootKey Public key used to build this DID. + * @return The DID document base. + * @throws IllegalArgumentException In case given DID root key does not match this DID. + */ + public generateDidDocument(): DidDocumentBase { + const result = new DidDocumentBase(this.toDid()); + if (this.didRootKey) { + const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); + result.setDidRootKey(rootKey); + } + + return result; + } - const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); + public getNetwork(): string { + return this.network; + } - if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); + public getMethod(): DidSyntax.Method { + return DidSyntax.Method.HEDERA_HCS; } - const methodName = didParts.shift(); - if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error( - "DID string is invalid: invalid method name: " + methodName - ); + public toString(): string { + return this.did; } - try { - const networkName = didParts.shift(); + public getDidTopicId(): TopicId { + return this.didTopicId; + } - if ( - networkName != DidSyntax.HEDERA_NETWORK_MAINNET && - networkName != DidSyntax.HEDERA_NETWORK_TESTNET - ) { - throw new Error("Invalid Hedera network."); - } + public getIdString(): string { + return this.idString; + } - const didIdString = didParts.shift(); + public toDid() { + return this.did; + } - if (didIdString.length < 32 || didParts.shift()) { - throw new Error("DID string is invalid."); - } + /** + * Constructs DID string from the instance of DID object. + * + * @return A DID string. + */ + private buildDid(): string { + const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); + + let ret: string; + ret = + DidSyntax.DID_PREFIX + + DidSyntax.DID_METHOD_SEPARATOR + + methodNetwork + + DidSyntax.DID_METHOD_SEPARATOR + + this.idString + + DidSyntax.DID_TOPIC_SEPARATOR + + this.didTopicId.toString(); + + return ret; + } - return new HcsDid(networkName, didIdString, topicId); - } catch (e) { - throw new Error("DID string is invalid. " + e.message); + /** + * Constructs an id-string of a DID from a given public key. + * + * @param didRootKey Public Key from which the DID is created. + * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. + */ + public static publicKeyToIdString(didRootKey: PublicKey): string { + return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); } - } - - /** - * Generates a random DID root key. - * - * @return A private key of generated public DID root key. - */ - public static generateDidRootKey(): PrivateKey { - return PrivateKey.generate(); - } - - /** - * Generates DID document base from the given DID and its root key. - * - * @param didRootKey Public key used to build this DID. - * @return The DID document base. - * @throws IllegalArgumentException In case given DID root key does not match this DID. - */ - public generateDidDocument(): DidDocumentBase { - const result = new DidDocumentBase(this.toDid()); - if (this.didRootKey) { - const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); - result.setDidRootKey(rootKey); + + /** + * Returns a private key of DID root key. + * This is only available if it was provided during {@link HcsDid} construction. + * + * @return The private key of DID root key. + */ + public getPrivateDidRootKey(): PrivateKey { + return this.privateDidRootKey; } - return result; - } - - public getNetwork(): string { - return this.network; - } - - public getMethod(): DidSyntax.Method { - return DidSyntax.Method.HEDERA_HCS; - } - - public toString(): string { - return this.did; - } - - public getDidTopicId(): TopicId { - return this.didTopicId; - } - - public getIdString(): string { - return this.idString; - } - - public toDid() { - return this.did; - } - - /** - * Constructs DID string from the instance of DID object. - * - * @return A DID string. - */ - private buildDid(): string { - const methodNetwork = [this.getMethod().toString(), this.network].join( - DidSyntax.DID_METHOD_SEPARATOR - ); - - let ret: string; - ret = - DidSyntax.DID_PREFIX + - DidSyntax.DID_METHOD_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - this.idString + - DidSyntax.DID_TOPIC_SEPARATOR + - this.didTopicId.toString(); - - return ret; - } - - /** - * Constructs an id-string of a DID from a given public key. - * - * @param didRootKey Public Key from which the DID is created. - * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. - */ - public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); - } - - /** - * Returns a private key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPrivateDidRootKey(): PrivateKey { - return this.privateDidRootKey; - } - - /** - * Returns a public key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPublicDidRootKey(): PublicKey { - return this.didRootKey; - } + /** + * Returns a public key of DID root key. + * This is only available if it was provided during {@link HcsDid} construction. + * + * @return The private key of DID root key. + */ + public getPublicDidRootKey(): PublicKey { + return this.didRootKey; + } } diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts index b885e70..ef72b08 100644 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ b/src/identity/hcs/hcs-identity-network-builder.ts @@ -9,8 +9,8 @@ export class HcsIdentityNetworkBuilder { private didServers: string[]; private publicKey: PublicKey; private maxTransactionFee: Hbar = new Hbar(2); - private didTopicMemo: string = ''; - private vcTopicMemo: string = ''; + private didTopicMemo: string = ""; + private vcTopicMemo: string = ""; public async execute(client: Client): Promise { const didTopicCreateTransaction = new TopicCreateTransaction() diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 80d0d9b..103a5b5 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -16,7 +16,6 @@ import { HcsVcTransaction } from "./vc/hcs-vc-transaction"; * Identity network based on Hedera HCS DID method specification. */ export class HcsIdentityNetwork { - /** * The Hedera network on which this identity network is created. */ @@ -26,7 +25,6 @@ export class HcsIdentityNetwork { private vcTopicId: TopicId; - /** * Instantiates existing identity network using a DID generated for this network. * @@ -40,17 +38,21 @@ export class HcsIdentityNetwork { return result; } - /** + /** * Instantiates existing identity network using a DID generated for this network. * * @param network The Hedera network. * @return The identity network instance. */ - public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId, vcTopicId: TopicId): Promise { + public static async fromHcsDidAndVCTopic( + network: string, + didTopicId: TopicId, + vcTopicId: TopicId + ): Promise { const result = new HcsIdentityNetwork(); result.network = network; result.didTopicId = didTopicId; - result.vcTopicId = vcTopicId; + result.vcTopicId = vcTopicId; return result; } @@ -71,20 +73,17 @@ export class HcsIdentityNetwork { public createDidTransaction(message: MessageEnvelope): HcsDidTransaction; public createDidTransaction(...args): HcsDidTransaction { - if ( - (args.length === 1) && - (args[0] instanceof MessageEnvelope) - ) { + if (args.length === 1 && args[0] instanceof MessageEnvelope) { const [message] = args; return new HcsDidTransaction(message, this.didTopicId); } else if ( - (args.length === 1) + args.length === 1 // (args[0] instanceof DidMethodOperation) ) { const [operation] = args; return new HcsDidTransaction(operation, this.didTopicId); } else { - throw new Error('Invalid arguments'); + throw new Error("Invalid arguments"); } } @@ -96,7 +95,11 @@ export class HcsIdentityNetwork { * @param signerPublicKey Public key of the signer (issuer). * @return The transaction instance. */ - public createVcTransaction(operation: HcsVcOperation, credentialHash: string, signerPublicKey: PublicKey): HcsVcTransaction; + public createVcTransaction( + operation: HcsVcOperation, + credentialHash: string, + signerPublicKey: PublicKey + ): HcsVcTransaction; /** * Instantiates a {@link HcsVcTransaction} to perform the specified operation on the VC document status. @@ -109,22 +112,18 @@ export class HcsIdentityNetwork { public createVcTransaction(...args): HcsVcTransaction { if ( - (args.length === 3) && + args.length === 3 && // (args[0] instanceof HcsVcOperation) && - (typeof args[1] === 'string') && - (args[2] instanceof PublicKey) + typeof args[1] === "string" && + args[2] instanceof PublicKey ) { const [operation, credentialHash, signerPublicKey] = args; return new HcsVcTransaction(this.vcTopicId, operation, credentialHash, signerPublicKey); - } else if ( - (args.length === 2) && - (args[0] instanceof MessageEnvelope) && - (args[1] instanceof PublicKey) - ) { + } else if (args.length === 2 && args[0] instanceof MessageEnvelope && args[1] instanceof PublicKey) { const [message, signerPublicKey] = args; return new HcsVcTransaction(this.vcTopicId, message, signerPublicKey); } else { - throw new Error('Invalid arguments'); + throw new Error("Invalid arguments"); } } @@ -172,21 +171,13 @@ export class HcsIdentityNetwork { */ public generateDid(publicKey: PublicKey): HcsDid; public generateDid(...args): HcsDid { - if ( - (args.length === 0) - ) { + if (args.length === 0) { const privateKey = HcsDid.generateDidRootKey(); return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); - } else if ( - (args.length === 1) && - (args[0] instanceof PublicKey) - ) { + } else if (args.length === 1 && args[0] instanceof PublicKey) { const [publicKey] = args; return new HcsDid(this.getNetwork(), publicKey, this.didTopicId); - } else if ( - (args.length === 1) && - (args[0] instanceof PrivateKey) - ) { + } else if (args.length === 1 && args[0] instanceof PrivateKey) { const [privateKey] = args; return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); } @@ -201,7 +192,6 @@ export class HcsIdentityNetwork { return new HcsDidResolver(this.didTopicId); } - /** * Returns a DID topic listener for this network. * @@ -211,7 +201,6 @@ export class HcsIdentityNetwork { return new HcsDidTopicListener(this.didTopicId); } - /** * Returns a VC status resolver for this network. * @@ -236,7 +225,7 @@ export class HcsIdentityNetwork { const [publicKeysProvider] = args; return new HcsVcStatusResolver(this.vcTopicId, publicKeysProvider); } else { - throw Error('Invalid arguments'); + throw Error("Invalid arguments"); } } @@ -264,8 +253,7 @@ export class HcsIdentityNetwork { const [publicKeysProvider] = args; return new HcsVcTopicListener(this.vcTopicId, publicKeysProvider); } else { - throw new Error('Invalid arguments'); + throw new Error("Invalid arguments"); } } - } diff --git a/src/identity/hcs/json-class.ts b/src/identity/hcs/json-class.ts index c04917a..41739b5 100644 --- a/src/identity/hcs/json-class.ts +++ b/src/identity/hcs/json-class.ts @@ -1,3 +1,3 @@ export type JsonClass = { fromJsonTree(json: any, result?: U): U; -} \ No newline at end of file +}; diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 3cafc89..f228df5 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -14,8 +14,8 @@ export type SignFunction = (message: Uint8Array) => Uint8Array; * The envelope for Hedera identity messages sent to HCS DID or VC topics. */ export class MessageEnvelope { - private static MESSAGE_KEY = 'message'; - private static SIGNATURE_KEY = 'signature'; + private static MESSAGE_KEY = "message"; + private static SIGNATURE_KEY = "signature"; private static serialVersionUID = Long.fromInt(1); @@ -28,7 +28,7 @@ export class MessageEnvelope { return null; } return this.message.toJSON(); - }; + } protected decryptedMessage: T; protected mirrorResponse: SerializableMirrorConsensusResponse; @@ -42,18 +42,16 @@ export class MessageEnvelope { constructor(...args: any[]) { if (args.length === 0) { // do nothing - } - else if (args.length === 1) { + } else if (args.length === 1) { const [message] = args; this.message = message; this.mode = MessageMode.PLAIN; } else { - throw new Error('Wrong arguments passed to constructor'); + throw new Error("Wrong arguments passed to constructor"); } } - /** * Signs this message envelope with the given signing function. * @@ -62,11 +60,11 @@ export class MessageEnvelope { */ public sign(signer: SignFunction): Uint8Array { if (!signer) { - throw new Error('Signing function is not provided.'); + throw new Error("Signing function is not provided."); } if (this.signature) { - throw new Error('Message is already signed.'); + throw new Error("Message is already signed."); } const msgBytes = ArraysUtils.fromString(this.message.toJSON()); @@ -105,7 +103,10 @@ export class MessageEnvelope { * @param messageClass Class type of the message inside envelope. * @return The {@link MessageEnvelope}. */ - public static fromMirrorResponse(response: TopicMessage, messageClass: JsonClass): MessageEnvelope { + public static fromMirrorResponse( + response: TopicMessage, + messageClass: JsonClass + ): MessageEnvelope { const msgJson = ArraysUtils.toString(response.contents); const result = MessageEnvelope.fromJson(msgJson, messageClass); result.mirrorResponse = new SerializableMirrorConsensusResponse(response); @@ -113,7 +114,6 @@ export class MessageEnvelope { return result; } - /** * Converts a VC topic message from a JSON string into object instance. * @@ -124,7 +124,7 @@ export class MessageEnvelope { */ public static fromJson(json: string, messageClass: JsonClass): MessageEnvelope { const result = new MessageEnvelope(); - const root = JSON.parse(json) + const root = JSON.parse(json); result.mode = root.mode; result.signature = root[MessageEnvelope.SIGNATURE_KEY]; if (root.hasOwnProperty(MessageEnvelope.MESSAGE_KEY)) { @@ -135,7 +135,6 @@ export class MessageEnvelope { return result; } - /** * Encrypts the message in this envelope and returns its encrypted instance. * @@ -144,7 +143,7 @@ export class MessageEnvelope { */ public encrypt(encrypter: Encrypter): MessageEnvelope { if (!encrypter) { - throw new Error('The encryption function is not provided.'); + throw new Error("The encryption function is not provided."); } this.decryptedMessage = this.message; @@ -185,7 +184,6 @@ export class MessageEnvelope { return publicKey.verify(messageBytes, signatureToVerify); } - /** * Opens a message in this envelope. * If the message is encrypted, the given decrypter will be used first to decrypt it. @@ -215,7 +213,7 @@ export class MessageEnvelope { } public getConsensusTimestamp(): Timestamp { - return (!this.mirrorResponse) ? null : this.mirrorResponse.consensusTimestamp; + return !this.mirrorResponse ? null : this.mirrorResponse.consensusTimestamp; } public getMode(): MessageMode { diff --git a/src/identity/hcs/message-listener.ts b/src/identity/hcs/message-listener.ts index a9c691a..882bb36 100644 --- a/src/identity/hcs/message-listener.ts +++ b/src/identity/hcs/message-listener.ts @@ -1,9 +1,9 @@ -import { Decrypter, Message } from "./message"; import { Client, Timestamp, TopicId, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; import SubscriptionHandle from "@hashgraph/sdk/lib/topic/SubscriptionHandle"; +import Long from "long"; +import { Decrypter, Message } from "./message"; import { MessageEnvelope } from "./message-envelope"; import { MessageMode } from "./message-mode"; -import Long from "long"; /** * A listener of confirmed messages from a HCS identity topic. @@ -116,7 +116,7 @@ export abstract class MessageListener { return; } - if ((MessageMode.ENCRYPTED === envelope.getMode()) && !this.decrypter) { + if (MessageMode.ENCRYPTED === envelope.getMode() && !this.decrypter) { this.reportInvalidMessage(response, "Message is encrypted and no decryption function was provided"); return; } diff --git a/src/identity/hcs/message-mode.ts b/src/identity/hcs/message-mode.ts index 41322db..6211ef0 100644 --- a/src/identity/hcs/message-mode.ts +++ b/src/identity/hcs/message-mode.ts @@ -1,4 +1,4 @@ export enum MessageMode { - PLAIN = 'plain', - ENCRYPTED = 'encrypted' + PLAIN = "plain", + ENCRYPTED = "encrypted", } diff --git a/src/identity/hcs/message-resolver.ts b/src/identity/hcs/message-resolver.ts index 303eefd..991053a 100644 --- a/src/identity/hcs/message-resolver.ts +++ b/src/identity/hcs/message-resolver.ts @@ -21,7 +21,7 @@ export abstract class MessageResolver { private errorHandler: (input: Error) => void; private decrypter: Decrypter; private existingSignatures: string[]; - private listener: MessageListener + private listener: MessageListener; private noMoreMessagesTimeout: Long; /** @@ -64,7 +64,7 @@ export abstract class MessageResolver { * @param client The mirror node client. */ public execute(client: Client): void { - new Validator().checkValidationErrors('Resolver not executed: ', v => { + new Validator().checkValidationErrors("Resolver not executed: ", (v) => { return this.validate(v); }); @@ -72,12 +72,13 @@ export abstract class MessageResolver { this.listener = this.supplyMessageListener(); - this.listener.setStartTime(new Timestamp(0, 0)) + this.listener + .setStartTime(new Timestamp(0, 0)) .setEndTime(Timestamp.fromDate(new Date())) .setIgnoreErrors(false) .onError(this.errorHandler) .onDecrypt(this.decrypter) - .subscribe(client, msg => { + .subscribe(client, (msg) => { return this.handleMessage(msg); }); @@ -178,8 +179,8 @@ export abstract class MessageResolver { * @param validator The errors validator. */ protected validate(validator: Validator): void { - validator.require(this.results.size > 0, 'Nothing to resolve.'); - validator.require(!!this.topicId, 'Consensus topic ID not defined.'); - validator.require(!!this.resultsHandler, 'Results handler \'whenFinished\' not defined.'); + validator.require(this.results.size > 0, "Nothing to resolve."); + validator.require(!!this.topicId, "Consensus topic ID not defined."); + validator.require(!!this.resultsHandler, "Results handler 'whenFinished' not defined."); } } diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index 7ce5595..a482f1b 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -45,7 +45,7 @@ export abstract class MessageTransaction { this.message = message; this.executed = false; } else { - throw new Error('Invalid arguments'); + throw new Error("Invalid arguments"); } } @@ -150,7 +150,9 @@ export abstract class MessageTransaction { * @param builderFunction The transaction builder function. * @return This transaction instance. */ - public buildAndSignTransaction(builderFunction: (input: TopicMessageSubmitTransaction) => Transaction): MessageTransaction { + public buildAndSignTransaction( + builderFunction: (input: TopicMessageSubmitTransaction) => Transaction + ): MessageTransaction { this.buildTransactionFunction = builderFunction; return this; } @@ -162,7 +164,7 @@ export abstract class MessageTransaction { * @return Transaction ID. */ public async execute(client: Client): Promise { - new Validator().checkValidationErrors('MessageTransaction execution failed: ', v => { + new Validator().checkValidationErrors("MessageTransaction execution failed: ", (v) => { return this.validate(v); }); @@ -172,16 +174,21 @@ export abstract class MessageTransaction { envelope.encrypt(this.provideMessageEncrypter(this.encrypter)); } - const messageContent = !envelope.getSignature() ? envelope.sign(this.signer) : ArraysUtils.fromString(envelope.toJSON()); + const messageContent = !envelope.getSignature() + ? envelope.sign(this.signer) + : ArraysUtils.fromString(envelope.toJSON()); if (this.receiver) { this.listener = this.provideTopicListener(this.topicId); - this.listener.setStartTime(Timestamp.fromDate(moment().subtract(MessageTransaction.SUBTRACT_TIME, 'seconds').toDate())) + this.listener + .setStartTime( + Timestamp.fromDate(moment().subtract(MessageTransaction.SUBTRACT_TIME, "seconds").toDate()) + ) .setIgnoreErrors(false) .addFilter((response) => { return ArraysUtils.equals(messageContent, response.contents); }) - .onError(err => { + .onError((err) => { return this.handleError(err); }) .onInvalidMessageReceived((response, reason) => { @@ -189,11 +196,11 @@ export abstract class MessageTransaction { return; } - this.handleError(new Error(reason + ': ' + ArraysUtils.toString(response.contents))); + this.handleError(new Error(reason + ": " + ArraysUtils.toString(response.contents))); this.listener.unsubscribe(); }) .onDecrypt(this.decrypter) - .subscribe(client, msg => { + .subscribe(client, (msg) => { this.listener.unsubscribe(); this.receiver(msg); }); @@ -223,9 +230,15 @@ export abstract class MessageTransaction { * @param validator The errors validator. */ protected validate(validator: Validator): void { - validator.require(!this.executed, 'This transaction has already been executed.'); - validator.require(!!this.signer || (!!this.message && !!this.message.getSignature()), 'Signing function is missing.'); - validator.require(!!this.buildTransactionFunction, 'Transaction builder is missing.'); - validator.require((!!this.encrypter && !!this.decrypter) || (!this.decrypter && !this.encrypter), 'Either both encrypter and decrypter must be specified or none.') + validator.require(!this.executed, "This transaction has already been executed."); + validator.require( + !!this.signer || (!!this.message && !!this.message.getSignature()), + "Signing function is missing." + ); + validator.require(!!this.buildTransactionFunction, "Transaction builder is missing."); + validator.require( + (!!this.encrypter && !!this.decrypter) || (!this.decrypter && !this.encrypter), + "Either both encrypter and decrypter must be specified or none." + ); } } diff --git a/src/identity/hcs/message.interface.ts b/src/identity/hcs/message.interface.ts index e61f4e1..ed96221 100644 --- a/src/identity/hcs/message.interface.ts +++ b/src/identity/hcs/message.interface.ts @@ -2,5 +2,3 @@ export interface Serialize { toJsonTree: () => any; toJSON(): () => string; } - - diff --git a/src/identity/hcs/message.ts b/src/identity/hcs/message.ts index fcccfdb..cf5950f 100644 --- a/src/identity/hcs/message.ts +++ b/src/identity/hcs/message.ts @@ -1,5 +1,5 @@ -import Long from "long"; import { Timestamp } from "@hashgraph/sdk"; +import Long from "long"; import { TimestampUtils } from "../../utils/timestamp-utils"; export type Encrypter = (message: T) => T; @@ -30,8 +30,7 @@ export class Message { } public static fromJsonTree(tree: any, result?: Message): Message { - if (!result) - result = new Message(); + if (!result) result = new Message(); result.timestamp = TimestampUtils.fromJson(tree.timestamp); return result; } diff --git a/src/identity/hcs/serializable-mirror-consensus-response.ts b/src/identity/hcs/serializable-mirror-consensus-response.ts index 7f9e1f8..580c062 100644 --- a/src/identity/hcs/serializable-mirror-consensus-response.ts +++ b/src/identity/hcs/serializable-mirror-consensus-response.ts @@ -19,19 +19,25 @@ export class SerializableMirrorConsensusResponse { } public toString(): string { - return "ConsensusMessage{" - + "consensusTimestamp=" + TimestampUtils.toJSON(this.consensusTimestamp) - + ", message=" + ArraysUtils.toString(this.message) - + ", runningHash=" + ArraysUtils.toString(this.runningHash) - + ", sequenceNumber=" + this.sequenceNumber.toNumber() - + '}'; + return ( + "ConsensusMessage{" + + "consensusTimestamp=" + + TimestampUtils.toJSON(this.consensusTimestamp) + + ", message=" + + ArraysUtils.toString(this.message) + + ", runningHash=" + + ArraysUtils.toString(this.runningHash) + + ", sequenceNumber=" + + this.sequenceNumber.toNumber() + + "}" + ); } public toJsonTree(): any { const result: any = {}; result.consensusTimestamp = { seconds: this.consensusTimestamp.seconds, - nanos: this.consensusTimestamp.nanos + nanos: this.consensusTimestamp.nanos, }; result.message = this.message.toString(); result.runningHash = this.runningHash.toString(); diff --git a/src/identity/hcs/vc/credential-subject.ts b/src/identity/hcs/vc/credential-subject.ts index 947a84d..f8bc237 100644 --- a/src/identity/hcs/vc/credential-subject.ts +++ b/src/identity/hcs/vc/credential-subject.ts @@ -11,7 +11,6 @@ export class CredentialSubject { this.id = id; } - // JsonClass public toJsonTree(): any { @@ -21,11 +20,9 @@ export class CredentialSubject { } public static fromJsonTree(root: any, result?: CredentialSubject): CredentialSubject { - if (!result) - result = new CredentialSubject(); + if (!result) result = new CredentialSubject(); result.id = root[HcsVcDocumentJsonProperties.ID]; return result; - } public toJSON(): string { @@ -38,12 +35,10 @@ export class CredentialSubject { try { const root = JSON.parse(json); result = this.fromJsonTree(root); - } catch (e) { - throw new Error('Given JSON string is not a valid CredentialSubject ' + e.message); + throw new Error("Given JSON string is not a valid CredentialSubject " + e.message); } return result; } } - diff --git a/src/identity/hcs/vc/hcs-vc-document-base.ts b/src/identity/hcs/vc/hcs-vc-document-base.ts index b20e1c2..b008e5e 100644 --- a/src/identity/hcs/vc/hcs-vc-document-base.ts +++ b/src/identity/hcs/vc/hcs-vc-document-base.ts @@ -82,7 +82,7 @@ export class HcsVcDocumentBase extends HcsVcDocumen public setIssuer(issuer: Issuer): void; public setIssuer(issuerDid: HcsDid): void; public setIssuer(...args: any[]): void { - if (typeof args[0] === 'string') { + if (typeof args[0] === "string") { this.issuer = new Issuer(args[0]); return; } @@ -100,7 +100,6 @@ export class HcsVcDocumentBase extends HcsVcDocumen this.issuanceDate = issuanceDate; } - /** * Adds an additional context to @context field of the VC document. * @@ -139,20 +138,20 @@ export class HcsVcDocumentBase extends HcsVcDocumen */ public isComplete(): boolean { return ( - (this.context != null) && - (!!this.context.length) && - (HcsVcDocumentJsonProperties.FIRST_CONTEXT_ENTRY == this.context[0]) && - (this.type != null) && - (!!this.type.length) && - (this.type.indexOf(HcsVcDocumentJsonProperties.VERIFIABLE_CREDENTIAL_TYPE) > -1) && - (this.issuanceDate != null) && - (this.issuer != null) && - (!!this.issuer.getId()) && - (this.credentialSubject != null) && - (!!this.credentialSubject.length) + this.context != null && + !!this.context.length && + HcsVcDocumentJsonProperties.FIRST_CONTEXT_ENTRY == this.context[0] && + this.type != null && + !!this.type.length && + this.type.indexOf(HcsVcDocumentJsonProperties.VERIFIABLE_CREDENTIAL_TYPE) > -1 && + this.issuanceDate != null && + this.issuer != null && + !!this.issuer.getId() && + this.credentialSubject != null && + !!this.credentialSubject.length ); } - + // JsonClass public toJsonTree(): any { @@ -179,16 +178,19 @@ export class HcsVcDocumentBase extends HcsVcDocumen return rootObject; } - public static fromJsonTree(root: any, result?: HcsVcDocumentBase, credentialSubjectClass?: JsonClass): HcsVcDocumentBase { - if (!result) - result = new HcsVcDocumentBase(); + public static fromJsonTree( + root: any, + result?: HcsVcDocumentBase, + credentialSubjectClass?: JsonClass + ): HcsVcDocumentBase { + if (!result) result = new HcsVcDocumentBase(); result = HcsVcDocumentHashBase.fromJsonTree(root, result) as HcsVcDocumentBase; const jsonCredentialSubject = root[HcsVcDocumentJsonProperties.CREDENTIAL_SUBJECT] as any[]; const credentialSubject: U[] = []; for (let i = 0; i < jsonCredentialSubject.length; i++) { const item = jsonCredentialSubject[i]; const subject: U = credentialSubjectClass.fromJsonTree(item); - credentialSubject.push(subject) + credentialSubject.push(subject); } result.credentialSubject = credentialSubject; return result; @@ -212,14 +214,16 @@ export class HcsVcDocumentBase extends HcsVcDocumen * @param credentialSubjectClass The type of the credential subject inside. * @return The {@link HcsVcDocumentBase} object. */ - public static fromJson(json: string, credentialSubjectClass?: JsonClass): HcsVcDocumentBase { + public static fromJson( + json: string, + credentialSubjectClass?: JsonClass + ): HcsVcDocumentBase { let result: HcsVcDocumentBase; try { const root = JSON.parse(json); result = this.fromJsonTree(root, null, credentialSubjectClass); - } catch (e) { - throw new Error('Given JSON string is not a valid HcsVcDocumentBase ' + e.message); + throw new Error("Given JSON string is not a valid HcsVcDocumentBase " + e.message); } return result; } diff --git a/src/identity/hcs/vc/hcs-vc-document-hash-base.ts b/src/identity/hcs/vc/hcs-vc-document-hash-base.ts index 94c2d7a..a5bb848 100644 --- a/src/identity/hcs/vc/hcs-vc-document-hash-base.ts +++ b/src/identity/hcs/vc/hcs-vc-document-hash-base.ts @@ -18,29 +18,23 @@ export class HcsVcDocumentHashBase { constructor() { this.type = [HcsVcDocumentJsonProperties.VERIFIABLE_CREDENTIAL_TYPE]; } - + // JsonClass public toJsonTree(): any { const rootObject = {}; - if (this.id) - rootObject[HcsVcDocumentJsonProperties.ID] = this.id; - if (this.type) - rootObject[HcsVcDocumentJsonProperties.TYPE] = this.type; - if (this.issuer) - rootObject[HcsVcDocumentJsonProperties.ISSUER] = this.issuer.toJsonTree(); + if (this.id) rootObject[HcsVcDocumentJsonProperties.ID] = this.id; + if (this.type) rootObject[HcsVcDocumentJsonProperties.TYPE] = this.type; + if (this.issuer) rootObject[HcsVcDocumentJsonProperties.ISSUER] = this.issuer.toJsonTree(); if (this.issuanceDate) rootObject[HcsVcDocumentJsonProperties.ISSUANCE_DATE] = TimestampUtils.toJSON(this.issuanceDate); return rootObject; } public static fromJsonTree(root: any, result?: HcsVcDocumentHashBase): HcsVcDocumentHashBase { - if (!result) - result = new HcsVcDocumentHashBase(); - if (root[HcsVcDocumentJsonProperties.ID]) - result.id = root[HcsVcDocumentJsonProperties.ID]; - if (root[HcsVcDocumentJsonProperties.TYPE]) - result.type = root[HcsVcDocumentJsonProperties.TYPE]; + if (!result) result = new HcsVcDocumentHashBase(); + if (root[HcsVcDocumentJsonProperties.ID]) result.id = root[HcsVcDocumentJsonProperties.ID]; + if (root[HcsVcDocumentJsonProperties.TYPE]) result.type = root[HcsVcDocumentJsonProperties.TYPE]; if (root[HcsVcDocumentJsonProperties.ISSUER]) result.issuer = Issuer.fromJsonTree(root[HcsVcDocumentJsonProperties.ISSUER]); if (root[HcsVcDocumentJsonProperties.ISSUANCE_DATE]) @@ -57,10 +51,9 @@ export class HcsVcDocumentHashBase { try { const root = JSON.parse(json); result = this.fromJsonTree(root); - } catch (e) { - throw new Error('Given JSON string is not a valid HcsVcDocumentHashBase ' + e.message); + throw new Error("Given JSON string is not a valid HcsVcDocumentHashBase " + e.message); } return result; } -} \ No newline at end of file +} diff --git a/src/identity/hcs/vc/hcs-vc-document-json-properties.ts b/src/identity/hcs/vc/hcs-vc-document-json-properties.ts index 160fc81..b07d14c 100644 --- a/src/identity/hcs/vc/hcs-vc-document-json-properties.ts +++ b/src/identity/hcs/vc/hcs-vc-document-json-properties.ts @@ -2,14 +2,14 @@ * Key property names in VC document standard. */ export module HcsVcDocumentJsonProperties { - export const CONTEXT = '@context'; - export const FIRST_CONTEXT_ENTRY = 'https://www.w3.org/2018/credentials/v1'; - export const ID = 'id'; - export const CREDENTIAL_SUBJECT = 'credentialSubject'; - export const TYPE = 'type'; - export const VERIFIABLE_CREDENTIAL_TYPE = 'VerifiableCredential'; - export const ISSUER = 'issuer'; - export const ISSUANCE_DATE = 'issuanceDate'; - export const CREDENTIAL_STATUS = 'credentialStatus'; - export const PROOF = 'proof'; + export const CONTEXT = "@context"; + export const FIRST_CONTEXT_ENTRY = "https://www.w3.org/2018/credentials/v1"; + export const ID = "id"; + export const CREDENTIAL_SUBJECT = "credentialSubject"; + export const TYPE = "type"; + export const VERIFIABLE_CREDENTIAL_TYPE = "VerifiableCredential"; + export const ISSUER = "issuer"; + export const ISSUANCE_DATE = "issuanceDate"; + export const CREDENTIAL_STATUS = "credentialStatus"; + export const PROOF = "proof"; } diff --git a/src/identity/hcs/vc/hcs-vc-message.ts b/src/identity/hcs/vc/hcs-vc-message.ts index 1beca8a..c69c206 100644 --- a/src/identity/hcs/vc/hcs-vc-message.ts +++ b/src/identity/hcs/vc/hcs-vc-message.ts @@ -27,7 +27,7 @@ export class HcsVcMessage extends Message { * @return True if the message is valid and False otherwise. */ public isValid(): boolean { - return (!!this.credentialHash && !!this.operation); + return !!this.credentialHash && !!this.operation; } public getOperation(): HcsVcOperation { diff --git a/src/identity/hcs/vc/hcs-vc-operation.ts b/src/identity/hcs/vc/hcs-vc-operation.ts index 167b2a1..b450d7a 100644 --- a/src/identity/hcs/vc/hcs-vc-operation.ts +++ b/src/identity/hcs/vc/hcs-vc-operation.ts @@ -2,8 +2,8 @@ * The operation type to be performed on the DID document. */ export enum HcsVcOperation { - ISSUE = 'issue', - REVOKE = 'revoke', - SUSPEND = 'suspend', - RESUME = 'resume' + ISSUE = "issue", + REVOKE = "revoke", + SUSPEND = "suspend", + RESUME = "resume", } diff --git a/src/identity/hcs/vc/hcs-vc-status-resolver.ts b/src/identity/hcs/vc/hcs-vc-status-resolver.ts index ca026be..0f50969 100644 --- a/src/identity/hcs/vc/hcs-vc-status-resolver.ts +++ b/src/identity/hcs/vc/hcs-vc-status-resolver.ts @@ -1,11 +1,11 @@ -import {TopicId} from "@hashgraph/sdk"; -import {TimestampUtils} from "../../../utils/timestamp-utils"; -import {MessageEnvelope} from "../message-envelope"; -import {MessageListener} from "../message-listener"; -import {MessageResolver} from "../message-resolver"; -import {HcsVcMessage} from "./hcs-vc-message"; -import {HcsVcOperation} from "./hcs-vc-operation"; -import {HcsVcTopicListener, PublicKeysProvider} from "./hcs-vc-topic-listener"; +import { TopicId } from "@hashgraph/sdk"; +import { TimestampUtils } from "../../../utils/timestamp-utils"; +import { MessageEnvelope } from "../message-envelope"; +import { MessageListener } from "../message-listener"; +import { MessageResolver } from "../message-resolver"; +import { HcsVcMessage } from "./hcs-vc-message"; +import { HcsVcOperation } from "./hcs-vc-operation"; +import { HcsVcTopicListener, PublicKeysProvider } from "./hcs-vc-topic-listener"; /** * Resolves the DID from Hedera network. @@ -61,7 +61,7 @@ export class HcsVcStatusResolver extends MessageResolver { */ public addCredentialHashes(hashes: string[]): HcsVcStatusResolver { if (hashes != null) { - hashes.forEach(d => this.addCredentialHash(d)); + hashes.forEach((d) => this.addCredentialHash(d)); } return this; @@ -71,7 +71,6 @@ export class HcsVcStatusResolver extends MessageResolver { return this.results.has(message.getCredentialHash()); } - protected override supplyMessageListener(): MessageListener { return new HcsVcTopicListener(this.topicId, this.publicKeysProvider); } @@ -82,16 +81,11 @@ export class HcsVcStatusResolver extends MessageResolver { // Skip messages that are older than the once collected or if we already have a REVOKED message const existing: MessageEnvelope = this.results.get(message.getCredentialHash()); - const chackOperation = ( - (existing != null) && - ( - (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp())) || - ( - HcsVcOperation.REVOKE == (existing.open().getOperation()) && - HcsVcOperation.REVOKE != (message.getOperation()) - ) - ) - ) + const chackOperation = + existing != null && + (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || + (HcsVcOperation.REVOKE == existing.open().getOperation() && + HcsVcOperation.REVOKE != message.getOperation())); if (chackOperation) { return; } diff --git a/src/identity/hcs/vc/hcs-vc-topic-listener.ts b/src/identity/hcs/vc/hcs-vc-topic-listener.ts index a21a5dd..8f0c5ac 100644 --- a/src/identity/hcs/vc/hcs-vc-topic-listener.ts +++ b/src/identity/hcs/vc/hcs-vc-topic-listener.ts @@ -23,7 +23,7 @@ export class HcsVcTopicListener extends MessageListener { * * @param vcTopicId The VC consensus topic ID. */ - constructor(vcTopicId: TopicId) + constructor(vcTopicId: TopicId); /** * Creates a new instance of a VC topic listener for the given consensus topic. * By default, invalid messages are ignored and errors are not. diff --git a/src/identity/hcs/vc/hcs-vc-transaction.ts b/src/identity/hcs/vc/hcs-vc-transaction.ts index 830faec..fa59b52 100644 --- a/src/identity/hcs/vc/hcs-vc-transaction.ts +++ b/src/identity/hcs/vc/hcs-vc-transaction.ts @@ -1,12 +1,12 @@ -import {MessageTransaction} from "../message-transaction"; -import {HcsVcMessage} from "./hcs-vc-message"; -import {HcsVcOperation} from "./hcs-vc-operation"; -import {PublicKey, TopicId} from "@hashgraph/sdk"; -import {MessageEnvelope} from "../message-envelope"; -import {Validator} from "../../../utils/validator"; -import {MessageListener} from "../message-listener"; -import {HcsVcTopicListener} from "./hcs-vc-topic-listener"; -import {Encrypter} from "../message"; +import { MessageTransaction } from "../message-transaction"; +import { HcsVcMessage } from "./hcs-vc-message"; +import { HcsVcOperation } from "./hcs-vc-operation"; +import { PublicKey, TopicId } from "@hashgraph/sdk"; +import { MessageEnvelope } from "../message-envelope"; +import { Validator } from "../../../utils/validator"; +import { MessageListener } from "../message-listener"; +import { HcsVcTopicListener } from "./hcs-vc-topic-listener"; +import { Encrypter } from "../message"; /** * The DID document creation, update or deletion transaction. @@ -37,11 +37,11 @@ export class HcsVcTransaction extends MessageTransaction { constructor(topicId: TopicId, message: MessageEnvelope, signerPublicKey: PublicKey); constructor(...args) { if ( - (args.length === 4) && - (args[0] instanceof TopicId) && + args.length === 4 && + args[0] instanceof TopicId && // (args[1] instanceof HcsVcOperation) && - (typeof args[2] === 'string') && - (args[3] instanceof PublicKey) + typeof args[2] === "string" && + args[3] instanceof PublicKey ) { const [topicId, operation, credentialHash, signerPublicKey] = args; super(topicId); @@ -49,10 +49,10 @@ export class HcsVcTransaction extends MessageTransaction { this.credentialHash = credentialHash; this.signerPublicKey = signerPublicKey; } else if ( - (args.length === 3) && - (args[0] instanceof TopicId) && - (args[1] instanceof MessageEnvelope) && - (args[2] instanceof PublicKey) + args.length === 3 && + args[0] instanceof TopicId && + args[1] instanceof MessageEnvelope && + args[2] instanceof PublicKey ) { const [topicId, message, signerPublicKey] = args; super(topicId, message); @@ -64,8 +64,8 @@ export class HcsVcTransaction extends MessageTransaction { protected validate(validator: Validator): void { super.validate(validator); - validator.require(!!this.credentialHash || !!this.message, 'Verifiable credential hash is null or empty.'); - validator.require(!!this.operation || !!this.message, 'Operation on verifiable credential is not defined.'); + validator.require(!!this.credentialHash || !!this.message, "Verifiable credential hash is null or empty."); + validator.require(!!this.operation || !!this.message, "Operation on verifiable credential is not defined."); } protected buildMessage(): MessageEnvelope { @@ -74,7 +74,7 @@ export class HcsVcTransaction extends MessageTransaction { protected provideTopicListener(topicIdToListen: TopicId): MessageListener { return new HcsVcTopicListener(topicIdToListen, (s) => { - return [this.signerPublicKey] + return [this.signerPublicKey]; }); } diff --git a/src/identity/hcs/vc/issuer.ts b/src/identity/hcs/vc/issuer.ts index 4763aad..0ea42b6 100644 --- a/src/identity/hcs/vc/issuer.ts +++ b/src/identity/hcs/vc/issuer.ts @@ -4,7 +4,7 @@ export class Issuer { protected id: string; protected name: string; - constructor(id: string) + constructor(id: string); constructor(id: string, name: string); constructor(...args: any[]) { this.id = args[0]; @@ -25,7 +25,7 @@ export class Issuer { if (this.name) { const rootObject = {}; rootObject[HcsVcDocumentJsonProperties.ID] = this.id; - rootObject['name'] = this.name; + rootObject["name"] = this.name; return rootObject; } return this.id; @@ -41,7 +41,7 @@ export class Issuer { } if (result) { result.id = id; - result.name = name + result.name = name; return result; } else { return new Issuer(id, name); @@ -58,11 +58,10 @@ export class Issuer { try { const root = JSON.parse(json); result = this.fromJsonTree(root); - } catch (e) { - throw new Error('Given JSON string is not a valid Issuer ' + e.message); + throw new Error("Given JSON string is not a valid Issuer " + e.message); } return result; } -} \ No newline at end of file +} diff --git a/src/identity/hedera-did.ts b/src/identity/hedera-did.ts index bc8ae6d..8608a05 100644 --- a/src/identity/hedera-did.ts +++ b/src/identity/hedera-did.ts @@ -1,10 +1,10 @@ -import {DidDocumentBase} from "./did-document-base"; -import {DidSyntax} from "./did-syntax"; +import { DidDocumentBase } from "./did-document-base"; +import { DidSyntax } from "./did-syntax"; export interface HederaDid { // fromString(string): HederaDid; toDid(): string; generateDidDocument(): DidDocumentBase; getNetwork(): string; - getMethod(): DidSyntax.Method + getMethod(): DidSyntax.Method; } diff --git a/src/index.ts b/src/index.ts index 19de087..a961765 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,38 +1,38 @@ -import {ArraysUtils} from "./utils/arrays-utils"; -import {CredentialSubject} from "./identity/hcs/vc/credential-subject"; -import {DidDocumentBase} from "./identity/did-document-base"; -import {DidDocumentJsonProperties} from "./identity/did-document-json-properties"; -import {DidMethodOperation} from "./identity/did-method-operation"; -import {DidParser} from "./identity/did-parser"; -import {DidSyntax} from "./identity/did-syntax"; -import {Hashing} from "./utils/hashing"; -import {HcsDidMessage} from "./identity/hcs/did/hcs-did-message"; -import {HcsDidResolver} from "./identity/hcs/did/hcs-did-resolver"; -import {HcsDidRootKey} from "./identity/hcs/did/hcs-did-root-key"; -import {HcsDidTopicListener} from "./identity/hcs/did/hcs-did-topic-listener"; -import {HcsDidTransaction} from "./identity/hcs/did/hcs-did-transaction"; -import {HcsDid} from "./identity/hcs/did/hcs-did"; -import {HcsIdentityNetworkBuilder} from "./identity/hcs/hcs-identity-network-builder"; -import {HcsIdentityNetwork} from "./identity/hcs/hcs-identity-network"; -import {HcsVcDocumentBase} from "./identity/hcs/vc/hcs-vc-document-base"; -import {HcsVcDocumentHashBase} from "./identity/hcs/vc/hcs-vc-document-hash-base"; -import {HcsVcDocumentJsonProperties} from "./identity/hcs/vc/hcs-vc-document-json-properties"; -import {HcsVcMessage} from "./identity/hcs/vc/hcs-vc-message"; -import {HcsVcOperation} from "./identity/hcs/vc/hcs-vc-operation"; -import {HcsVcStatusResolver} from "./identity/hcs/vc/hcs-vc-status-resolver"; -import {HcsVcTopicListener} from "./identity/hcs/vc/hcs-vc-topic-listener"; -import {HederaDid} from "./identity/hedera-did"; -import {JsonClass} from "./identity/hcs/json-class"; -import {MessageEnvelope} from "./identity/hcs/message-envelope"; -import {MessageListener} from "./identity/hcs/message-listener"; -import {MessageMode} from "./identity/hcs/message-mode"; -import {MessageResolver} from "./identity/hcs/message-resolver"; -import {MessageTransaction} from "./identity/hcs/message-transaction"; -import {Message} from "./identity/hcs/message"; -import {SerializableMirrorConsensusResponse} from "./identity/hcs/serializable-mirror-consensus-response"; -import {TimestampUtils} from "./utils/timestamp-utils"; -import {Validator} from "./utils/validator"; -import {Issuer} from "./identity/hcs/vc/issuer"; +import { ArraysUtils } from "./utils/arrays-utils"; +import { CredentialSubject } from "./identity/hcs/vc/credential-subject"; +import { DidDocumentBase } from "./identity/did-document-base"; +import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; +import { DidMethodOperation } from "./identity/did-method-operation"; +import { DidParser } from "./identity/did-parser"; +import { DidSyntax } from "./identity/did-syntax"; +import { Hashing } from "./utils/hashing"; +import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; +import { HcsDidResolver } from "./identity/hcs/did/hcs-did-resolver"; +import { HcsDidRootKey } from "./identity/hcs/did/hcs-did-root-key"; +import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; +import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; +import { HcsDid } from "./identity/hcs/did/hcs-did"; +import { HcsIdentityNetworkBuilder } from "./identity/hcs/hcs-identity-network-builder"; +import { HcsIdentityNetwork } from "./identity/hcs/hcs-identity-network"; +import { HcsVcDocumentBase } from "./identity/hcs/vc/hcs-vc-document-base"; +import { HcsVcDocumentHashBase } from "./identity/hcs/vc/hcs-vc-document-hash-base"; +import { HcsVcDocumentJsonProperties } from "./identity/hcs/vc/hcs-vc-document-json-properties"; +import { HcsVcMessage } from "./identity/hcs/vc/hcs-vc-message"; +import { HcsVcOperation } from "./identity/hcs/vc/hcs-vc-operation"; +import { HcsVcStatusResolver } from "./identity/hcs/vc/hcs-vc-status-resolver"; +import { HcsVcTopicListener } from "./identity/hcs/vc/hcs-vc-topic-listener"; +import { HederaDid } from "./identity/hedera-did"; +import { JsonClass } from "./identity/hcs/json-class"; +import { MessageEnvelope } from "./identity/hcs/message-envelope"; +import { MessageListener } from "./identity/hcs/message-listener"; +import { MessageMode } from "./identity/hcs/message-mode"; +import { MessageResolver } from "./identity/hcs/message-resolver"; +import { MessageTransaction } from "./identity/hcs/message-transaction"; +import { Message } from "./identity/hcs/message"; +import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; +import { TimestampUtils } from "./utils/timestamp-utils"; +import { Validator } from "./utils/validator"; +import { Issuer } from "./identity/hcs/vc/issuer"; export { ArraysUtils, @@ -69,5 +69,5 @@ export { SerializableMirrorConsensusResponse, TimestampUtils, Validator, - Issuer -} + Issuer, +}; diff --git a/src/utils/arrays-utils.ts b/src/utils/arrays-utils.ts index 9b13972..4e8b3d1 100644 --- a/src/utils/arrays-utils.ts +++ b/src/utils/arrays-utils.ts @@ -1,14 +1,13 @@ - export class ArraysUtils { public static equals(a: Uint8Array, b: Uint8Array): boolean { if (a == b) { - return true + return true; } if (!a || !b) { - return false + return false; } if (a.length != b.length) { - return false + return false; } for (let i = 0; i < a.length; i++) { if (a[i] != b[i]) return false; @@ -21,6 +20,6 @@ export class ArraysUtils { } public static fromString(text: string): Uint8Array { - return new Uint8Array(Buffer.from(text, "utf8")) + return new Uint8Array(Buffer.from(text, "utf8")); } } diff --git a/src/utils/hashing.ts b/src/utils/hashing.ts index 273e951..043e40e 100644 --- a/src/utils/hashing.ts +++ b/src/utils/hashing.ts @@ -9,24 +9,24 @@ export class Hashing { }, decode: function (data: string): Uint8Array { return bs58.decode(data); - } - } + }, + }; public static readonly sha256 = { digest: function (data: Uint8Array | string): Uint8Array { const sha256 = crypto - .createHash('sha256') // may need to change in the future. + .createHash("sha256") // may need to change in the future. .update(data) .digest(); return sha256; - } - } + }, + }; public static readonly base64 = { decode: function (encodedString: string): string { - return Base64.fromBase64(encodedString);; + return Base64.fromBase64(encodedString); }, encode: function (decodedBytes: string): string { return Base64.toBase64(decodedBytes); - } - } + }, + }; } diff --git a/src/utils/sleep.ts b/src/utils/sleep.ts index 77ff00e..048c000 100644 --- a/src/utils/sleep.ts +++ b/src/utils/sleep.ts @@ -1,7 +1,7 @@ export function Sleep(sleepTime: number): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { setTimeout(() => { resolve(); - }, sleepTime) - }) + }, sleepTime); + }); } diff --git a/src/utils/timestamp-utils.ts b/src/utils/timestamp-utils.ts index e8e762b..f1cfd42 100644 --- a/src/utils/timestamp-utils.ts +++ b/src/utils/timestamp-utils.ts @@ -1,5 +1,5 @@ import { Timestamp } from "@hashgraph/sdk"; -import moment from 'moment'; +import moment from "moment"; export class TimestampUtils { public static ISO = "YYYY-MM-DDTHH:mm:ss.SSS[Z]"; @@ -41,4 +41,4 @@ export class TimestampUtils { } a.seconds.lessThan(b.seconds); } -} \ No newline at end of file +} diff --git a/src/utils/validator.ts b/src/utils/validator.ts index 0b73080..8c5ba0f 100644 --- a/src/utils/validator.ts +++ b/src/utils/validator.ts @@ -20,7 +20,7 @@ export class Validator { const errors = this.validationErrors; this.validationErrors = null; - throw new Error(prologue + ':\n' + errors.join('\n')); + throw new Error(prologue + ":\n" + errors.join("\n")); } public require(condition: boolean, errorMessage: string): void { diff --git a/test/aes-encryption-util.js b/test/aes-encryption-util.js index 41d7250..e40b4e3 100644 --- a/test/aes-encryption-util.js +++ b/test/aes-encryption-util.js @@ -1,15 +1,22 @@ -const crypto = require('crypto'); +const crypto = require("crypto"); const encrypt = function (plainText, key, outputEncoding = "base64") { - const cipher = crypto.createCipheriv("aes-128-ecb", crypto.createHash('sha256').update(String(key)).digest('base64').substr(0, 16), null); - return Buffer.concat([cipher.update(plainText, 'utf8'), cipher.final()]).toString(outputEncoding); -} + const cipher = crypto.createCipheriv( + "aes-128-ecb", + crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), + null + ); + return Buffer.concat([cipher.update(plainText, "utf8"), cipher.final()]).toString(outputEncoding); +}; const decrypt = function (cipherText, key, outputEncoding = "utf8") { - const cipher = crypto.createDecipheriv("aes-128-ecb", crypto.createHash('sha256').update(String(key)).digest('base64').substr(0, 16), null); - return Buffer.concat([cipher.update(cipherText, 'base64'), cipher.final()]).toString(outputEncoding); - -} + const cipher = crypto.createDecipheriv( + "aes-128-ecb", + crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), + null + ); + return Buffer.concat([cipher.update(cipherText, "base64"), cipher.final()]).toString(outputEncoding); +}; exports.encrypt = encrypt; -exports.decrypt = decrypt; \ No newline at end of file +exports.decrypt = decrypt; diff --git a/test/did-document-base.js b/test/did-document-base.js index 0c7f4b0..4971870 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -1,10 +1,4 @@ -const { - HcsDid, - DidDocumentBase, - DidDocumentJsonProperties, - DidSyntax, - HcsDidRootKey, -} = require("../dist"); +const { HcsDid, DidDocumentBase, DidDocumentJsonProperties, DidSyntax, HcsDidRootKey } = require("../dist"); const { TopicId } = require("@hashgraph/sdk"); const bs58 = require("bs58"); const { expect, assert } = require("chai"); @@ -13,152 +7,137 @@ const network = "testnet"; const DID_TOPIC_ID = TopicId.fromString("0.0.2"); describe("DidDocumentBase", function () { - it("Test Serialization", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const root = JSON.parse(didJson); - - expect(root).to.have.keys([ - DidDocumentJsonProperties.CONTEXT, - DidDocumentJsonProperties.ID, - DidDocumentJsonProperties.VERIFICATION_METHOD, - DidDocumentJsonProperties.AUTHENTICATION, - ]); - assert.equal( - root[DidDocumentJsonProperties.CONTEXT], - DidSyntax.DID_DOCUMENT_CONTEXT - ); - assert.equal(root[DidDocumentJsonProperties.ID], did.toDid()); - - const didRootKey = root[DidDocumentJsonProperties.VERIFICATION_METHOD][0]; - assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); - assert.equal( - didRootKey[DidDocumentJsonProperties.ID], - did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME - ); - assert.equal(didRootKey["controller"], did.toDid()); - assert.equal( - didRootKey["publicKeyBase58"], - bs58.encode(privateKey.publicKey.toBytes()) - ); - }); - - it("Test Deserialization", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const parsedDoc = DidDocumentBase.fromJson(didJson); - assert.equal(parsedDoc.getId(), doc.getId()); - - const didRootKey = parsedDoc.getDidRootKey(); - assert.exists(didRootKey); - assert.equal( - didRootKey.getPublicKeyBase58(), - doc.getDidRootKey().getPublicKeyBase58() - ); - assert.equal( - didRootKey.getController(), - doc.getDidRootKey().getController() - ); - assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); - assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); - }); - - it("Test Invalid Deserialization", async function () { - const didJson = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "verificationMethod":"invalidPublicKey",' + - ' "service": [' + - " {" + - ' "id":"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - assert.throw(() => { - DidDocumentBase.fromJson(didJson); + it("Test Serialization", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + + const root = JSON.parse(didJson); + + expect(root).to.have.keys([ + DidDocumentJsonProperties.CONTEXT, + DidDocumentJsonProperties.ID, + DidDocumentJsonProperties.VERIFICATION_METHOD, + DidDocumentJsonProperties.AUTHENTICATION, + ]); + assert.equal(root[DidDocumentJsonProperties.CONTEXT], DidSyntax.DID_DOCUMENT_CONTEXT); + assert.equal(root[DidDocumentJsonProperties.ID], did.toDid()); + + const didRootKey = root[DidDocumentJsonProperties.VERIFICATION_METHOD][0]; + assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); + assert.equal(didRootKey[DidDocumentJsonProperties.ID], did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); + assert.equal(didRootKey["controller"], did.toDid()); + assert.equal(didRootKey["publicKeyBase58"], bs58.encode(privateKey.publicKey.toBytes())); + }); + + it("Test Deserialization", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + + const parsedDoc = DidDocumentBase.fromJson(didJson); + assert.equal(parsedDoc.getId(), doc.getId()); + + const didRootKey = parsedDoc.getDidRootKey(); + assert.exists(didRootKey); + assert.equal(didRootKey.getPublicKeyBase58(), doc.getDidRootKey().getPublicKeyBase58()); + assert.equal(didRootKey.getController(), doc.getDidRootKey().getController()); + assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); + assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); + }); + + it("Test Invalid Deserialization", async function () { + const didJson = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "verificationMethod":"invalidPublicKey",' + + ' "service": [' + + " {" + + ' "id":"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + assert.throw(() => { + DidDocumentBase.fromJson(didJson); + }); + }); + + it("Test Incomplete Json Deserialization", async function () { + const didJsonMissingPublicKeys = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]" + + "}"; + + const didJsonMissingRootKey = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "publicKey": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + + ' "type": "Ed25519VerificationKey2018",' + + ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + " }" + + " ]," + + ' "service": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + const didJsonMissingPublicKeyId = + "{" + + ' "@context": "https://www.w3.org/ns/did/v1",' + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "authentication": [' + + ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + " ]," + + ' "publicKey": [' + + " {" + + ' "type": "Ed25519VerificationKey2018",' + + ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + " }" + + " ]," + + ' "service": [' + + " {" + + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "type": "VerifiableCredentialService",' + + ' "serviceEndpoint": "https://example.com/vc/"' + + " }" + + " ]" + + "}"; + + let doc = DidDocumentBase.fromJson(didJsonMissingPublicKeys); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); + + doc = DidDocumentBase.fromJson(didJsonMissingRootKey); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); + + doc = DidDocumentBase.fromJson(didJsonMissingPublicKeyId); + assert.exists(doc); + assert.notExists(doc.getDidRootKey()); }); - }); - - it("Test Incomplete Json Deserialization", async function () { - const didJsonMissingPublicKeys = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]" + - "}"; - - const didJsonMissingRootKey = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "publicKey": [' + - " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + - ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - " }" + - " ]," + - ' "service": [' + - " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - const didJsonMissingPublicKeyId = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "publicKey": [' + - " {" + - ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - " }" + - " ]," + - ' "service": [' + - " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - let doc = DidDocumentBase.fromJson(didJsonMissingPublicKeys); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingRootKey); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingPublicKeyId); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - }); }); diff --git a/test/did/hcs-did-message.js b/test/did/hcs-did-message.js index 375d097..5899e63 100644 --- a/test/did/hcs-did-message.js +++ b/test/did/hcs-did-message.js @@ -1,12 +1,6 @@ const { encrypt, decrypt } = require("../aes-encryption-util"); const { FileId, TopicId } = require("@hashgraph/sdk"); -const { - HcsDidMessage, - MessageEnvelope, - DidMethodOperation, - HcsDid, - ArraysUtils, -} = require("../../dist"); +const { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } = require("../../dist"); const { assert } = require("chai"); @@ -15,162 +9,115 @@ const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); describe("HcsDidMessage", function () { - it("Test Valid Message", async function () { - const privateKey = HcsDid.generateDidRootKey(); - - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const originalEnvelope = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ); - const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); - - const envelope = MessageEnvelope.fromJson( - Buffer.from(message).toString("utf8"), - HcsDidMessage - ); - - assert.isTrue( - envelope.isSignatureValid((e) => e.open().extractDidRootKey()) - ); - assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); - assert.deepEqual( - originalEnvelope.open().getTimestamp(), - envelope.open().getTimestamp() - ); - }); - - it("Test Encrypted Message", async function () { - const secret = "Secret encryption password"; - - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - - const originalEnvelope = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ); - const encryptedMsg = originalEnvelope.encrypt( - HcsDidMessage.getEncrypter((m) => encrypt(m, secret)) - ); - const encryptedSignedMsg = MessageEnvelope.fromJson( - ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), - HcsDidMessage - ); - - assert.exists(encryptedSignedMsg); - assert.throw(() => { - encryptedSignedMsg.open(); + it("Test Valid Message", async function () { + const privateKey = HcsDid.generateDidRootKey(); + + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const didJson = doc.toJSON(); + const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); + const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); + + const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); + + assert.isTrue(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); + assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); + assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); + }); + + it("Test Encrypted Message", async function () { + const secret = "Secret encryption password"; + + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const didJson = doc.toJSON(); + + const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); + const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter((m) => encrypt(m, secret))); + const encryptedSignedMsg = MessageEnvelope.fromJson( + ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), + HcsDidMessage + ); + + assert.exists(encryptedSignedMsg); + assert.throw(() => { + encryptedSignedMsg.open(); + }); + + const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); + + assert.exists(decryptedMsg); + assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); + assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); + }); + + it("Test Invalid Did", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + privateKey.sign(msg) + ); + const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + + const differentDid = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, DID_TOPIC_ID1); + msg.did = differentDid.toDid(); + + assert.isFalse(msg.isValid()); + }); + + it("Test Invalid Topic", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + privateKey.sign(msg) + ); + const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + + assert.isTrue(msg.isValid(DID_TOPIC_ID1)); + assert.isFalse(msg.isValid(DID_TOPIC_ID2)); + }); + + it("Test Missing Data", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + const operation = DidMethodOperation.CREATE; + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + privateKey.sign(msg) + ); + + const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + + let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); + assert.isFalse(msg.isValid()); + + msg = new HcsDidMessage(operation, validMsg.getDid(), null); + assert.isFalse(msg.isValid()); + assert.notExists(msg.getDidDocument()); + assert.exists(msg.getDid()); + assert.equal(operation, msg.getOperation()); }); - const decryptedMsg = await encryptedSignedMsg.open( - HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret)) - ); - - assert.exists(decryptedMsg); - assert.equal( - originalEnvelope.open().getDidDocumentBase64(), - decryptedMsg.getDidDocumentBase64() - ); - assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); - }); - - it("Test Invalid Did", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ).sign((msg) => privateKey.sign(msg)); - const msg = MessageEnvelope.fromJson( - Buffer.from(message).toString("utf8"), - HcsDidMessage - ).open(); - - const differentDid = new HcsDid( - network, - HcsDid.generateDidRootKey().publicKey, - DID_TOPIC_ID1 - ); - msg.did = differentDid.toDid(); - - assert.isFalse(msg.isValid()); - }); - - it("Test Invalid Topic", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ).sign((msg) => privateKey.sign(msg)); - const msg = await MessageEnvelope.fromJson( - Buffer.from(message).toString("utf8"), - HcsDidMessage - ).open(); - - assert.isTrue(msg.isValid(DID_TOPIC_ID1)); - assert.isFalse(msg.isValid(DID_TOPIC_ID2)); - }); - - it("Test Missing Data", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const operation = DidMethodOperation.CREATE; - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ).sign((msg) => privateKey.sign(msg)); - - const validMsg = MessageEnvelope.fromJson( - Buffer.from(message).toString("utf8"), - HcsDidMessage - ).open(); - - let msg = new HcsDidMessage( - operation, - null, - validMsg.getDidDocumentBase64() - ); - assert.isFalse(msg.isValid()); - - msg = new HcsDidMessage(operation, validMsg.getDid(), null); - assert.isFalse(msg.isValid()); - assert.notExists(msg.getDidDocument()); - assert.exists(msg.getDid()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Invalid Signature", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson( - didJson, - DidMethodOperation.CREATE - ).sign((msg) => HcsDid.generateDidRootKey().sign(msg)); - const envelope = MessageEnvelope.fromJson( - Buffer.from(message).toString("utf8"), - HcsDidMessage - ); - - assert.isFalse( - envelope.isSignatureValid((e) => e.open().extractDidRootKey()) - ); - }); + it("Test Invalid Signature", async function () { + const privateKey = HcsDid.generateDidRootKey(); + const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + const doc = did.generateDidDocument(); + + const didJson = doc.toJSON(); + const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + HcsDid.generateDidRootKey().sign(msg) + ); + const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); + + assert.isFalse(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); + }); }); diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index 5b2a4cf..9e020dc 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -8,168 +8,147 @@ const testBase = new NetworkReadyTestBase(); let hcsDid, didDocument; const EXPECT_NO_ERROR = function (err) { - throw err; + throw err; }; describe("Hcs Did Method Operations", function () { - before(async function () { - this.timeout(60000); - await testBase.setup(); - hcsDid = testBase.didNetwork.generateDid(); - didDocument = hcsDid.generateDidDocument().toJSON(); - }); - - after(async function () { - testBase.cleanup(); - }); - - it("Test Create", async function () { - this.timeout(60000); - const op = DidMethodOperation.CREATE; - - const envelope = await testBase.sendDidTransaction( - hcsDid, - didDocument, - op, - EXPECT_NO_ERROR - ); - assert.exists(envelope); - - const msg = envelope.open(); - assert.exists(msg); - assert.exists(msg.getDidDocument()); - - assert.equal(hcsDid.toDid(), msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it("Test Resolve After Create", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it("Test Update", async function () { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - const publicKeys = - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD]; - publicKeys.push( - JSON.parse( - "{" + - '"id": "did:example:123456789abcdefghi#keys-2",' + - '"type": "Ed25519VerificationKey2018",' + - '"controller": "did:example:pqrstuvwxyz0987654321",' + - '"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - "}" - ) - ); - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = publicKeys; - - const newDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.UPDATE; - const envelope = await testBase.sendDidTransaction( - hcsDid, - newDoc, - operation, - EXPECT_NO_ERROR - ); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(newDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Resolve After Update", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.UPDATE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it("Test Delete", async function () { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - if (rootObject.hasOwnProperty(DidDocumentJsonProperties.AUTHENTICATION)) { - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; - } - - const deletedDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.DELETE; - const envelope = await testBase.sendDidTransaction( - hcsDid, - deletedDoc, - operation, - EXPECT_NO_ERROR - ); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(deletedDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Resolve After Delete", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it("Test Resolve After Delete And Another Invalid Submit", async function () { - this.timeout(60000); - await testBase.sendDidTransaction( - hcsDid, - didDocument, - DidMethodOperation.UPDATE, - EXPECT_NO_ERROR - ); - - const didString = hcsDid.toDid(); - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); + before(async function () { + this.timeout(60000); + await testBase.setup(); + hcsDid = testBase.didNetwork.generateDid(); + didDocument = hcsDid.generateDidDocument().toJSON(); + }); + + after(async function () { + testBase.cleanup(); + }); + + it("Test Create", async function () { + this.timeout(60000); + const op = DidMethodOperation.CREATE; + + const envelope = await testBase.sendDidTransaction(hcsDid, didDocument, op, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + assert.exists(msg); + assert.exists(msg.getDidDocument()); + + assert.equal(hcsDid.toDid(), msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.CREATE, msg.getOperation()); + }); + + it("Test Resolve After Create", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.CREATE, msg.getOperation()); + }); + + it("Test Update", async function () { + this.timeout(60000); + const rootObject = JSON.parse(didDocument); + + const publicKeys = rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD]; + publicKeys.push( + JSON.parse( + "{" + + '"id": "did:example:123456789abcdefghi#keys-2",' + + '"type": "Ed25519VerificationKey2018",' + + '"controller": "did:example:pqrstuvwxyz0987654321",' + + '"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + "}" + ) + ); + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = publicKeys; + + const newDoc = JSON.stringify(rootObject); + + const operation = DidMethodOperation.UPDATE; + const envelope = await testBase.sendDidTransaction(hcsDid, newDoc, operation, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(newDoc, msg.getDidDocument()); + assert.equal(operation, msg.getOperation()); + }); + + it("Test Resolve After Update", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.UPDATE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); + + it("Test Delete", async function () { + this.timeout(60000); + const rootObject = JSON.parse(didDocument); + + if (rootObject.hasOwnProperty(DidDocumentJsonProperties.AUTHENTICATION)) { + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; + } + + const deletedDoc = JSON.stringify(rootObject); + + const operation = DidMethodOperation.DELETE; + const envelope = await testBase.sendDidTransaction(hcsDid, deletedDoc, operation, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(deletedDoc, msg.getDidDocument()); + assert.equal(operation, msg.getOperation()); + }); + + it("Test Resolve After Delete", async function () { + this.timeout(60000); + const didString = hcsDid.toDid(); + + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.DELETE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); + + it("Test Resolve After Delete And Another Invalid Submit", async function () { + this.timeout(60000); + await testBase.sendDidTransaction(hcsDid, didDocument, DidMethodOperation.UPDATE, EXPECT_NO_ERROR); + + const didString = hcsDid.toDid(); + const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); + assert.exists(envelope); + + const msg = envelope.open(); + + assert.exists(msg); + assert.equal(didString, msg.getDid()); + assert.isTrue(msg.isValid()); + assert.equal(DidMethodOperation.DELETE, msg.getOperation()); + assert.notEqual(didDocument, msg.getDidDocument()); + }); }); diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js index 785d0bd..7930de4 100644 --- a/test/did/hcs-did-root-key.js +++ b/test/did/hcs-did-root-key.js @@ -7,40 +7,34 @@ const { assert } = require("chai"); const network = "network"; describe("HcsDidRootKey", function () { - it("Test Generate", async function () { - const didTopicId = TopicId.fromString("1.5.23462345"); - - const privateKey = HcsDid.generateDidRootKey(); - - const did = new HcsDid(network, privateKey.publicKey, didTopicId); - - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(null, null); - }); - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(did, null); + it("Test Generate", async function () { + const didTopicId = TopicId.fromString("1.5.23462345"); + + const privateKey = HcsDid.generateDidRootKey(); + + const did = new HcsDid(network, privateKey.publicKey, didTopicId); + + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(null, null); + }); + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(did, null); + }); + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(null, privateKey.publicKey); + }); + + const differentPublicKey = HcsDid.generateDidRootKey().publicKey; + assert.throw(() => { + HcsDidRootKey.fromHcsIdentity(did, differentPublicKey); + }); + + const didRootKey = HcsDidRootKey.fromHcsIdentity(did, privateKey.publicKey); + assert.exists(didRootKey); + + assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); + assert.equal(didRootKey.getId(), did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); + assert.equal(didRootKey.getController(), did.toDid()); + assert.equal(didRootKey.getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); }); - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(null, privateKey.publicKey); - }); - - const differentPublicKey = HcsDid.generateDidRootKey().publicKey; - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(did, differentPublicKey); - }); - - const didRootKey = HcsDidRootKey.fromHcsIdentity(did, privateKey.publicKey); - assert.exists(didRootKey); - - assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); - assert.equal( - didRootKey.getId(), - did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME - ); - assert.equal(didRootKey.getController(), did.toDid()); - assert.equal( - didRootKey.getPublicKeyBase58(), - bs58.encode(privateKey.publicKey.toBytes()) - ); - }); }); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index bbf86dd..170b24b 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -7,81 +7,76 @@ const { assert } = require("chai"); const network = "testnet"; describe("HcsDid", function () { - it("Test Generate And Parse Did With Tid", async function () { - const didTopicId = "1.5.23462345"; - - const privateKey = HcsDid.generateDidRootKey(); - - const topicId = TopicId.fromString(didTopicId); - const did = new HcsDid(network, privateKey.publicKey, topicId); - - const didString = did.toString(); - - assert.exists(didString); - - const parsedDid = HcsDid.fromString(didString); - - assert.exists(parsedDid); - assert.exists(parsedDid.getDidTopicId()); - - assert.equal(parsedDid.toDid(), didString); - assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); - assert.equal(parsedDid.getNetwork(), network); - assert.equal(parsedDid.getDidTopicId().toString(), didTopicId); - assert.equal(parsedDid.getIdString(), did.getIdString()); - - const parsedDocument = parsedDid.generateDidDocument(); - - assert.exists(parsedDocument); - assert.equal(parsedDocument.getId(), parsedDid.toString()); - assert.equal(parsedDocument.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.notExists(parsedDocument.getDidRootKey()); - - const document = did.generateDidDocument(); - - assert.exists(document); - assert.equal(document.getId(), parsedDid.toString()); - assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.exists(document.getDidRootKey()); - assert.equal( - document.getDidRootKey().getPublicKeyBase58(), - bs58.encode(privateKey.publicKey.toBytes()) - ); - }); - - it("Test Parse Predefined Dids", async function () { - const didTopicId = "1.5.23462345"; - - const validDidWithSwitchedParamsOrder = - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + - "_" + - didTopicId; - - const invalidDids = [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ]; - - for (let did of invalidDids) { - assert.throw(() => { - HcsDid.fromString(did); - }); - } - - const validDid = HcsDid.fromString(validDidWithSwitchedParamsOrder); - - assert.exists(validDid); - assert.exists(validDid.getDidTopicId()); - assert.equal(validDid.getDidTopicId().toString(), didTopicId); - }); + it("Test Generate And Parse Did With Tid", async function () { + const didTopicId = "1.5.23462345"; + + const privateKey = HcsDid.generateDidRootKey(); + + const topicId = TopicId.fromString(didTopicId); + const did = new HcsDid(network, privateKey.publicKey, topicId); + + const didString = did.toString(); + + assert.exists(didString); + + const parsedDid = HcsDid.fromString(didString); + + assert.exists(parsedDid); + assert.exists(parsedDid.getDidTopicId()); + + assert.equal(parsedDid.toDid(), didString); + assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); + assert.equal(parsedDid.getNetwork(), network); + assert.equal(parsedDid.getDidTopicId().toString(), didTopicId); + assert.equal(parsedDid.getIdString(), did.getIdString()); + + const parsedDocument = parsedDid.generateDidDocument(); + + assert.exists(parsedDocument); + assert.equal(parsedDocument.getId(), parsedDid.toString()); + assert.equal(parsedDocument.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); + assert.notExists(parsedDocument.getDidRootKey()); + + const document = did.generateDidDocument(); + + assert.exists(document); + assert.equal(document.getId(), parsedDid.toString()); + assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); + assert.exists(document.getDidRootKey()); + assert.equal(document.getDidRootKey().getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); + }); + + it("Test Parse Predefined Dids", async function () { + const didTopicId = "1.5.23462345"; + + const validDidWithSwitchedParamsOrder = + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + "_" + didTopicId; + + const invalidDids = [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ]; + + for (let did of invalidDids) { + assert.throw(() => { + HcsDid.fromString(did); + }); + } + + const validDid = HcsDid.fromString(validDidWithSwitchedParamsOrder); + + assert.exists(validDid); + assert.exists(validDid.getDidTopicId()); + assert.equal(validDid.getDidTopicId().toString(), didTopicId); + }); }); diff --git a/test/hcs-identity-network.js b/test/hcs-identity-network.js index 315b5a7..64cd958 100644 --- a/test/hcs-identity-network.js +++ b/test/hcs-identity-network.js @@ -1,18 +1,7 @@ const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("./variables"); -const { - AccountId, - PrivateKey, - Client, - Hbar, - TopicInfoQuery, - TopicId, -} = require("@hashgraph/sdk"); - -const { - HcsDid, - HcsIdentityNetworkBuilder, - HcsIdentityNetwork, -} = require("../dist"); +const { AccountId, PrivateKey, Client, Hbar, TopicInfoQuery, TopicId } = require("@hashgraph/sdk"); + +const { HcsDid, HcsIdentityNetworkBuilder, HcsIdentityNetwork } = require("../dist"); const { assert } = require("chai"); @@ -22,109 +11,95 @@ const DID_TOPIC_ID = TopicId.fromString("0.0.214920"); let client, operatorId, operatorKey, network; describe("HcsIdentityNetwork", function () { - before(async function () { - this.timeout(60000); - - operatorId = AccountId.fromString(OPERATOR_ID); - operatorKey = PrivateKey.fromString(OPERATOR_KEY); - network = NETWORK; - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + network + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("Test Create Identity Network", async function () { - this.timeout(60000); - const didTopicMemo = "Test Identity SDK appnet DID topic"; - const vcTopicMemo = "Test Identity SDK appnet VC topic"; - - const didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(network) - .setPublicKey(operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .execute(client); - - assert.exists(didNetwork); - - const didTopicInfo = await new TopicInfoQuery() - .setTopicId(didNetwork.getDidTopicId()) - .execute(client); - - assert.exists(didTopicInfo); - assert.equal(didTopicInfo.topicMemo, didTopicMemo); - - const vcTopicInfo = await new TopicInfoQuery() - .setTopicId(didNetwork.getVcTopicId()) - .execute(client); - - assert.exists(vcTopicInfo); - assert.equal(vcTopicInfo.topicMemo, vcTopicMemo); - }); - - it("Test Init Network From Did topic", async function () { - this.timeout(60000); - const did = new HcsDid( - network, - HcsDid.generateDidRootKey().publicKey, - DID_TOPIC_ID - ); - - const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic( - network, - did.getDidTopicId() - ); - - assert.exists(didNetwork); - assert.equal(didNetwork.getDidTopicId(), DID_TOPIC_ID); - assert.equal(didNetwork.getNetwork(), network); - }); - - it("Test Generate Did For Network", async function () { - this.timeout(60000); - - function checkTestGenerateDidForNetwork(did, publicKey, didTopicId) { - assert.exists(did); - assert.equal(HcsDid.publicKeyToIdString(publicKey), did.getIdString()); - assert.equal(did.getNetwork(), network); - assert.equal(did.getDidTopicId().toString(), didTopicId); - assert.equal(did.getMethod(), HcsDid.DID_METHOD); - } - - const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic( - network, - DID_TOPIC_ID - ); - - let did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - - let publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey); - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey); - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - }); + before(async function () { + this.timeout(60000); + + operatorId = AccountId.fromString(OPERATOR_ID); + operatorKey = PrivateKey.fromString(OPERATOR_KEY); + network = NETWORK; + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + network + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("Test Create Identity Network", async function () { + this.timeout(60000); + const didTopicMemo = "Test Identity SDK appnet DID topic"; + const vcTopicMemo = "Test Identity SDK appnet VC topic"; + + const didNetwork = await new HcsIdentityNetworkBuilder() + .setNetwork(network) + .setPublicKey(operatorKey.publicKey) + .setMaxTransactionFee(FEE) + .setDidTopicMemo(didTopicMemo) + .setVCTopicMemo(vcTopicMemo) + .execute(client); + + assert.exists(didNetwork); + + const didTopicInfo = await new TopicInfoQuery().setTopicId(didNetwork.getDidTopicId()).execute(client); + + assert.exists(didTopicInfo); + assert.equal(didTopicInfo.topicMemo, didTopicMemo); + + const vcTopicInfo = await new TopicInfoQuery().setTopicId(didNetwork.getVcTopicId()).execute(client); + + assert.exists(vcTopicInfo); + assert.equal(vcTopicInfo.topicMemo, vcTopicMemo); + }); + + it("Test Init Network From Did topic", async function () { + this.timeout(60000); + const did = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, DID_TOPIC_ID); + + const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic(network, did.getDidTopicId()); + + assert.exists(didNetwork); + assert.equal(didNetwork.getDidTopicId(), DID_TOPIC_ID); + assert.equal(didNetwork.getNetwork(), network); + }); + + it("Test Generate Did For Network", async function () { + this.timeout(60000); + + function checkTestGenerateDidForNetwork(did, publicKey, didTopicId) { + assert.exists(did); + assert.equal(HcsDid.publicKeyToIdString(publicKey), did.getIdString()); + assert.equal(did.getNetwork(), network); + assert.equal(did.getDidTopicId().toString(), didTopicId); + assert.equal(did.getMethod(), HcsDid.DID_METHOD); + } + + const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic(network, DID_TOPIC_ID); + + let did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + + let publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + did = didNetwork.generateDid(); + assert.exists(did.getPrivateDidRootKey()); + publicKey = did.getPrivateDidRootKey().publicKey; + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + publicKey = HcsDid.generateDidRootKey().publicKey; + did = didNetwork.generateDid(publicKey); + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + + publicKey = HcsDid.generateDidRootKey().publicKey; + did = didNetwork.generateDid(publicKey); + checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); + }); }); diff --git a/test/network-ready-test-base.js b/test/network-ready-test-base.js index 28e08da..eabf1eb 100644 --- a/test/network-ready-test-base.js +++ b/test/network-ready-test-base.js @@ -11,197 +11,195 @@ const EXISTING_DID_TOPIC_ID = null; const EXISTING_VC_TOPIC_ID = null; const sleep = function (sleepTime) { - return new Promise((resolve) => { - setTimeout(() => { - resolve(); - }, sleepTime); - }); + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, sleepTime); + }); }; const until = function (maxTime, untilFunction) { - return new Promise((resolve) => { - let t, i; - i = setInterval(() => { - if (untilFunction()) { - clearInterval(i); - clearTimeout(t); - resolve(); - } - }, 100); - t = setTimeout(() => { - clearInterval(i); - clearTimeout(t); - resolve(); - }, maxTime); - }); + return new Promise((resolve) => { + let t, i; + i = setInterval(() => { + if (untilFunction()) { + clearInterval(i); + clearTimeout(t); + resolve(); + } + }, 100); + t = setTimeout(() => { + clearInterval(i); + clearTimeout(t); + resolve(); + }, maxTime); + }); }; /** * Base class for test classes that need a hedera identity network set up before running. */ class NetworkReadyTestBase { - operatorId; - operatorKey; - network; - didNetwork; - client; - - /** - * Initialize hedera clients and accounts. - */ - // BeforeAll - async setup() { - this.operatorId = AccountId.fromString(OPERATOR_ID); - this.operatorKey = PrivateKey.fromString(OPERATOR_KEY); - this.network = NETWORK; - - // Build Hedera testnet client - switch (this.network.toUpperCase()) { - case "MAINNET": - this.client = Client.forMainnet(); - break; - case "TESTNET": - this.client = Client.forTestnet(); - break; - case "PREVIEWNET": - this.client = Client.forPreviewnet(); - break; - default: - throw "Illegal argument for network."; + operatorId; + operatorKey; + network; + didNetwork; + client; + + /** + * Initialize hedera clients and accounts. + */ + // BeforeAll + async setup() { + this.operatorId = AccountId.fromString(OPERATOR_ID); + this.operatorKey = PrivateKey.fromString(OPERATOR_KEY); + this.network = NETWORK; + + // Build Hedera testnet client + switch (this.network.toUpperCase()) { + case "MAINNET": + this.client = Client.forMainnet(); + break; + case "TESTNET": + this.client = Client.forTestnet(); + break; + case "PREVIEWNET": + this.client = Client.forPreviewnet(); + break; + default: + throw "Illegal argument for network."; + } + + // Set the operator account ID and operator private key + this.client.setOperator(this.operatorId, this.operatorKey); + + await this.setupIdentityNetwork(); } - // Set the operator account ID and operator private key - this.client.setOperator(this.operatorId, this.operatorKey); - - await this.setupIdentityNetwork(); - } - - async setupIdentityNetwork() { - const appnetName = "Test Identity SDK appnet"; - const didServerUrl = "http://localhost:3000/api/v1"; - const didTopicMemo = "Test Identity SDK appnet DID topic"; - const vcTopicMemo = "Test Identity SDK appnet VC topic"; - - this.didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(this.network) - .setPublicKey(this.operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .setDidTopicId(EXISTING_DID_TOPIC_ID) - .setVCTopicId(EXISTING_VC_TOPIC_ID) - .execute(this.client); - console.info("New identity network created: " + appnetName); - console.info( - "Sleeping 10s to allow propagation of new topics to mirror node" - ); - - await sleep(10000); - } - - //AfterAll - cleanup() { - try { - if (this.client != null) { - this.client.close(); - } - - if (this.client != null) { - this.client.close(); - } - } catch (e) { - // ignore + async setupIdentityNetwork() { + const appnetName = "Test Identity SDK appnet"; + const didServerUrl = "http://localhost:3000/api/v1"; + const didTopicMemo = "Test Identity SDK appnet DID topic"; + const vcTopicMemo = "Test Identity SDK appnet VC topic"; + + this.didNetwork = await new HcsIdentityNetworkBuilder() + .setNetwork(this.network) + .setPublicKey(this.operatorKey.publicKey) + .setMaxTransactionFee(FEE) + .setDidTopicMemo(didTopicMemo) + .setVCTopicMemo(vcTopicMemo) + .setDidTopicId(EXISTING_DID_TOPIC_ID) + .setVCTopicId(EXISTING_VC_TOPIC_ID) + .execute(this.client); + console.info("New identity network created: " + appnetName); + console.info("Sleeping 10s to allow propagation of new topics to mirror node"); + + await sleep(10000); } - } - - async sendDidTransaction(did, didDocumentJson, operation, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork - .createDidTransaction(operation) - .setDidDocument(didDocumentJson) - .signMessage((doc) => did.getPrivateDidRootKey().sign(doc)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed((msg) => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined; + + //AfterAll + cleanup() { + try { + if (this.client != null) { + this.client.close(); + } + + if (this.client != null) { + this.client.close(); + } + } catch (e) { + // ignore + } + } + + async sendDidTransaction(did, didDocumentJson, operation, onError) { + const messageRef = []; + + // Build and execute transaction + await this.didNetwork + .createDidTransaction(operation) + .setDidDocument(didDocumentJson) + .signMessage((doc) => did.getPrivateDidRootKey().sign(doc)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) + .onMessageConfirmed((msg) => messageRef.push(msg)) + .onError(onError) + .execute(this.client); + + // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. + await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); + + try { + return messageRef[0]; + } catch (error) { + return undefined; + } } - } - - async resolveDid(didString, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork - .getDidResolver() - .addDid(didString) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished((m) => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(didString); - } catch (error) { - return undefined; + + async resolveDid(didString, onError) { + const mapRef = []; + + // Now resolve the DID. + this.didNetwork + .getDidResolver() + .addDid(didString) + .setTimeout(NO_MORE_MESSAGES_TIMEOUT) + .onError(onError) + .whenFinished((m) => mapRef.push(m)) + .execute(this.client); + + // Wait until mirror node resolves the DID. + await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); + + try { + return mapRef[0].get(didString); + } catch (error) { + return undefined; + } } - } - - async sendVcTransaction(operation, credentialHash, signingKey, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork - .createVcTransaction(operation, credentialHash, signingKey.publicKey) - .signMessage((doc) => signingKey.sign(doc)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed((msg) => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined; + + async sendVcTransaction(operation, credentialHash, signingKey, onError) { + const messageRef = []; + + // Build and execute transaction + await this.didNetwork + .createVcTransaction(operation, credentialHash, signingKey.publicKey) + .signMessage((doc) => signingKey.sign(doc)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) + .onMessageConfirmed((msg) => messageRef.push(msg)) + .onError(onError) + .execute(this.client); + + // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. + await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); + + try { + return messageRef[0]; + } catch (error) { + return undefined; + } } - } - - async resolveVcStatus(credentialHash, provider, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork - .getVcStatusResolver(provider) - .addCredentialHash(credentialHash) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished((m) => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(credentialHash); - } catch (error) { - return undefined; + + async resolveVcStatus(credentialHash, provider, onError) { + const mapRef = []; + + // Now resolve the DID. + this.didNetwork + .getVcStatusResolver(provider) + .addCredentialHash(credentialHash) + .setTimeout(NO_MORE_MESSAGES_TIMEOUT) + .onError(onError) + .whenFinished((m) => mapRef.push(m)) + .execute(this.client); + + // Wait until mirror node resolves the DID. + await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); + + try { + return mapRef[0].get(credentialHash); + } catch (error) { + return undefined; + } } - } } exports.NetworkReadyTestBase = NetworkReadyTestBase; diff --git a/test/variables.js b/test/variables.js index 1a50948..4d31d36 100644 --- a/test/variables.js +++ b/test/variables.js @@ -1,34 +1,34 @@ const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; // testnet, previewnet, mainnet -const NETWORK = process.env.NETWORK || 'testnet'; +const NETWORK = process.env.NETWORK || "testnet"; // hedera, kabuto (note kabuto not available on previewnet) -const MIRROR_PROVIDER = process.env.MIRROR_PROVIDER || 'hedera'; +const MIRROR_PROVIDER = process.env.MIRROR_PROVIDER || "hedera"; if (!OPERATOR_ID || !/^\d+\.\d+\.\d+$/.test(OPERATOR_ID)) { - console.error('Missing or invalid OPERATOR_ID'); - process.exit(1); + console.error("Missing or invalid OPERATOR_ID"); + process.exit(1); } if (!OPERATOR_KEY) { - console.error('Missing required OPERATOR_KEY'); - process.exit(1); + console.error("Missing required OPERATOR_KEY"); + process.exit(1); } if (!NETWORK || !/^(mainnet|previewnet|testnet)$/.test(NETWORK)) { - console.error('Missing or invalid NETWORK'); - process.exit(1); + console.error("Missing or invalid NETWORK"); + process.exit(1); } if (!MIRROR_PROVIDER || !/^(hedera|kabuto)$/.test(MIRROR_PROVIDER)) { - console.error('Missing or invalid MIRROR_PROVIDER'); - process.exit(1); + console.error("Missing or invalid MIRROR_PROVIDER"); + process.exit(1); } module.exports = { OPERATOR_ID, OPERATOR_KEY, NETWORK, - MIRROR_PROVIDER -} + MIRROR_PROVIDER, +}; diff --git a/test/vc/demo-access-credential.js b/test/vc/demo-access-credential.js index e68a7eb..782e811 100644 --- a/test/vc/demo-access-credential.js +++ b/test/vc/demo-access-credential.js @@ -1,6 +1,4 @@ -const { - CredentialSubject -} = require("../../dist"); +const { CredentialSubject } = require("../../dist"); /** * Example Credential. diff --git a/test/vc/demo-verifiable-credential-document.js b/test/vc/demo-verifiable-credential-document.js index 728e1e0..83948db 100644 --- a/test/vc/demo-verifiable-credential-document.js +++ b/test/vc/demo-verifiable-credential-document.js @@ -1,6 +1,4 @@ -const { - HcsVcDocumentBase -} = require("../../dist"); +const { HcsVcDocumentBase } = require("../../dist"); /** * Custom VC document for tests. @@ -21,4 +19,4 @@ class DemoVerifiableCredentialDocument extends HcsVcDocumentBase { } } -exports.DemoVerifiableCredentialDocument = DemoVerifiableCredentialDocument; \ No newline at end of file +exports.DemoVerifiableCredentialDocument = DemoVerifiableCredentialDocument; diff --git a/test/vc/hcs-vc-document-base-test.js b/test/vc/hcs-vc-document-base-test.js index 6adec15..0f1f773 100644 --- a/test/vc/hcs-vc-document-base-test.js +++ b/test/vc/hcs-vc-document-base-test.js @@ -1,21 +1,10 @@ -const { - HcsVcDocumentBase, - Issuer -} = require("../../dist"); -const { - Timestamp -} = require('@hashgraph/sdk'); -const { - DemoAccessCredential -} = require("./demo-access-credential"); -const { - DemoVerifiableCredentialDocument -} = require("./demo-verifiable-credential-document"); -const { - NetworkReadyTestBase -} = require("../network-ready-test-base"); - -const { expect, assert } = require('chai'); +const { HcsVcDocumentBase, Issuer } = require("../../dist"); +const { Timestamp } = require("@hashgraph/sdk"); +const { DemoAccessCredential } = require("./demo-access-credential"); +const { DemoVerifiableCredentialDocument } = require("./demo-verifiable-credential-document"); +const { NetworkReadyTestBase } = require("../network-ready-test-base"); + +const { expect, assert } = require("chai"); describe("HcsVcDocumentBaseTest", function () { const network = new NetworkReadyTestBase(); @@ -33,7 +22,7 @@ describe("HcsVcDocumentBaseTest", function () { network.cleanup(); }); - it('Test VcDocumentConstruction', async function () { + it("Test VcDocumentConstruction", async function () { const vc = new HcsVcDocumentBase(); // Should fail as no issuer is set. @@ -78,8 +67,7 @@ describe("HcsVcDocumentBaseTest", function () { assert.isTrue(vc.isComplete()); }); - - it('Test VcJsonConversion', async function () { + it("Test VcJsonConversion", async function () { const vc = new HcsVcDocumentBase(); vc.setId("example:test:vc:id"); vc.setIssuer(new Issuer(issuer.toDid(), "My Company Ltd.")); @@ -90,7 +78,7 @@ describe("HcsVcDocumentBaseTest", function () { // Convert to JSON const json = vc.toJSON(); - assert.isFalse(!(json)); + assert.isFalse(!json); // Convert back to VC document and compare const vcFromJson = HcsVcDocumentBase.fromJson(json, DemoAccessCredential); @@ -116,7 +104,7 @@ describe("HcsVcDocumentBaseTest", function () { assert.equal(subject.getRedLevel(), subjectFromJson.getRedLevel()); }); - it('Test CredentialHash', async function () { + it("Test CredentialHash", async function () { const vc = new DemoVerifiableCredentialDocument(); vc.setId("example:test:vc:id"); vc.setIssuer(issuer); diff --git a/test/vc/hcs-vc-document-operations-test.js b/test/vc/hcs-vc-document-operations-test.js index 8f18804..03262c3 100644 --- a/test/vc/hcs-vc-document-operations-test.js +++ b/test/vc/hcs-vc-document-operations-test.js @@ -1,20 +1,9 @@ +const { HcsVcDocumentBase, HcsVcOperation } = require("../../dist"); +const { Timestamp } = require("@hashgraph/sdk"); +const { DemoAccessCredential } = require("./demo-access-credential"); +const { NetworkReadyTestBase } = require("../network-ready-test-base"); -const { - HcsVcDocumentBase, - HcsVcOperation -} = require("../../dist"); -const { - Timestamp -} = require('@hashgraph/sdk'); -const { - DemoAccessCredential -} = require("./demo-access-credential"); -const { - NetworkReadyTestBase -} = require("../network-ready-test-base"); - -const { expect, assert } = require('chai'); - +const { expect, assert } = require("chai"); /** * Tests operations on verifiable credentials and their status resolution. @@ -66,7 +55,7 @@ describe("HcsVcDocumentOperationsTest", function () { assert.isTrue(msg.isValid()); assert.equal(op, msg.getOperation()); assert.equal(credentialHash, msg.getCredentialHash()); - } + }; const testVcStatusResolution = async function (expectedOperation) { const envelope = await network.resolveVcStatus( @@ -83,33 +72,33 @@ describe("HcsVcDocumentOperationsTest", function () { assert.isTrue(msg.isValid()); assert.equal(credentialHash, msg.getCredentialHash()); assert.equal(expectedOperation, msg.getOperation()); - } + }; - it('Test Issue', async function () { + it("Test Issue", async function () { this.timeout(60000); await testVcOperation(HcsVcOperation.ISSUE); await testVcStatusResolution(HcsVcOperation.ISSUE); }); - it('Test Suspend', async function () { + it("Test Suspend", async function () { this.timeout(60000); await testVcOperation(HcsVcOperation.SUSPEND); await testVcStatusResolution(HcsVcOperation.SUSPEND); }); - it('Test Resume', async function () { + it("Test Resume", async function () { this.timeout(60000); await testVcOperation(HcsVcOperation.RESUME); await testVcStatusResolution(HcsVcOperation.RESUME); }); - it('Test Revoke', async function () { + it("Test Revoke", async function () { this.timeout(60000); await testVcOperation(HcsVcOperation.REVOKE); await testVcStatusResolution(HcsVcOperation.REVOKE); }); - it('Test InvalidResumeAfterRevoke', async function () { + it("Test InvalidResumeAfterRevoke", async function () { this.timeout(120000); await testVcOperation(HcsVcOperation.RESUME); // Status should still be revoked @@ -119,4 +108,4 @@ describe("HcsVcDocumentOperationsTest", function () { // Status should still be revoked await testVcStatusResolution(HcsVcOperation.REVOKE); }); -}); \ No newline at end of file +}); diff --git a/test/vc/hcs-vc-encryption-test.js b/test/vc/hcs-vc-encryption-test.js index 413e804..711d40b 100644 --- a/test/vc/hcs-vc-encryption-test.js +++ b/test/vc/hcs-vc-encryption-test.js @@ -1,28 +1,12 @@ -const { - Hbar, Timestamp, -} = require('@hashgraph/sdk'); - -const { - HcsVcDocumentBase, - HcsVcOperation, - HcsVcMessage, - MessageEnvelope, - ArraysUtils -} = require("../../dist"); -const { - DemoAccessCredential -} = require("./demo-access-credential"); -const { - DemoVerifiableCredentialDocument -} = require("./demo-verifiable-credential-document"); -const { - NetworkReadyTestBase, until, sleep -} = require("../network-ready-test-base"); -const { - encrypt, decrypt -} = require("../aes-encryption-util"); - -const { expect, assert } = require('chai'); +const { Hbar, Timestamp } = require("@hashgraph/sdk"); + +const { HcsVcDocumentBase, HcsVcOperation, HcsVcMessage, MessageEnvelope, ArraysUtils } = require("../../dist"); +const { DemoAccessCredential } = require("./demo-access-credential"); +const { DemoVerifiableCredentialDocument } = require("./demo-verifiable-credential-document"); +const { NetworkReadyTestBase, until, sleep } = require("../network-ready-test-base"); +const { encrypt, decrypt } = require("../aes-encryption-util"); + +const { expect, assert } = require("chai"); /** * Tests operations on verifiable credentials and their status resolution. @@ -69,18 +53,19 @@ describe("HcsVcEncryptionTest", function () { network.cleanup(); }); - it('Test IssueValidEncryptedMessage', async function () { + it("Test IssueValidEncryptedMessage", async function () { this.timeout(60000); const messageRef = []; // Build and execute transaction with encrypted message - await network.didNetwork.createVcTransaction(HcsVcOperation.ISSUE, credentialHash, issuersPrivateKey.publicKey) - .signMessage(doc => issuersPrivateKey.sign(doc)) - .buildAndSignTransaction(tx => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed(msg => messageRef.push(msg)) + await network.didNetwork + .createVcTransaction(HcsVcOperation.ISSUE, credentialHash, issuersPrivateKey.publicKey) + .signMessage((doc) => issuersPrivateKey.sign(doc)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) + .onMessageConfirmed((msg) => messageRef.push(msg)) .onError(EXPECT_NO_ERROR) - .onEncrypt(m => encrypt(m, SECRET)) + .onEncrypt((m) => encrypt(m, SECRET)) .onDecrypt((m, i) => decrypt(m, SECRET)) .execute(network.client); @@ -101,18 +86,19 @@ describe("HcsVcEncryptionTest", function () { await sleep(1000); }); - it('Test ResolveWithValidDecrypter', async function () { + it("Test ResolveWithValidDecrypter", async function () { this.timeout(60000); const mapRef = []; // Resolve encrypted message - network.didNetwork.getVcStatusResolver(m => [issuersPrivateKey.publicKey]) + network.didNetwork + .getVcStatusResolver((m) => [issuersPrivateKey.publicKey]) .addCredentialHash(credentialHash) .setTimeout(NO_MORE_MESSAGES_TIMEOUT) .onError(EXPECT_NO_ERROR) .onDecrypt((m, i) => decrypt(m, SECRET)) - .whenFinished(m => mapRef.push(m)) + .whenFinished((m) => mapRef.push(m)) .execute(network.client); // Wait until mirror node resolves the DID. @@ -132,19 +118,20 @@ describe("HcsVcEncryptionTest", function () { await sleep(1000); }); - it('Test ResolveWithInvalidDecrypter', async function () { + it("Test ResolveWithInvalidDecrypter", async function () { this.timeout(60000); const mapRef = []; const errorRef = []; // Try to resolve encrypted message with a wrong secret - network.didNetwork.getVcStatusResolver(m => [issuersPrivateKey.publicKey]) + network.didNetwork + .getVcStatusResolver((m) => [issuersPrivateKey.publicKey]) .addCredentialHash(credentialHash) .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(e => errorRef.push(String(e))) + .onError((e) => errorRef.push(String(e))) .onDecrypt((m, i) => decrypt(m, INVALID_SECRET)) - .whenFinished(m => mapRef.push(m)) + .whenFinished((m) => mapRef.push(m)) .execute(network.client); // Wait until mirror node resolves the DID. @@ -159,18 +146,16 @@ describe("HcsVcEncryptionTest", function () { await sleep(1000); }); - it('Test MessageEncryptionDecryption', async function () { + it("Test MessageEncryptionDecryption", async function () { this.timeout(60000); const msg = HcsVcMessage.fromCredentialHash(credentialHash, HcsVcOperation.ISSUE); - const encryptedMsg = msg - .encrypt(HcsVcMessage.getEncrypter(m => encrypt(m, SECRET))); + const encryptedMsg = msg.encrypt(HcsVcMessage.getEncrypter((m) => encrypt(m, SECRET))); assert.exists(encryptedMsg); - - const msgJson = ArraysUtils.toString(encryptedMsg.sign(m => issuersPrivateKey.sign(m))); + const msgJson = ArraysUtils.toString(encryptedMsg.sign((m) => issuersPrivateKey.sign(m))); const encryptedSignedMsg = MessageEnvelope.fromJson(msgJson, HcsVcMessage); assert.exists(encryptedSignedMsg); @@ -182,11 +167,10 @@ describe("HcsVcEncryptionTest", function () { assert.exists(error); } - const decryptedMsg = encryptedSignedMsg - .open(HcsVcMessage.getDecrypter((m, i) => decrypt(m, SECRET))); + const decryptedMsg = encryptedSignedMsg.open(HcsVcMessage.getDecrypter((m, i) => decrypt(m, SECRET))); assert.exists(decryptedMsg); assert.equal(credentialHash, decryptedMsg.getCredentialHash()); assert.equal(encryptedSignedMsg.open().getTimestamp(), decryptedMsg.getTimestamp()); }); -}); \ No newline at end of file +}); From b12260eaff927b064fa5235ccc134cbb039bfeb6 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 28 Jan 2022 11:43:26 +1100 Subject: [PATCH 016/133] added minimum node version --- .npmrc | 1 + package-lock.json | 4 ++++ package.json | 4 ++++ 3 files changed, 9 insertions(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4fd0219 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a97603e..0ede59d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,10 @@ "nodemon": "^2.0.7", "prettier": "2.5.1", "typescript": "^4.3.2" + }, + "engines": { + "node": ">=16.13.1", + "npm": ">=8.1.2" } }, "node_modules/@grpc/grpc-js": { diff --git a/package.json b/package.json index 3db515d..be0a3bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,10 @@ { "name": "@hashgraph/did-sdk-js", "version": "0.1.1", + "engines": { + "npm": ">=8.1.2", + "node": ">=16.13.1" + }, "description": "Support for the Hedera Hashgraph DID Method and Verifiable Credentials on the Hedera JavaScript/TypeScript SDK", "main": "dist/index.js", "module": "dist/index.js", From f30690525b5ff23f779f57feaec3adee0611dbff Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 28 Jan 2022 14:28:51 +1100 Subject: [PATCH 017/133] adding demo page to test did and did document creation --- demo/demo.js | 24 ++++++++++++++++++++++++ src/identity/hcs/did/hcs-did.ts | 17 ++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 demo/demo.js diff --git a/demo/demo.js b/demo/demo.js new file mode 100644 index 0000000..a7330b2 --- /dev/null +++ b/demo/demo.js @@ -0,0 +1,24 @@ +const { PublicKey, TopicId } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); + +const didTopicId = "0.0.12345"; +const privateKey = HcsDid.generateDidRootKey(); +const network = "testnet"; + +const topicId = TopicId.fromString(didTopicId); +const did = new HcsDid(network, privateKey.publicKey, topicId); + +const didString = did.toString(); + +console.log(`did: ${didString}`); + +// console.log(did); +console.log(`did-document: ${did.generateDidDocument().toJSON()}`); + +const didFromString = HcsDid.fromStringWithDidRootKey(didString, privateKey.publicKey); + +// console.log(did); +console.log(`did-document: ${didFromString.generateDidDocument().toJSON()}`); + +console.log("\n"); +console.log("\n"); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index ad24445..10b4605 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -40,8 +40,9 @@ export class HcsDid implements HederaDid { * @param network The Hedera DID network. * @param idString The id-string of a DID. * @param didTopicId The appnet's DID topic ID. + * @param didRootKey The public key from which DID is derived. */ - constructor(network: string, idString: string, didTopicId: TopicId); + constructor(network: string, idString: string, didTopicId: TopicId, didRootKey?: PublicKey); constructor(...args: any[]) { if ( typeof args[0] === "string" && @@ -81,13 +82,15 @@ export class HcsDid implements HederaDid { typeof args[0] === "string" && typeof args[1] === "string" && (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 + (args[3] instanceof PublicKey || args[3] === undefined) && + args.length === 4 ) { - const [network, idString, didTopicId] = args; + const [network, idString, didTopicId, didRootKey] = args; this.didTopicId = didTopicId; this.network = network; this.idString = idString; + this.didRootKey = didRootKey; this.did = this.buildDid(); return; @@ -102,7 +105,7 @@ export class HcsDid implements HederaDid { * @param didString A Hedera DID string. * @return {@link HcsDid} object derived from the given Hedera DID string. */ - public static fromString(didString: string): HcsDid { + public static fromString(didString: string, didRootKey?: PublicKey): HcsDid { if (!didString) { throw new Error("DID string cannot be null"); } @@ -139,12 +142,16 @@ export class HcsDid implements HederaDid { throw new Error("DID string is invalid."); } - return new HcsDid(networkName, didIdString, topicId); + return new HcsDid(networkName, didIdString, topicId, didRootKey); } catch (e) { throw new Error("DID string is invalid. " + e.message); } } + public static fromStringWithDidRootKey(didString: string, didRootKey: PublicKey): HcsDid { + return this.fromString(didString, didRootKey); + } + /** * Generates a random DID root key. * From 586a5790202024e675eeaadc572e879f2b0f7fee Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 28 Jan 2022 16:26:19 +1100 Subject: [PATCH 018/133] added property assertion method to did-doc --- src/identity/did-document-base.ts | 1 + src/identity/did-document-json-properties.ts | 1 + test/did/hcs-did-method-operations.js | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index fa026d3..d4998b2 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -68,6 +68,7 @@ export class DidDocumentBase { * TODO: investigate, should we just leave such cases crash? */ if (this.didRootKey) { + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [this.didRootKey.getId()]; rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; } else { diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index 85441fc..afbf6bc 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -3,6 +3,7 @@ export module DidDocumentJsonProperties { export const ID = "id"; export const AUTHENTICATION = "authentication"; export const VERIFICATION_METHOD = "verificationMethod"; + export const ASSERTION_METHOD = "assertionMethod"; export const SERVICE = "service"; export const CREATED = "created"; export const UPDATED = "updated"; diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index 9e020dc..dc0d24b 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -106,6 +106,10 @@ describe("Hcs Did Method Operations", function () { rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; } + if (rootObject.hasOwnProperty(DidDocumentJsonProperties.ASSERTION_METHOD)) { + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = []; + } + const deletedDoc = JSON.stringify(rootObject); const operation = DidMethodOperation.DELETE; From 32a31ef6a32eceb6085b83003fbc755d0bd4c0bf Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 31 Jan 2022 14:26:34 +1100 Subject: [PATCH 019/133] added multibase support for public key --- package-lock.json | 50 +++++++-------------- package.json | 4 +- src/identity/hcs/did/hcs-did-message.ts | 4 +- src/identity/hcs/did/hcs-did-root-key.ts | 6 +-- src/identity/hcs/did/hcs-did.ts | 2 +- src/identity/hcs/vc/hcs-vc-document-base.ts | 2 +- src/utils/hashing.ts | 25 +++++++---- test/did-document-base.js | 5 +-- test/did/hcs-did-root-key.js | 5 +-- test/did/hcs-did.js | 10 +++-- 10 files changed, 50 insertions(+), 63 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ede59d..2dc174f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "license": "Apache-2.0", "dependencies": { "@hashgraph/sdk": "^2.0.20", - "bs58": "^4.0.1", "js-base64": "^3.6.1", - "moment": "^2.29.1" + "moment": "^2.29.1", + "multiformats": "^9.6.2" }, "devDependencies": { "@types/node": "^16.7.7", @@ -322,14 +322,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -441,14 +433,6 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -1425,6 +1409,11 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/multiformats": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", + "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" + }, "node_modules/nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", @@ -1805,6 +1794,7 @@ "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", @@ -2568,14 +2558,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2654,14 +2636,6 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -3399,6 +3373,11 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "multiformats": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", + "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" + }, "nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", @@ -3678,7 +3657,8 @@ "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==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "semver": { "version": "5.7.1", diff --git a/package.json b/package.json index be0a3bc..cee8ff6 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ }, "dependencies": { "@hashgraph/sdk": "^2.0.20", - "bs58": "^4.0.1", "js-base64": "^3.6.1", - "moment": "^2.29.1" + "moment": "^2.29.1", + "multiformats": "^9.6.2" } } diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 2400f1f..2e79bdd 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -139,7 +139,7 @@ export class HcsDidMessage extends Message { const hcsDid: HcsDid = HcsDid.fromString(this.did); // Extract public key from the DID document - const publicKeyBytes: Uint8Array = Hashing.base58.decode(doc.getDidRootKey().getPublicKeyBase58()); + const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyBase58()); const publicKey: PublicKey = PublicKey.fromBytes(publicKeyBytes); if (HcsDid.publicKeyToIdString(publicKey) != hcsDid.getIdString()) { @@ -172,7 +172,7 @@ export class HcsDidMessage extends Message { const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); // Make sure that DID root key is present in the document if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyBase58() != null) { - const publicKeyBytes: Uint8Array = Hashing.base58.decode(doc.getDidRootKey().getPublicKeyBase58()); + const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyBase58()); result = PublicKey.fromBytes(publicKeyBytes); } // ArrayIndexOutOfBoundsException is thrown in case public key is invalid in PublicKey.fromBytes diff --git a/src/identity/hcs/did/hcs-did-root-key.ts b/src/identity/hcs/did/hcs-did-root-key.ts index 5b83ea6..802848b 100644 --- a/src/identity/hcs/did/hcs-did-root-key.ts +++ b/src/identity/hcs/did/hcs-did-root-key.ts @@ -1,7 +1,7 @@ import { PublicKey } from "@hashgraph/sdk"; -import bs58 from "bs58"; +import { Hashing } from "../../.."; import { HcsDid } from "./hcs-did"; - +import { base58btc } from "multiformats/bases/base58"; /** * Represents a root key of HCS Identity DID. * That is a public key of type Ed25519VerificationKey2018 compatible with a single publicKey entry of a DID Document. @@ -35,7 +35,7 @@ export class HcsDidRootKey { const result = new HcsDidRootKey(); result.controller = did.toDid(); result.id = result.controller + HcsDidRootKey.DID_ROOT_KEY_NAME; - result.publicKeyBase58 = bs58.encode(didRootKey.toBytes()); + result.publicKeyBase58 = Hashing.multibase.encode(didRootKey.toBytes()); result.type = HcsDidRootKey.DID_ROOT_KEY_TYPE; return result; diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 10b4605..1dd8a65 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -230,7 +230,7 @@ export class HcsDid implements HederaDid { * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. */ public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.base58.encode(Hashing.sha256.digest(didRootKey.toBytes())); + return Hashing.multibase.encode(Hashing.sha256.digest(didRootKey.toBytes())); } /** diff --git a/src/identity/hcs/vc/hcs-vc-document-base.ts b/src/identity/hcs/vc/hcs-vc-document-base.ts index b008e5e..25c1eba 100644 --- a/src/identity/hcs/vc/hcs-vc-document-base.ts +++ b/src/identity/hcs/vc/hcs-vc-document-base.ts @@ -47,7 +47,7 @@ export class HcsVcDocumentBase extends HcsVcDocumen map[HcsVcDocumentJsonProperties.ISSUANCE_DATE] = TimestampUtils.toJSON(this.issuanceDate); const json: string = JSON.stringify(map); const hash: Uint8Array = Hashing.sha256.digest(json); - return Hashing.base58.encode(hash); + return Hashing.multibase.encode(hash); } public getContext(): string[] { diff --git a/src/utils/hashing.ts b/src/utils/hashing.ts index 043e40e..bbd9bbb 100644 --- a/src/utils/hashing.ts +++ b/src/utils/hashing.ts @@ -1,16 +1,9 @@ import * as crypto from "crypto"; -import bs58 from "bs58"; +import { base58btc } from "multiformats/bases/base58"; import { Base64 } from "js-base64"; +import { MultibaseEncoder, MultibaseDecoder } from "multiformats/bases/interface"; export class Hashing { - public static readonly base58 = { - encode: function (data: Uint8Array): string { - return bs58.encode(data); - }, - decode: function (data: string): Uint8Array { - return bs58.decode(data); - }, - }; public static readonly sha256 = { digest: function (data: Uint8Array | string): Uint8Array { const sha256 = crypto @@ -29,4 +22,18 @@ export class Hashing { return Base64.toBase64(decodedBytes); }, }; + + /** + * @returns Multibase [MULTIBASE] base58-btc encoded value for the public key type and the raw bytes associated with the public key format. + * https://github.com/multiformats/multibase + * https://www.w3.org/TR/did-core/#dfn-publickeymultibase + */ + public static readonly multibase = { + encode: function (data: Uint8Array, base: MultibaseEncoder = base58btc): string { + return base.encode(data); + }, + decode: function (data: string, base: MultibaseDecoder = base58btc): Uint8Array { + return base.decode(data); + }, + }; } diff --git a/test/did-document-base.js b/test/did-document-base.js index 4971870..baf6be7 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -1,6 +1,5 @@ -const { HcsDid, DidDocumentBase, DidDocumentJsonProperties, DidSyntax, HcsDidRootKey } = require("../dist"); +const { HcsDid, DidDocumentBase, DidDocumentJsonProperties, DidSyntax, HcsDidRootKey, Hashing } = require("../dist"); const { TopicId } = require("@hashgraph/sdk"); -const bs58 = require("bs58"); const { expect, assert } = require("chai"); const network = "testnet"; @@ -29,7 +28,7 @@ describe("DidDocumentBase", function () { assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); assert.equal(didRootKey[DidDocumentJsonProperties.ID], did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); assert.equal(didRootKey["controller"], did.toDid()); - assert.equal(didRootKey["publicKeyBase58"], bs58.encode(privateKey.publicKey.toBytes())); + assert.equal(didRootKey["publicKeyBase58"], Hashing.multibase.encode(privateKey.publicKey.toBytes())); }); it("Test Deserialization", async function () { diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js index 7930de4..abe0590 100644 --- a/test/did/hcs-did-root-key.js +++ b/test/did/hcs-did-root-key.js @@ -1,6 +1,5 @@ const { TopicId } = require("@hashgraph/sdk"); -const bs58 = require("bs58"); -const { HcsDid, HcsDidRootKey } = require("../../dist"); +const { HcsDid, HcsDidRootKey, Hashing } = require("../../dist"); const { assert } = require("chai"); @@ -35,6 +34,6 @@ describe("HcsDidRootKey", function () { assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); assert.equal(didRootKey.getId(), did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); assert.equal(didRootKey.getController(), did.toDid()); - assert.equal(didRootKey.getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); + assert.equal(didRootKey.getPublicKeyBase58(), Hashing.multibase.encode(privateKey.publicKey.toBytes())); }); }); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 170b24b..c04a58b 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -1,6 +1,5 @@ -const { FileId, TopicId } = require("@hashgraph/sdk"); -const bs58 = require("bs58"); -const { DidSyntax, HcsDid } = require("../../dist"); +const { TopicId } = require("@hashgraph/sdk"); +const { DidSyntax, HcsDid, Hashing } = require("../../dist"); const { assert } = require("chai"); @@ -43,7 +42,10 @@ describe("HcsDid", function () { assert.equal(document.getId(), parsedDid.toString()); assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); assert.exists(document.getDidRootKey()); - assert.equal(document.getDidRootKey().getPublicKeyBase58(), bs58.encode(privateKey.publicKey.toBytes())); + assert.equal( + document.getDidRootKey().getPublicKeyBase58(), + Hashing.multibase.encode(privateKey.publicKey.toBytes()) + ); }); it("Test Parse Predefined Dids", async function () { From bfc670133289abe59684bf1779bb33bc6d8b4073 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 31 Jan 2022 14:38:26 +1100 Subject: [PATCH 020/133] updated did document to have publicKeyMultibase prop --- src/identity/hcs/did/hcs-did-message.ts | 10 ++++++---- src/identity/hcs/did/hcs-did-root-key.ts | 14 +++++++------- test/did-document-base.js | 8 ++++---- test/did/hcs-did-method-operations.js | 2 +- test/did/hcs-did.js | 2 +- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 2e79bdd..57e08b3 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -131,7 +131,7 @@ export class HcsDidMessage extends Message { } // Validate if DID root key is present in the document - if (doc.getDidRootKey() == null || doc.getDidRootKey().getPublicKeyBase58() == null) { + if (doc.getDidRootKey() == null || doc.getDidRootKey().getPublicKeyMultibase() == null) { return false; } @@ -139,7 +139,7 @@ export class HcsDidMessage extends Message { const hcsDid: HcsDid = HcsDid.fromString(this.did); // Extract public key from the DID document - const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyBase58()); + const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyMultibase()); const publicKey: PublicKey = PublicKey.fromBytes(publicKeyBytes); if (HcsDid.publicKeyToIdString(publicKey) != hcsDid.getIdString()) { @@ -171,8 +171,10 @@ export class HcsDidMessage extends Message { try { const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); // Make sure that DID root key is present in the document - if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyBase58() != null) { - const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyBase58()); + if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyMultibase() != null) { + const publicKeyBytes: Uint8Array = Hashing.multibase.decode( + doc.getDidRootKey().getPublicKeyMultibase() + ); result = PublicKey.fromBytes(publicKeyBytes); } // ArrayIndexOutOfBoundsException is thrown in case public key is invalid in PublicKey.fromBytes diff --git a/src/identity/hcs/did/hcs-did-root-key.ts b/src/identity/hcs/did/hcs-did-root-key.ts index 802848b..905e0f5 100644 --- a/src/identity/hcs/did/hcs-did-root-key.ts +++ b/src/identity/hcs/did/hcs-did-root-key.ts @@ -13,7 +13,7 @@ export class HcsDidRootKey { private id: string; private type: string; private controller: string; - private publicKeyBase58: string; + private publicKeyMultibase: string; /** * Creates a {@link HcsDidRootKey} object from the given {@link HcsDid} DID and it's root public key. @@ -35,7 +35,7 @@ export class HcsDidRootKey { const result = new HcsDidRootKey(); result.controller = did.toDid(); result.id = result.controller + HcsDidRootKey.DID_ROOT_KEY_NAME; - result.publicKeyBase58 = Hashing.multibase.encode(didRootKey.toBytes()); + result.publicKeyMultibase = Hashing.multibase.encode(didRootKey.toBytes()); result.type = HcsDidRootKey.DID_ROOT_KEY_TYPE; return result; @@ -54,7 +54,7 @@ export class HcsDidRootKey { const result = new HcsDidRootKey(); result.controller = did.toDid(); result.id = result.controller + this.DID_ROOT_KEY_NAME; - result.publicKeyBase58 = null; + result.publicKeyMultibase = null; result.type = this.DID_ROOT_KEY_TYPE; return result; } @@ -71,8 +71,8 @@ export class HcsDidRootKey { return this.controller; } - public getPublicKeyBase58(): string { - return this.publicKeyBase58; + public getPublicKeyMultibase(): string { + return this.publicKeyMultibase; } public toJsonTree(): any { @@ -80,7 +80,7 @@ export class HcsDidRootKey { result.id = this.id; result.type = this.type; result.controller = this.controller; - result.publicKeyBase58 = this.publicKeyBase58; + result.publicKeyMultibase = this.publicKeyMultibase; return result; } @@ -93,7 +93,7 @@ export class HcsDidRootKey { result.id = json.id; result.type = json.type; result.controller = json.controller; - result.publicKeyBase58 = json.publicKeyBase58; + result.publicKeyMultibase = json.publicKeyMultibase; return result; } diff --git a/test/did-document-base.js b/test/did-document-base.js index baf6be7..7d2fba1 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -28,7 +28,7 @@ describe("DidDocumentBase", function () { assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); assert.equal(didRootKey[DidDocumentJsonProperties.ID], did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); assert.equal(didRootKey["controller"], did.toDid()); - assert.equal(didRootKey["publicKeyBase58"], Hashing.multibase.encode(privateKey.publicKey.toBytes())); + assert.equal(didRootKey["publicKeyMultibase"], Hashing.multibase.encode(privateKey.publicKey.toBytes())); }); it("Test Deserialization", async function () { @@ -43,7 +43,7 @@ describe("DidDocumentBase", function () { const didRootKey = parsedDoc.getDidRootKey(); assert.exists(didRootKey); - assert.equal(didRootKey.getPublicKeyBase58(), doc.getDidRootKey().getPublicKeyBase58()); + assert.equal(didRootKey.getPublicKeyMultibase(), doc.getDidRootKey().getPublicKeyMultibase()); assert.equal(didRootKey.getController(), doc.getDidRootKey().getController()); assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); @@ -93,7 +93,7 @@ describe("DidDocumentBase", function () { " {" + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + @@ -115,7 +115,7 @@ describe("DidDocumentBase", function () { ' "publicKey": [' + " {" + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index dc0d24b..dcbbe1b 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -63,7 +63,7 @@ describe("Hcs Did Method Operations", function () { '"id": "did:example:123456789abcdefghi#keys-2",' + '"type": "Ed25519VerificationKey2018",' + '"controller": "did:example:pqrstuvwxyz0987654321",' + - '"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + '"publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + "}" ) ); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index c04a58b..fe11aba 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -43,7 +43,7 @@ describe("HcsDid", function () { assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); assert.exists(document.getDidRootKey()); assert.equal( - document.getDidRootKey().getPublicKeyBase58(), + document.getDidRootKey().getPublicKeyMultibase(), Hashing.multibase.encode(privateKey.publicKey.toBytes()) ); }); From fe675c8b52f0fea1f25dbdaa44d2a7ae32afeb7b Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 31 Jan 2022 14:48:06 +1100 Subject: [PATCH 021/133] test fixies --- test/did-document-base.js | 4 ++-- test/did/hcs-did-method-operations.js | 2 +- test/did/hcs-did-root-key.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/did-document-base.js b/test/did-document-base.js index 7d2fba1..15d4201 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -93,7 +93,7 @@ describe("DidDocumentBase", function () { " {" + ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + @@ -115,7 +115,7 @@ describe("DidDocumentBase", function () { ' "publicKey": [' + " {" + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index dcbbe1b..a39295f 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -63,7 +63,7 @@ describe("Hcs Did Method Operations", function () { '"id": "did:example:123456789abcdefghi#keys-2",' + '"type": "Ed25519VerificationKey2018",' + '"controller": "did:example:pqrstuvwxyz0987654321",' + - '"publicKeyMultibase": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + '"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + "}" ) ); diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js index abe0590..2c4678e 100644 --- a/test/did/hcs-did-root-key.js +++ b/test/did/hcs-did-root-key.js @@ -34,6 +34,6 @@ describe("HcsDidRootKey", function () { assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); assert.equal(didRootKey.getId(), did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); assert.equal(didRootKey.getController(), did.toDid()); - assert.equal(didRootKey.getPublicKeyBase58(), Hashing.multibase.encode(privateKey.publicKey.toBytes())); + assert.equal(didRootKey.getPublicKeyMultibase(), Hashing.multibase.encode(privateKey.publicKey.toBytes())); }); }); From 90a2268ccb4f8e26c203b56168fd5346fca7f643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 31 Jan 2022 15:06:37 +0100 Subject: [PATCH 022/133] Did event models --- src/identity/did-method-operation.ts | 1 + .../hcs/did/event/hcs-did-did-owner-event.ts | 61 ++++++++++++++++ .../hcs/did/event/hcs-did-event-name.ts | 6 ++ src/identity/hcs/did/event/hcs-did-event.ts | 24 +++++++ .../hcs/did/event/hcs-did-service-event.ts | 47 ++++++++++++ .../hcs-did-verification-method-event.ts | 61 ++++++++++++++++ ...hcs-did-verification-relationship-event.ts | 71 +++++++++++++++++++ src/identity/hcs/did/hcs-did-root-key.ts | 1 - 8 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 src/identity/hcs/did/event/hcs-did-did-owner-event.ts create mode 100644 src/identity/hcs/did/event/hcs-did-event-name.ts create mode 100644 src/identity/hcs/did/event/hcs-did-event.ts create mode 100644 src/identity/hcs/did/event/hcs-did-service-event.ts create mode 100644 src/identity/hcs/did/event/hcs-did-verification-method-event.ts create mode 100644 src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts diff --git a/src/identity/did-method-operation.ts b/src/identity/did-method-operation.ts index 47c05ca..13b60bb 100644 --- a/src/identity/did-method-operation.ts +++ b/src/identity/did-method-operation.ts @@ -2,4 +2,5 @@ export enum DidMethodOperation { CREATE = "create", UPDATE = "update", DELETE = "delete", + REVOKE = "revoke", } diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts new file mode 100644 index 0000000..d1beb7e --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts @@ -0,0 +1,61 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../.."; +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export class HcsDidDidOwnerEvent extends HcsDidEvent { + public static KEY_TYPE = "Ed25519VerificationKey2018"; + + protected readonly name = HcsDidEventName.DID_OWNER; + + protected id: string; + protected type = HcsDidDidOwnerEvent.KEY_TYPE; + protected controller: string; + protected publicKey: PublicKey; + + /** + * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? + */ + constructor(id: string, controller: string, publicKey: PublicKey) { + super(); + + this.id = id; + this.controller = controller; + this.publicKey = publicKey; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getController() { + return this.controller; + } + + public getPublicKey() { + return this.publicKey; + } + + public getPublicKeyMultibase() { + return Hashing.multibase.encode(this.getPublicKey().toBytes()); + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + type: this.getType(), + contoller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-event-name.ts b/src/identity/hcs/did/event/hcs-did-event-name.ts new file mode 100644 index 0000000..75f238e --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-event-name.ts @@ -0,0 +1,6 @@ +export enum HcsDidEventName { + DID_OWNER = "DIDOwner", + VERIFICATION_METHOD = "VerificationMethod", + VERIFICATION_RELATIONSHIP = "VerificationRelationship", + SERVICE = "Service", +} diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts new file mode 100644 index 0000000..6e5ed89 --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -0,0 +1,24 @@ +import { Hashing } from "../../../.."; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export abstract class HcsDidEvent { + protected abstract readonly name: HcsDidEventName; + + constructor() {} + + abstract toJsonTree(): any; + + abstract toJSON(): string; + + public getBase64() { + return Hashing.base64.encode(this.toJSON()); + } + + static fromJsonTree(tree: any, result?: HcsDidEvent): HcsDidEvent { + throw new Error("not implemented"); + } + + public static fromJson(json: string): HcsDidEvent { + throw new Error("not implemented"); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts new file mode 100644 index 0000000..2b15c9f --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -0,0 +1,47 @@ +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export class HcsDidServiceEvent extends HcsDidEvent { + protected readonly name = HcsDidEventName.SERVICE; + + protected id: string; + protected type: string; + protected serviceEndpoint: string; + + /** + * TODO: are there any restrictions on type? + */ + constructor(id: string, type: string, serviceEndpoint: string) { + super(); + + this.id = id; + this.type = type; + this.serviceEndpoint = serviceEndpoint; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getServiceEndpoint() { + return this.serviceEndpoint; + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + type: this.getType(), + serviceEndpoint: this.getServiceEndpoint(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts new file mode 100644 index 0000000..98e731a --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts @@ -0,0 +1,61 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../.."; +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export class HcsDidVerificationMethodEvent extends HcsDidEvent { + public static KEY_TYPE = "Ed25519VerificationKey2018"; + + protected readonly name = HcsDidEventName.VERIFICATION_METHOD; + + protected id: string; + protected type = HcsDidVerificationMethodEvent.KEY_TYPE; + protected controller: string; + protected publicKey: PublicKey; + + /** + * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? + */ + constructor(id: string, controller: string, publicKey: PublicKey) { + super(); + + this.id = id; + this.controller = controller; + this.publicKey = publicKey; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getController() { + return this.controller; + } + + public getPublicKey() { + return this.publicKey; + } + + public getPublicKeyMultibase() { + return Hashing.multibase.encode(this.getPublicKey().toBytes()); + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts new file mode 100644 index 0000000..39ea512 --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -0,0 +1,71 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../.."; +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { + public static KEY_TYPE = "Ed25519VerificationKey2018"; + + protected readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + + protected id: string; + protected type = HcsDidVerificationRelationshipEvent.KEY_TYPE; + /** + * What are the values of relationshipType ? + */ + protected relationshipType: string; + protected controller: string; + protected publicKey: PublicKey; + + /** + * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? + */ + constructor(id: string, relationshipType: string, controller: string, publicKey: PublicKey) { + super(); + + this.id = id; + this.relationshipType = relationshipType; + this.controller = controller; + this.publicKey = publicKey; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getRelationshipType() { + return this.relationshipType; + } + + public getController() { + return this.controller; + } + + public getPublicKey() { + return this.publicKey; + } + + public getPublicKeyMultibase() { + return Hashing.multibase.encode(this.getPublicKey().toBytes()); + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + relationshipType: this.getRelationshipType(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } +} diff --git a/src/identity/hcs/did/hcs-did-root-key.ts b/src/identity/hcs/did/hcs-did-root-key.ts index 905e0f5..3006c99 100644 --- a/src/identity/hcs/did/hcs-did-root-key.ts +++ b/src/identity/hcs/did/hcs-did-root-key.ts @@ -1,7 +1,6 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../.."; import { HcsDid } from "./hcs-did"; -import { base58btc } from "multiformats/bases/base58"; /** * Represents a root key of HCS Identity DID. * That is a public key of type Ed25519VerificationKey2018 compatible with a single publicKey entry of a DID Document. From 39bf3ed7bfcb8bb4a3e6f19a733bcda1a5b00276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 31 Jan 2022 19:45:38 +0100 Subject: [PATCH 023/133] Trying to integrate events --- ...hcs-did-verification-relationship-event.ts | 14 +- src/identity/hcs/did/hcs-did-message.ts | 231 ++++++++---------- .../hcs/did/hcs-did-topic-listener.ts | 20 +- src/identity/hcs/did/hcs-did-transaction.ts | 27 +- src/identity/hcs/hcs-identity-network.ts | 18 +- src/index.ts | 36 +-- 6 files changed, 174 insertions(+), 172 deletions(-) diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts index 39ea512..c03fa12 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -3,6 +3,13 @@ import { Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; +export type VerificationRelationshipType = + | "authentication" + | "assertionMethod" + | "keyAgreement" + | "capabilityInvocation" + | "capabilityDelegation"; + export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { public static KEY_TYPE = "Ed25519VerificationKey2018"; @@ -10,17 +17,14 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { protected id: string; protected type = HcsDidVerificationRelationshipEvent.KEY_TYPE; - /** - * What are the values of relationshipType ? - */ - protected relationshipType: string; + protected relationshipType: VerificationRelationshipType; protected controller: string; protected publicKey: PublicKey; /** * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? */ - constructor(id: string, relationshipType: string, controller: string, publicKey: PublicKey) { + constructor(id: string, relationshipType: VerificationRelationshipType, controller: string, publicKey: PublicKey) { super(); this.id = id; diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 57e08b3..c51f013 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -1,11 +1,7 @@ -import { PublicKey, Timestamp, TopicId } from "@hashgraph/sdk"; -import { Hashing } from "../../../utils/hashing"; -import { TimestampUtils } from "../../../utils/timestamp-utils"; -import { DidDocumentBase } from "../../did-document-base"; -import { DidDocumentJsonProperties } from "../../did-document-json-properties"; +import { Timestamp, TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../../did-method-operation"; -import { Decrypter, Encrypter, Message } from "../message"; -import { MessageEnvelope } from "../message-envelope"; +import { Message } from "../message"; +import { HcsDidEvent } from "./event/hcs-did-event"; import { HcsDid } from "./hcs-did"; /** @@ -14,7 +10,7 @@ import { HcsDid } from "./hcs-did"; export class HcsDidMessage extends Message { protected operation: DidMethodOperation; protected did: string; - protected didDocumentBase64: string; + protected event: HcsDidEvent; /** * The date when the DID was created and published. * It is equal to consensus timestamp of the first creation message. @@ -36,11 +32,11 @@ export class HcsDidMessage extends Message { * @param did The DID string. * @param didDocumentBase64 The Base64-encoded DID document. */ - constructor(operation: DidMethodOperation, did: string, didDocumentBase64: string) { + constructor(operation: DidMethodOperation, did: string, event: HcsDidEvent) { super(); this.operation = operation; this.did = did; - this.didDocumentBase64 = didDocumentBase64; + this.event = event; } public getOperation(): DidMethodOperation { @@ -51,8 +47,12 @@ export class HcsDidMessage extends Message { return this.did; } - public getDidDocumentBase64(): string { - return this.didDocumentBase64; + public getEvent(): HcsDidEvent { + return this.event; + } + + public getEventBase64() { + return this.getEvent().getBase64(); } public getCreated(): Timestamp { @@ -71,38 +71,6 @@ export class HcsDidMessage extends Message { this.created = created; } - /** - * Decodes didDocumentBase64 field and returns its content. - * In case this message is in encrypted mode, it will return encrypted content, - * so getPlainDidDocument method should be used instead. - * If message consensus timestamps for creation and update are provided they will be injected into the result - * document upon decoding. - * - * @return The decoded DID document as JSON string. - */ - public getDidDocument(): string { - if (this.didDocumentBase64 == null) { - return null; - } - - let document: string = Hashing.base64.decode(this.didDocumentBase64); - - // inject timestamps - if (this.created != null || this.updated != null) { - const root = JSON.parse(document); - if (this.created != null) { - root[DidDocumentJsonProperties.CREATED] = TimestampUtils.toJSON(this.created); - } - - if (this.updated != null) { - root[DidDocumentJsonProperties.UPDATED] = TimestampUtils.toJSON(this.updated); - } - document = JSON.stringify(root); - } - - return document; - } - /** * Validates this DID message by checking its completeness, signature and DID document. * @@ -118,33 +86,38 @@ export class HcsDidMessage extends Message { public isValid(didTopicId: TopicId): boolean; public isValid(...args: any[]): boolean { const didTopicId: TopicId = args[0] || null; - if (this.did == null || this.didDocumentBase64 == null) { + + if (this.did == null || this.event == null) { return false; } + /** + * TODO: review this logic and update accoridingly + */ + try { - const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); + // const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); - // Validate if DID and DID document are present and match - if (this.did != doc.getId()) { - return false; - } + // // Validate if DID and DID document are present and match + // if (this.did != doc.getId()) { + // return false; + // } - // Validate if DID root key is present in the document - if (doc.getDidRootKey() == null || doc.getDidRootKey().getPublicKeyMultibase() == null) { - return false; - } + // // Validate if DID root key is present in the document + // if (doc.getDidRootKey() == null || doc.getDidRootKey().getPublicKeyMultibase() == null) { + // return false; + // } - // Verify that DID was derived from this DID root key + // // Verify that DID was derived from this DID root key const hcsDid: HcsDid = HcsDid.fromString(this.did); - // Extract public key from the DID document - const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyMultibase()); - const publicKey: PublicKey = PublicKey.fromBytes(publicKeyBytes); + // // Extract public key from the DID document + // const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyMultibase()); + // const publicKey: PublicKey = PublicKey.fromBytes(publicKeyBytes); - if (HcsDid.publicKeyToIdString(publicKey) != hcsDid.getIdString()) { - return false; - } + // if (HcsDid.publicKeyToIdString(publicKey) != hcsDid.getIdString()) { + // return false; + // } // Verify that the message was sent to the right topic, if the DID contains the topic if ( @@ -166,30 +139,33 @@ export class HcsDidMessage extends Message { * * @return Public key of the DID subject. */ - public extractDidRootKey(): PublicKey { - let result: PublicKey = null; - try { - const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); - // Make sure that DID root key is present in the document - if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyMultibase() != null) { - const publicKeyBytes: Uint8Array = Hashing.multibase.decode( - doc.getDidRootKey().getPublicKeyMultibase() - ); - result = PublicKey.fromBytes(publicKeyBytes); - } - // ArrayIndexOutOfBoundsException is thrown in case public key is invalid in PublicKey.fromBytes - } catch (e) { - return null; - } - - return result; - } + /** + * TODO: message no longer contains the whole DID document + */ + // public extractDidRootKey(): PublicKey { + // let result: PublicKey = null; + // try { + // const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); + // // Make sure that DID root key is present in the document + // if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyMultibase() != null) { + // const publicKeyBytes: Uint8Array = Hashing.multibase.decode( + // doc.getDidRootKey().getPublicKeyMultibase() + // ); + // result = PublicKey.fromBytes(publicKeyBytes); + // } + // // ArrayIndexOutOfBoundsException is thrown in case public key is invalid in PublicKey.fromBytes + // } catch (e) { + // return null; + // } + + // return result; + // } public toJsonTree(): any { const result: any = super.toJsonTree(); result.operation = this.operation; result.did = this.did; - result.didDocumentBase64 = this.didDocumentBase64; + result.event = this.getEventBase64(); return result; } @@ -199,7 +175,7 @@ export class HcsDidMessage extends Message { } else { result.operation = tree.operation; result.did = tree.did; - result.didDocumentBase64 = tree.didDocumentBase64; + // result.didDocumentBase64 = tree.didDocumentBase64; } result = super.fromJsonTree(tree, result) as HcsDidMessage; return result; @@ -220,15 +196,18 @@ export class HcsDidMessage extends Message { * @param operation The operation on DID document. * @return The HCS message wrapped in an envelope for the given DID document and method operation. */ - public static fromDidDocumentJson( - didDocumentJson: string, - operation: DidMethodOperation - ): MessageEnvelope { - const didDocumentBase: DidDocumentBase = DidDocumentBase.fromJson(didDocumentJson); - const didDocumentBase64 = Hashing.base64.encode(didDocumentJson); - const message: HcsDidMessage = new HcsDidMessage(operation, didDocumentBase.getId(), didDocumentBase64); - return new MessageEnvelope(message); - } + /** + * TODO: we no longer submit the whole DID document + */ + // public static fromDidDocumentJson( + // didDocumentJson: string, + // operation: DidMethodOperation + // ): MessageEnvelope { + // const didDocumentBase: DidDocumentBase = DidDocumentBase.fromJson(didDocumentJson); + // const didDocumentBase64 = Hashing.base64.encode(didDocumentJson); + // const message: HcsDidMessage = new HcsDidMessage(operation, didDocumentBase.getId(), didDocumentBase64); + // return new MessageEnvelope(message); + // } /** * Provides an encryption operator that converts an {@link HcsDidMessage} into encrypted one. @@ -236,21 +215,21 @@ export class HcsDidMessage extends Message { * @param encryptionFunction The encryption function to use for encryption of single attributes. * @return The encryption operator instance. */ - public static getEncrypter(encryptionFunction: Encrypter): Encrypter { - if (encryptionFunction == null) { - throw "Encryption function is missing or null."; - } - return function (message: HcsDidMessage): HcsDidMessage { - const operation: DidMethodOperation = message.getOperation(); - // Encrypt the DID - const encryptedDid: string = encryptionFunction(message.getDid()); - const did: string = Hashing.base64.encode(encryptedDid); - // Encrypt the DID document - const encryptedDoc: string = encryptionFunction(message.getDidDocumentBase64()); - const didDocumentBase64: string = Hashing.base64.encode(encryptedDoc); - return new HcsDidMessage(operation, did, didDocumentBase64); - }; - } + // public static getEncrypter(encryptionFunction: Encrypter): Encrypter { + // if (encryptionFunction == null) { + // throw "Encryption function is missing or null."; + // } + // return function (message: HcsDidMessage): HcsDidMessage { + // const operation: DidMethodOperation = message.getOperation(); + // // Encrypt the DID + // const encryptedDid: string = encryptionFunction(message.getDid()); + // const did: string = Hashing.base64.encode(encryptedDid); + // // Encrypt the DID document + // const encryptedDoc: string = encryptionFunction(message.getDidDocumentBase64()); + // const didDocumentBase64: string = Hashing.base64.encode(encryptedDoc); + // return new HcsDidMessage(operation, did, didDocumentBase64); + // }; + // } /** * Provides a decryption function that converts {@link HcsDidMessage} in encrypted for into a plain form. @@ -258,25 +237,25 @@ export class HcsDidMessage extends Message { * @param decryptionFunction The decryption function to use for decryption of single attributes. * @return The Decryption function for the {@link HcsDidMessage} */ - public static getDecrypter(decryptionFunction: Decrypter): Decrypter { - if (decryptionFunction == null) { - throw "Decryption function is missing or null."; - } - return function (encryptedMsg: HcsDidMessage, consensusTimestamp: Timestamp): HcsDidMessage { - const operation: DidMethodOperation = encryptedMsg.getOperation(); - // Decrypt DID string - let decryptedDid: string = encryptedMsg.getDid(); - if (decryptedDid != null) { - const did: string = Hashing.base64.decode(decryptedDid); - decryptedDid = decryptionFunction(did, consensusTimestamp); - } - // Decrypt DID document - let decryptedDocBase64 = encryptedMsg.getDidDocumentBase64(); - if (decryptedDocBase64 != null) { - const doc: string = Hashing.base64.decode(decryptedDocBase64); - decryptedDocBase64 = decryptionFunction(doc, consensusTimestamp); - } - return new HcsDidMessage(operation, decryptedDid, decryptedDocBase64); - }; - } + // public static getDecrypter(decryptionFunction: Decrypter): Decrypter { + // if (decryptionFunction == null) { + // throw "Decryption function is missing or null."; + // } + // return function (encryptedMsg: HcsDidMessage, consensusTimestamp: Timestamp): HcsDidMessage { + // const operation: DidMethodOperation = encryptedMsg.getOperation(); + // // Decrypt DID string + // let decryptedDid: string = encryptedMsg.getDid(); + // if (decryptedDid != null) { + // const did: string = Hashing.base64.decode(decryptedDid); + // decryptedDid = decryptionFunction(did, consensusTimestamp); + // } + // // Decrypt DID document + // let decryptedDocBase64 = encryptedMsg.getDidDocumentBase64(); + // if (decryptedDocBase64 != null) { + // const doc: string = Hashing.base64.decode(decryptedDocBase64); + // decryptedDocBase64 = decryptionFunction(doc, consensusTimestamp); + // } + // return new HcsDidMessage(operation, decryptedDid, decryptedDocBase64); + // }; + // } } diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 7e63662..3643bc3 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -31,7 +31,11 @@ export class HcsDidTopicListener extends MessageListener { protected override isMessageValid(envelope: MessageEnvelope, response: TopicMessage): boolean { try { - const msgDecrypter = !!this.decrypter ? HcsDidMessage.getDecrypter(this.decrypter) : null; + // const msgDecrypter = !!this.decrypter ? HcsDidMessage.getDecrypter(this.decrypter) : null; + /** + * TODO: Looks like we no longer encrypt messages + */ + const msgDecrypter = null; const message: HcsDidMessage = envelope.open(msgDecrypter); if (!message) { @@ -39,11 +43,15 @@ export class HcsDidTopicListener extends MessageListener { return false; } - const key = message.extractDidRootKey(); - if (!envelope.isSignatureValid(key)) { - this.reportInvalidMessage(response, "Signature validation failed"); - return false; - } + /** + * TODO: message no longer contains the whole DID document + */ + + // const key = message.extractDidRootKey(); + // if (!envelope.isSignatureValid(key)) { + // this.reportInvalidMessage(response, "Signature validation failed"); + // return false; + // } if (!message.isValid(this.topicId)) { this.reportInvalidMessage(response, "Message content validation failed."); diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index 36e79d2..1545fd8 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -1,12 +1,12 @@ -import { MessageTransaction } from "../message-transaction"; -import { HcsDidMessage } from "./hcs-did-message"; +import { TopicId } from "@hashgraph/sdk"; +import { Validator } from "../../../utils/validator"; import { DidMethodOperation } from "../../did-method-operation"; -import { PublicKey, TopicId } from "@hashgraph/sdk"; +import { Encrypter } from "../message"; import { MessageEnvelope } from "../message-envelope"; -import { Validator } from "../../../utils/validator"; import { MessageListener } from "../message-listener"; +import { MessageTransaction } from "../message-transaction"; +import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; -import { Encrypter } from "../message"; /** * The DID document creation, update or deletion transaction. @@ -36,11 +36,12 @@ export class HcsDidTransaction extends MessageTransaction { const [message, topicId] = args; super(topicId, message); this.operation = null; - } else if (args.length === 2) { - const [operation, topicId] = args; - super(topicId); - this.operation = operation; - } else { + } // else if (args.length === 2) { + // const [operation, topicId] = args; + // super(topicId); + // this.operation = operation; + // } + else { throw new Error("Invalid arguments"); } } @@ -63,7 +64,8 @@ export class HcsDidTransaction extends MessageTransaction { } protected buildMessage(): MessageEnvelope { - return HcsDidMessage.fromDidDocumentJson(this.didDocument, this.operation); + throw new Error("we no longer submit the whole DID document"); + // return HcsDidMessage.fromDidDocumentJson(this.didDocument, this.operation); } protected provideTopicListener(topicIdToListen: TopicId): MessageListener { @@ -71,6 +73,7 @@ export class HcsDidTransaction extends MessageTransaction { } protected provideMessageEncrypter(encryptionFunction: Encrypter): (input: HcsDidMessage) => HcsDidMessage { - return HcsDidMessage.getEncrypter(encryptionFunction); + throw new Error("we no longer encrypt messages"); + // return HcsDidMessage.getEncrypter(encryptionFunction); } } diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 103a5b5..5b8523b 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -1,5 +1,4 @@ import { PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; -import { DidMethodOperation } from "../did-method-operation"; import { HcsDid } from "./did/hcs-did"; import { HcsDidMessage } from "./did/hcs-did-message"; import { HcsDidResolver } from "./did/hcs-did-resolver"; @@ -62,7 +61,7 @@ export class HcsIdentityNetwork { * @param operation The operation to be performed on a DID document. * @return The {@link HcsDidTransaction} instance. */ - public createDidTransaction(operation: DidMethodOperation): HcsDidTransaction; + // public createDidTransaction(operation: DidMethodOperation): HcsDidTransaction; /** * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. @@ -76,13 +75,14 @@ export class HcsIdentityNetwork { if (args.length === 1 && args[0] instanceof MessageEnvelope) { const [message] = args; return new HcsDidTransaction(message, this.didTopicId); - } else if ( - args.length === 1 - // (args[0] instanceof DidMethodOperation) - ) { - const [operation] = args; - return new HcsDidTransaction(operation, this.didTopicId); - } else { + } // else if ( + // args.length === 1 + // // (args[0] instanceof DidMethodOperation) + // ) { + // const [operation] = args; + // return new HcsDidTransaction(operation, this.didTopicId); + // } + else { throw new Error("Invalid arguments"); } } diff --git a/src/index.ts b/src/index.ts index a961765..07930c8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,29 @@ -import { ArraysUtils } from "./utils/arrays-utils"; -import { CredentialSubject } from "./identity/hcs/vc/credential-subject"; import { DidDocumentBase } from "./identity/did-document-base"; import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { DidSyntax } from "./identity/did-syntax"; -import { Hashing } from "./utils/hashing"; +import { HcsDidDidOwnerEvent } from "./identity/hcs/did/event/hcs-did-did-owner-event"; +import { HcsDidServiceEvent } from "./identity/hcs/did/event/hcs-did-service-event"; +import { HcsDidVerificationMethodEvent } from "./identity/hcs/did/event/hcs-did-verification-method-event"; +import { HcsDidVerificationRelationshipEvent } from "./identity/hcs/did/event/hcs-did-verification-relationship-event"; +import { HcsDid } from "./identity/hcs/did/hcs-did"; import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; import { HcsDidResolver } from "./identity/hcs/did/hcs-did-resolver"; import { HcsDidRootKey } from "./identity/hcs/did/hcs-did-root-key"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; -import { HcsDid } from "./identity/hcs/did/hcs-did"; -import { HcsIdentityNetworkBuilder } from "./identity/hcs/hcs-identity-network-builder"; import { HcsIdentityNetwork } from "./identity/hcs/hcs-identity-network"; +import { HcsIdentityNetworkBuilder } from "./identity/hcs/hcs-identity-network-builder"; +import { JsonClass } from "./identity/hcs/json-class"; +import { Message } from "./identity/hcs/message"; +import { MessageEnvelope } from "./identity/hcs/message-envelope"; +import { MessageListener } from "./identity/hcs/message-listener"; +import { MessageMode } from "./identity/hcs/message-mode"; +import { MessageResolver } from "./identity/hcs/message-resolver"; +import { MessageTransaction } from "./identity/hcs/message-transaction"; +import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; +import { CredentialSubject } from "./identity/hcs/vc/credential-subject"; import { HcsVcDocumentBase } from "./identity/hcs/vc/hcs-vc-document-base"; import { HcsVcDocumentHashBase } from "./identity/hcs/vc/hcs-vc-document-hash-base"; import { HcsVcDocumentJsonProperties } from "./identity/hcs/vc/hcs-vc-document-json-properties"; @@ -21,18 +31,12 @@ import { HcsVcMessage } from "./identity/hcs/vc/hcs-vc-message"; import { HcsVcOperation } from "./identity/hcs/vc/hcs-vc-operation"; import { HcsVcStatusResolver } from "./identity/hcs/vc/hcs-vc-status-resolver"; import { HcsVcTopicListener } from "./identity/hcs/vc/hcs-vc-topic-listener"; +import { Issuer } from "./identity/hcs/vc/issuer"; import { HederaDid } from "./identity/hedera-did"; -import { JsonClass } from "./identity/hcs/json-class"; -import { MessageEnvelope } from "./identity/hcs/message-envelope"; -import { MessageListener } from "./identity/hcs/message-listener"; -import { MessageMode } from "./identity/hcs/message-mode"; -import { MessageResolver } from "./identity/hcs/message-resolver"; -import { MessageTransaction } from "./identity/hcs/message-transaction"; -import { Message } from "./identity/hcs/message"; -import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; +import { ArraysUtils } from "./utils/arrays-utils"; +import { Hashing } from "./utils/hashing"; import { TimestampUtils } from "./utils/timestamp-utils"; import { Validator } from "./utils/validator"; -import { Issuer } from "./identity/hcs/vc/issuer"; export { ArraysUtils, @@ -58,6 +62,10 @@ export { HcsVcOperation, HcsVcStatusResolver, HcsVcTopicListener, + HcsDidDidOwnerEvent, + HcsDidServiceEvent, + HcsDidVerificationMethodEvent, + HcsDidVerificationRelationshipEvent, HederaDid, JsonClass, Message, From 61fd2fadc1f34c8d7d65f47464231dac7cea78a3 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 1 Feb 2022 11:38:20 +1100 Subject: [PATCH 024/133] added support for Multicodec with Ed25519pub codec --- demo/demo.js | 2 +- package-lock.json | 13 +++++- package.json | 3 +- src/index.ts | 2 + src/utils/ed25519PubCodec.ts | 65 +++++++++++++++++++++++++++ src/utils/hashing.ts | 23 +++++++--- test/did-document-base.js | 28 ++++++------ test/did/hcs-did-method-operations.js | 2 +- 8 files changed, 115 insertions(+), 23 deletions(-) create mode 100644 src/utils/ed25519PubCodec.ts diff --git a/demo/demo.js b/demo/demo.js index a7330b2..d259c09 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -1,4 +1,4 @@ -const { PublicKey, TopicId } = require("@hashgraph/sdk"); +const { TopicId } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); const didTopicId = "0.0.12345"; diff --git a/package-lock.json b/package-lock.json index 2dc174f..5613bc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "@hashgraph/sdk": "^2.0.20", "js-base64": "^3.6.1", "moment": "^2.29.1", - "multiformats": "^9.6.2" + "multiformats": "^9.6.2", + "varint": "^6.0.0" }, "devDependencies": { "@types/node": "^16.7.7", @@ -2103,6 +2104,11 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3886,6 +3892,11 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index cee8ff6..0f3ae1e 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@hashgraph/sdk": "^2.0.20", "js-base64": "^3.6.1", "moment": "^2.29.1", - "multiformats": "^9.6.2" + "multiformats": "^9.6.2", + "varint": "^6.0.0" } } diff --git a/src/index.ts b/src/index.ts index a961765..ad71b4a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -33,6 +33,7 @@ import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable import { TimestampUtils } from "./utils/timestamp-utils"; import { Validator } from "./utils/validator"; import { Issuer } from "./identity/hcs/vc/issuer"; +import { Ed25519PubCodec } from "./utils/ed25519PubCodec"; export { ArraysUtils, @@ -70,4 +71,5 @@ export { TimestampUtils, Validator, Issuer, + Ed25519PubCodec, }; diff --git a/src/utils/ed25519PubCodec.ts b/src/utils/ed25519PubCodec.ts new file mode 100644 index 0000000..1116dfc --- /dev/null +++ b/src/utils/ed25519PubCodec.ts @@ -0,0 +1,65 @@ +// @ts-check + +import { BlockCodec, ByteView } from "multiformats/codecs/interface"; +import varint from "varint"; + +/** + * Ed25519PubCodec MULTICODEC(public-key-type, raw-public-key-bytes) + * https://github.com/multiformats/js-multiformats#multicodec-encoders--decoders--codecs + * Implementation of BlockCodec interface which implements both BlockEncoder and BlockDecoder. + * @template T + * @typedef {import('./interface').ByteView} ByteView + */ + +export class Ed25519PubCodec implements BlockCodec { + // values retrived from https://raw.githubusercontent.com/multiformats/multicodec/master/table.csv + name: string = "ed25519-pub"; + code: number = 0xed; + encode(data: Uint8Array): ByteView { + const prefix = this.varintEncode(this.code); + return this.concat([prefix, data], prefix.length + data.length); + } + decode(bytes: ByteView): Uint8Array { + return this.rmPrefix(bytes); + } + + /** + * Returns a new Uint8Array created by concatenating the passed ArrayLikes + * + * @param {Array>} arrays + * @param {number} [length] + */ + private concat(arrays: Array>, length: number) { + if (!length) { + length = arrays.reduce((acc, curr) => acc + curr.length, 0); + } + + const output = new Uint8Array(length); + let offset = 0; + + for (const arr of arrays) { + output.set(arr, offset); + offset += arr.length; + } + + return output; + } + + /** + * @param {number} num + */ + private varintEncode(num: number) { + return Uint8Array.from(varint.encode(num)); + } + + /** + * Decapsulate the multicodec-packed prefix from the data. + * + * @param {Uint8Array} data + * @returns {Uint8Array} + */ + private rmPrefix(data: Uint8Array): Uint8Array { + varint.decode(/** @type {Buffer} */ data); + return data.slice(varint.decode.bytes); + } +} diff --git a/src/utils/hashing.ts b/src/utils/hashing.ts index bbd9bbb..de5766f 100644 --- a/src/utils/hashing.ts +++ b/src/utils/hashing.ts @@ -2,6 +2,8 @@ import * as crypto from "crypto"; import { base58btc } from "multiformats/bases/base58"; import { Base64 } from "js-base64"; import { MultibaseEncoder, MultibaseDecoder } from "multiformats/bases/interface"; +import { Ed25519PubCodec } from "./ed25519PubCodec"; +import { BlockCodec } from "multiformats/codecs/interface"; export class Hashing { public static readonly sha256 = { @@ -24,16 +26,27 @@ export class Hashing { }; /** - * @returns Multibase [MULTIBASE] base58-btc encoded value for the public key type and the raw bytes associated with the public key format. + * @returns Multibase [MULTIBASE] base58-btc encoded value that is a concatenation of the + * Multicodec [MULTICODEC] identifier for the public key type and the raw bytes associated with the public key format. + * MULTIBASE(base58-btc, MULTICODEC(public-key-type, raw-public-key-bytes)) * https://github.com/multiformats/multibase * https://www.w3.org/TR/did-core/#dfn-publickeymultibase */ public static readonly multibase = { - encode: function (data: Uint8Array, base: MultibaseEncoder = base58btc): string { - return base.encode(data); + encode: function ( + data: Uint8Array, + base: MultibaseEncoder = base58btc, + codec: BlockCodec = new Ed25519PubCodec() + ): string { + // MULTICODEC(public-key-type, raw-public-key-bytes) + return base.encode(codec.encode(data)); }, - decode: function (data: string, base: MultibaseDecoder = base58btc): Uint8Array { - return base.decode(data); + decode: function ( + data: string, + base: MultibaseDecoder = base58btc, + codec: BlockCodec = new Ed25519PubCodec() + ): Uint8Array { + return codec.decode(base.decode(data)); }, }; } diff --git a/test/did-document-base.js b/test/did-document-base.js index 15d4201..61c1a79 100644 --- a/test/did-document-base.js +++ b/test/did-document-base.js @@ -53,14 +53,14 @@ describe("DidDocumentBase", function () { const didJson = "{" + ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + " ]," + ' "verificationMethod":"invalidPublicKey",' + ' "service": [' + " {" + - ' "id":"did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "id":"did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + ' "type": "VerifiableCredentialService",' + ' "serviceEndpoint": "https://example.com/vc/"' + " }" + @@ -76,29 +76,29 @@ describe("DidDocumentBase", function () { const didJsonMissingPublicKeys = "{" + ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + " ]" + "}"; const didJsonMissingRootKey = "{" + ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + " ]," + ' "publicKey": [' + " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + ' "type": "VerifiableCredentialService",' + ' "serviceEndpoint": "https://example.com/vc/"' + " }" + @@ -108,19 +108,19 @@ describe("DidDocumentBase", function () { const didJsonMissingPublicKeyId = "{" + ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + ' "authentication": [' + - ' "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + + ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + " ]," + ' "publicKey": [' + " {" + ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + ' "publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + " }" + " ]," + ' "service": [' + " {" + - ' "id": "did:hedera:mainnet:7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + + ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + ' "type": "VerifiableCredentialService",' + ' "serviceEndpoint": "https://example.com/vc/"' + " }" + diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js index a39295f..5c2ba49 100644 --- a/test/did/hcs-did-method-operations.js +++ b/test/did/hcs-did-method-operations.js @@ -63,7 +63,7 @@ describe("Hcs Did Method Operations", function () { '"id": "did:example:123456789abcdefghi#keys-2",' + '"type": "Ed25519VerificationKey2018",' + '"controller": "did:example:pqrstuvwxyz0987654321",' + - '"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + + '"publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + "}" ) ); From c621e1cc7834376f49fe11a7c5de00f4b6c5be24 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 1 Feb 2022 14:54:50 +1100 Subject: [PATCH 025/133] added a test --- test/did/hcs-did.js | 12 ++++++------ test/utils/hashing.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 test/utils/hashing.js diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index fe11aba..e95d94a 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -52,7 +52,7 @@ describe("HcsDid", function () { const didTopicId = "1.5.23462345"; const validDidWithSwitchedParamsOrder = - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + "_" + didTopicId; + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + "_" + didTopicId; const invalidDids = [ null, @@ -62,11 +62,11 @@ describe("HcsDid", function () { "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", ]; for (let did of invalidDids) { diff --git a/test/utils/hashing.js b/test/utils/hashing.js new file mode 100644 index 0000000..285195b --- /dev/null +++ b/test/utils/hashing.js @@ -0,0 +1,16 @@ +const { HcsDid, Hashing } = require("../../dist"); +const { expect } = require("chai"); + +describe("Util Multibase & Multicodec", function () { + it("Test Valid Multibase base58btc with ed25519 pub key encode", async function () { + const privateKey = HcsDid.generateDidRootKey(); + + const publickeybytes = privateKey.publicKey.toBytes(); + const base58btcEncodedString = Hashing.multibase.encode(publickeybytes); + const decodedPublicKeyBytes = Hashing.multibase.decode(base58btcEncodedString); + + // z is for base58btc & 6Mk is for ed25519 pub key + expect(base58btcEncodedString.startsWith("z6Mk")).to.be.true; + expect(decodedPublicKeyBytes).to.deep.equal(publickeybytes); + }); +}); From 69d572f382d8b975f367f829486edaa19035c57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 1 Feb 2022 17:47:36 +0100 Subject: [PATCH 026/133] Demo flows; No public key is required to build HcsDid; Introduce HcsDidEventParser; HcsDidResolver no longer extends MessageResolver; Fixes; --- demo/1_create_did_topic.js | 34 ++++ demo/2_register_did_owner.js | 47 +++++ demo/3_register_service_endpoint.js | 47 +++++ demo/4_read_did_messages.js | 43 +++++ demo/config.js | 17 ++ demo/demo.js | 2 +- src/identity/did-document-base.ts | 15 +- .../hcs/did/event/hcs-did-did-owner-event.ts | 7 +- .../hcs/did/event/hcs-did-event-parser.ts | 27 +++ src/identity/hcs/did/event/hcs-did-event.ts | 6 +- .../hcs/did/event/hcs-did-service-event.ts | 4 + .../hcs-did-verification-method-event.ts | 5 + ...hcs-did-verification-relationship-event.ts | 5 + src/identity/hcs/did/hcs-did-message.ts | 9 +- src/identity/hcs/did/hcs-did-resolver.ts | 180 +++++++++++++++--- src/identity/hcs/did/hcs-did-transaction.ts | 38 +--- src/identity/hcs/did/hcs-did.ts | 31 +-- src/identity/hcs/message-envelope.ts | 11 +- src/identity/hcs/message-resolver.ts | 10 +- 19 files changed, 434 insertions(+), 104 deletions(-) create mode 100644 demo/1_create_did_topic.js create mode 100644 demo/2_register_did_owner.js create mode 100644 demo/3_register_service_endpoint.js create mode 100644 demo/4_read_did_messages.js create mode 100644 demo/config.js create mode 100644 src/identity/hcs/did/event/hcs-did-event-parser.ts diff --git a/demo/1_create_did_topic.js b/demo/1_create_did_topic.js new file mode 100644 index 0000000..7be09b9 --- /dev/null +++ b/demo/1_create_did_topic.js @@ -0,0 +1,34 @@ +const { TopicCreateTransaction, PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, MAX_TRANSACTION_FEE } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Create topic and generate DID + */ + const didTopicCreateTransaction = new TopicCreateTransaction() + .setMaxTransactionFee(MAX_TRANSACTION_FEE) + .setAdminKey(privateKey.publicKey); + + const didTxId = await didTopicCreateTransaction.execute(client); + const didTopicId = (await didTxId.getReceipt(client)).topicId; + + /** + * Build DID intance + */ + const did = new HcsDid(client.networkName, privateKey.publicKey, didTopicId); + + console.log(`PRIVATE KEY: ${privateKey.toString()}`); + console.log(`PUBLIC KEY: ${privateKey.publicKey.toString()}`); + console.log("\n"); + console.log(did.generateDidDocument().toJsonTree()); +} + +main(); diff --git a/demo/2_register_did_owner.js b/demo/2_register_did_owner.js new file mode 100644 index 0000000..fcb5cd9 --- /dev/null +++ b/demo/2_register_did_owner.js @@ -0,0 +1,47 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { + HcsDid, + DidMethodOperation, + MessageEnvelope, + HcsDidMessage, + HcsDidDidOwnerEvent, + HcsDidTransaction, +} = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR, MAX_TRANSACTION_FEE } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = HcsDid.fromString(TEST_DID_STR); + + /** + * Build create DIDOwner message + */ + const event = new HcsDidDidOwnerEvent(did.did, did.did, privateKey.publicKey); + const message = new HcsDidMessage(DidMethodOperation.CREATE, did.did, event); + const envelope = new MessageEnvelope(message); + + /** + * Send DIDOwner message to Hashgraph + */ + const transaction = new HcsDidTransaction(envelope, did.didTopicId); + + transaction + .signMessage((msg) => privateKey.sign(msg)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(MAX_TRANSACTION_FEE)) + .onMessageConfirmed((msg) => { + // console.log(msg); + console.log("Message published"); + }) + .execute(client); +} + +main(); diff --git a/demo/3_register_service_endpoint.js b/demo/3_register_service_endpoint.js new file mode 100644 index 0000000..18f93f4 --- /dev/null +++ b/demo/3_register_service_endpoint.js @@ -0,0 +1,47 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { + HcsDid, + DidMethodOperation, + MessageEnvelope, + HcsDidMessage, + HcsDidTransaction, + HcsDidServiceEvent, +} = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR, MAX_TRANSACTION_FEE } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = HcsDid.fromString(TEST_DID_STR); + + /** + * Build create Service message + */ + const event = new HcsDidServiceEvent(did.did, "VerifiableCredentialService", "https://test.meeco.me/vcs"); + const message = new HcsDidMessage(DidMethodOperation.CREATE, did.did, event); + const envelope = new MessageEnvelope(message); + + /** + * Send DIDOwner message to Hashgraph + */ + const transaction = new HcsDidTransaction(envelope, did.didTopicId); + + transaction + .signMessage((msg) => privateKey.sign(msg)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(MAX_TRANSACTION_FEE)) + .onMessageConfirmed((msg) => { + // console.log(msg); + console.log("Message published"); + }) + .execute(client); +} + +main(); diff --git a/demo/4_read_did_messages.js b/demo/4_read_did_messages.js new file mode 100644 index 0000000..00a0f5d --- /dev/null +++ b/demo/4_read_did_messages.js @@ -0,0 +1,43 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid, HcsDidResolver } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = HcsDid.fromString(TEST_DID_STR); + + /** + * Read DID resolver setup + */ + const resolver = new HcsDidResolver(did.didTopicId).setTimeout(3000).whenFinished((result) => { + const didResult = result.get(did.did); + + didResult.getMessages().forEach((msg) => { + console.log("\n"); + console.log("==================================================="); + console.log("\n"); + console.log("Message:"); + console.log(msg.toJsonTree()); + console.log("\n"); + console.log("Event:"); + console.log(msg.event.toJsonTree()); + }); + }); + + /** + * Read DID information + */ + resolver.addDid(did.did); + resolver.execute(client); +} + +main(); diff --git a/demo/config.js b/demo/config.js new file mode 100644 index 0000000..47ae150 --- /dev/null +++ b/demo/config.js @@ -0,0 +1,17 @@ +const { Hbar } = require("@hashgraph/sdk"); + +module.exports = { + /** + * Account that is going to pay for the demo + */ + OPERATOR_ID: "xxx", + /** + * Account private key + */ + PRIVATE_KEY_STR: "xxx", + MAX_TRANSACTION_FEE: new Hbar(2), + /** + * Demo flows 2,3 and 4 use already created DID that should be set as TEST_DID_STR + */ + TEST_DID_STR: "xxx", +}; diff --git a/demo/demo.js b/demo/demo.js index d259c09..d5b8329 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -15,7 +15,7 @@ console.log(`did: ${didString}`); // console.log(did); console.log(`did-document: ${did.generateDidDocument().toJSON()}`); -const didFromString = HcsDid.fromStringWithDidRootKey(didString, privateKey.publicKey); +const didFromString = HcsDid.fromString(didString); // console.log(did); console.log(`did-document: ${didFromString.generateDidDocument().toJSON()}`); diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index d4998b2..15101d6 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -1,5 +1,5 @@ -import { DidSyntax } from "./did-syntax"; import { DidDocumentJsonProperties } from "./did-document-json-properties"; +import { DidSyntax } from "./did-syntax"; import { HcsDidRootKey } from "./hcs/did/hcs-did-root-key"; export class DidDocumentBase { @@ -64,16 +64,9 @@ export class DidDocumentBase { rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - /** - * TODO: investigate, should we just leave such cases crash? - */ - if (this.didRootKey) { - rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [this.didRootKey.getId()]; - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; - } else { - console.warn("WARNING: didRootKey is not set for the document"); - } + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [this.didRootKey.getId()]; + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; return rootObject; } diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts index d1beb7e..f8776ac 100644 --- a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts +++ b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts @@ -49,7 +49,7 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { [this.name]: { id: this.getId(), type: this.getType(), - contoller: this.getController(), + controller: this.getController(), publicKeyMultibase: this.getPublicKeyMultibase(), }, }; @@ -58,4 +58,9 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { public toJSON() { return JSON.stringify(this.toJsonTree()); } + + static fromJsonTree(tree: any): HcsDidDidOwnerEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidDidOwnerEvent(tree.id, tree.controller, publicKey); + } } diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts new file mode 100644 index 0000000..34f8d94 --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -0,0 +1,27 @@ +import { Hashing } from "../../../.."; +import { HcsDidDidOwnerEvent } from "./hcs-did-did-owner-event"; +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; +import { HcsDidServiceEvent } from "./hcs-did-service-event"; +import { HcsDidVerificationMethodEvent } from "./hcs-did-verification-method-event"; +import { HcsDidVerificationRelationshipEvent } from "./hcs-did-verification-relationship-event"; + +const EVENT_NAME_TO_CLASS = { + [HcsDidEventName.DID_OWNER]: HcsDidDidOwnerEvent, + [HcsDidEventName.SERVICE]: HcsDidServiceEvent, + [HcsDidEventName.VERIFICATION_METHOD]: HcsDidVerificationMethodEvent, + [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidVerificationRelationshipEvent, +}; + +export class HcsDidEventParser { + static fromBase64(eventBase64: any): HcsDidEvent { + const tree = JSON.parse(Hashing.base64.decode(eventBase64)); + const eventName = Object.keys(EVENT_NAME_TO_CLASS).find((eventName) => !!tree[eventName]); + + if (!eventName) { + throw new Error("Invalid DID event"); + } + + return EVENT_NAME_TO_CLASS[eventName].fromJsonTree(tree[eventName]); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index 6e5ed89..bb8514e 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -14,11 +14,7 @@ export abstract class HcsDidEvent { return Hashing.base64.encode(this.toJSON()); } - static fromJsonTree(tree: any, result?: HcsDidEvent): HcsDidEvent { - throw new Error("not implemented"); - } - - public static fromJson(json: string): HcsDidEvent { + static fromJSONTree(tree: any): HcsDidEvent { throw new Error("not implemented"); } } diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts index 2b15c9f..64a8aa8 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -44,4 +44,8 @@ export class HcsDidServiceEvent extends HcsDidEvent { public toJSON() { return JSON.stringify(this.toJsonTree()); } + + static fromJsonTree(tree: any): HcsDidServiceEvent { + return new HcsDidServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts index 98e731a..21ad3d1 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts @@ -58,4 +58,9 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { public toJSON() { return JSON.stringify(this.toJsonTree()); } + + static fromJsonTree(tree: any): HcsDidVerificationMethodEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidVerificationMethodEvent(tree.id, tree.controller, publicKey); + } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts index c03fa12..b27b531 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -72,4 +72,9 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { public toJSON() { return JSON.stringify(this.toJsonTree()); } + + static fromJsonTree(tree: any): HcsDidVerificationRelationshipEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidVerificationRelationshipEvent(tree.id, tree.relationshipType, tree.controller, publicKey); + } } diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index c51f013..4e6401d 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -2,6 +2,7 @@ import { Timestamp, TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../../did-method-operation"; import { Message } from "../message"; import { HcsDidEvent } from "./event/hcs-did-event"; +import { HcsDidEventParser } from "./event/hcs-did-event-parser"; import { HcsDid } from "./hcs-did"; /** @@ -34,6 +35,7 @@ export class HcsDidMessage extends Message { */ constructor(operation: DidMethodOperation, did: string, event: HcsDidEvent) { super(); + this.operation = operation; this.did = did; this.event = event; @@ -109,6 +111,7 @@ export class HcsDidMessage extends Message { // } // // Verify that DID was derived from this DID root key + const hcsDid: HcsDid = HcsDid.fromString(this.did); // // Extract public key from the DID document @@ -170,12 +173,14 @@ export class HcsDidMessage extends Message { } public static fromJsonTree(tree: any, result?: HcsDidMessage): HcsDidMessage { + const event = HcsDidEventParser.fromBase64(tree.event); + if (!result) { - result = new HcsDidMessage(tree.operation, tree.did, tree.didDocumentBase64); + result = new HcsDidMessage(tree.operation, tree.did, event); } else { result.operation = tree.operation; result.did = tree.did; - // result.didDocumentBase64 = tree.didDocumentBase64; + result.event = event; } result = super.fromJsonTree(tree, result) as HcsDidMessage; return result; diff --git a/src/identity/hcs/did/hcs-did-resolver.ts b/src/identity/hcs/did/hcs-did-resolver.ts index df3c5e5..f97f7b3 100644 --- a/src/identity/hcs/did/hcs-did-resolver.ts +++ b/src/identity/hcs/did/hcs-did-resolver.ts @@ -1,23 +1,44 @@ -import { TopicId } from "@hashgraph/sdk"; -import { TimestampUtils } from "../../../utils/timestamp-utils"; -import { DidMethodOperation } from "../../did-method-operation"; +import { Client, Timestamp, TopicId } from "@hashgraph/sdk"; +import Long from "long"; +import { Validator } from "../../.."; +import { Sleep } from "../../../utils/sleep"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; import { MessageResolver } from "../message-resolver"; +import { HcsDid } from "./hcs-did"; import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; /** * Resolves the DID from Hedera network. */ -export class HcsDidResolver extends MessageResolver { +export class HcsDidResolver { + /** + * Default time to wait before finishing resolution and after the last message was received. + */ + public static DEFAULT_TIMEOUT: Long = Long.fromInt(30000); + + protected topicId: TopicId; + protected results: Map; + + private lastMessageArrivalTime: Long; + private resultsHandler: (input: Map) => void; + private errorHandler: (input: Error) => void; + private existingSignatures: string[]; + private listener: MessageListener; + private noMoreMessagesTimeout: Long; + /** * Instantiates a new DID resolver for the given DID topic. * * @param topicId The HCS DID topic ID. */ constructor(topicId: TopicId) { - super(topicId); + this.topicId = topicId; + this.results = new Map(); + + this.noMoreMessagesTimeout = MessageResolver.DEFAULT_TIMEOUT; + this.lastMessageArrivalTime = Long.fromInt(Date.now()); } /** @@ -28,7 +49,7 @@ export class HcsDidResolver extends MessageResolver { */ public addDid(did: string): HcsDidResolver { if (did != null) { - this.results.set(did, null); + this.results.set(did, HcsDid.fromString(did)); } return this; } @@ -46,38 +67,145 @@ export class HcsDidResolver extends MessageResolver { return this; } - protected override matchesSearchCriteria(message: HcsDidMessage): boolean { - return this.results.has(message.getDid()); + public execute(client: Client): void { + new Validator().checkValidationErrors("Resolver not executed: ", (v) => { + return this.validate(v); + }); + + this.existingSignatures = []; + + this.listener = this.supplyMessageListener(); + + this.listener + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .setIgnoreErrors(false) + .onError(this.errorHandler) + .subscribe(client, (msg) => { + return this.handleMessage(msg); + }); + + this.lastMessageArrivalTime = Long.fromInt(Date.now()); + this.waitOrFinish(); } - protected override processMessage(envelope: MessageEnvelope): void { - const message: HcsDidMessage = envelope.open(); + /** + * Handles incoming DID messages from DID Topic on a mirror node. + * + * @param envelope The parsed message envelope in a PLAIN mode. + */ + private handleMessage(envelope: MessageEnvelope): void { + this.lastMessageArrivalTime = Long.fromInt(Date.now()); - // Also skip messages that are older than the once collected or if we already have a DELETE message - const existing: MessageEnvelope = this.results.get(message.getDid()); + if (!this.matchesSearchCriteria(envelope.open())) { + return; + } - const chackOperation = - existing != null && - (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || - (DidMethodOperation.DELETE == existing.open().getOperation() && - DidMethodOperation.DELETE != message.getOperation())); - if (chackOperation) { + if (this.existingSignatures.indexOf(envelope.getSignature()) != -1) { return; } - // Preserve created and updated timestamps - message.setUpdated(envelope.getConsensusTimestamp()); - if (DidMethodOperation.CREATE == message.getOperation()) { - message.setCreated(envelope.getConsensusTimestamp()); - } else if (existing != null) { - message.setCreated(existing.open().getCreated()); + this.existingSignatures.push(envelope.getSignature()); + this.processMessage(envelope); + } + + /** + * Waits for a new message from the topic for the configured amount of time. + */ + protected async waitOrFinish(): Promise { + const timeDiff = Long.fromInt(Date.now()).sub(this.lastMessageArrivalTime); + + if (timeDiff.lt(this.noMoreMessagesTimeout)) { + await Sleep(this.noMoreMessagesTimeout.sub(timeDiff).toNumber()); + await this.waitOrFinish(); + return; } + this.resultsHandler(this.results); + + if (this.listener) { + this.listener.unsubscribe(); + } + } + + /** + * Defines a handler for resolution results. + * This will be called when the resolution process is finished. + * + * @param handler The results handler. + * @return This resolver instance. + */ + public whenFinished(handler: (input: Map) => void): HcsDidResolver { + this.resultsHandler = handler; + return this; + } + + /** + * Defines a handler for errors when they happen during resolution. + * + * @param handler The error handler. + * @return This resolver instance. + */ + public onError(handler: (input: Error) => void): HcsDidResolver { + this.errorHandler = handler; + return this; + } + + /** + * Defines a maximum time in milliseconds to wait for new messages from the topic. + * Default is 30 seconds. + * + * @param timeout The timeout in milliseconds to wait for new messages from the topic. + * @return This resolver instance. + */ + public setTimeout(timeout: Long | number): HcsDidResolver { + this.noMoreMessagesTimeout = Long.fromValue(timeout); + return this; + } + + /** + * Runs validation logic of the resolver's configuration. + * + * @param validator The errors validator. + */ + protected validate(validator: Validator): void { + validator.require(this.results.size > 0, "Nothing to resolve."); + validator.require(!!this.topicId, "Consensus topic ID not defined."); + validator.require(!!this.resultsHandler, "Results handler 'whenFinished' not defined."); + } + + protected matchesSearchCriteria(message: HcsDidMessage): boolean { + return this.results.has(message.getDid()); + } + + protected processMessage(envelope: MessageEnvelope): void { + const message: HcsDidMessage = envelope.open(); + + // // Also skip messages that are older than the once collected or if we already have a DELETE message + // const existing: MessageEnvelope = this.results.get(message.getDid()); + + // const chackOperation = + // existing != null && + // (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || + // (DidMethodOperation.DELETE == existing.open().getOperation() && + // DidMethodOperation.DELETE != message.getOperation())); + // if (chackOperation) { + // return; + // } + + // // Preserve created and updated timestamps + // message.setUpdated(envelope.getConsensusTimestamp()); + // if (DidMethodOperation.CREATE == message.getOperation()) { + // message.setCreated(envelope.getConsensusTimestamp()); + // } else if (existing != null) { + // message.setCreated(existing.open().getCreated()); + // } + // Add valid message to the results - this.results.set(message.getDid(), envelope); + this.results.get(message.getDid()).addMessage(message); } - protected override supplyMessageListener(): MessageListener { + protected supplyMessageListener(): MessageListener { return new HcsDidTopicListener(this.topicId); } } diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index 1545fd8..faa9eac 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -1,6 +1,4 @@ import { TopicId } from "@hashgraph/sdk"; -import { Validator } from "../../../utils/validator"; -import { DidMethodOperation } from "../../did-method-operation"; import { Encrypter } from "../message"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; @@ -13,9 +11,6 @@ import { HcsDidTopicListener } from "./hcs-did-topic-listener"; * Builds a correct {@link HcsDidMessage} and send it to HCS DID topic. */ export class HcsDidTransaction extends MessageTransaction { - private operation: DidMethodOperation; - private didDocument: string; - /** * Instantiates a new transaction object from a message that was already prepared. * @@ -23,46 +18,15 @@ export class HcsDidTransaction extends MessageTransaction { * @param message The message envelope. */ constructor(message: MessageEnvelope, topicId: TopicId); - - /** - * Instantiates a new transaction object. - * - * @param operation The operation to be performed on a DID document. - * @param topicId The HCS DID topic ID where message will be submitted. - */ - constructor(operation: DidMethodOperation, topicId: TopicId); constructor(...args) { if (args[0] instanceof MessageEnvelope && args[1] instanceof TopicId && args.length === 2) { const [message, topicId] = args; super(topicId, message); - this.operation = null; - } // else if (args.length === 2) { - // const [operation, topicId] = args; - // super(topicId); - // this.operation = operation; - // } - else { + } else { throw new Error("Invalid arguments"); } } - /** - * Sets a DID document as JSON string that will be submitted to HCS. - * - * @param didDocument The didDocument to be published. - * @return This transaction instance. - */ - public setDidDocument(didDocument: string): HcsDidTransaction { - this.didDocument = didDocument; - return this; - } - - protected validate(validator: Validator): void { - super.validate(validator); - validator.require(!!this.didDocument || !!this.message, "DID document is mandatory."); - validator.require(!!this.operation || !!this.message, "DID method operation is not defined."); - } - protected buildMessage(): MessageEnvelope { throw new Error("we no longer submit the whole DID document"); // return HcsDidMessage.fromDidDocumentJson(this.didDocument, this.operation); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 1dd8a65..7e50e68 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -3,6 +3,7 @@ import { Hashing } from "../../../utils/hashing"; import { DidDocumentBase } from "../../did-document-base"; import { DidSyntax } from "../../did-syntax"; import { HederaDid } from "../../hedera-did"; +import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidRootKey } from "./hcs-did-root-key"; /** @@ -17,6 +18,7 @@ export class HcsDid implements HederaDid { private did: string; private didRootKey: PublicKey; private privateDidRootKey: PrivateKey; + private messages: HcsDidMessage[] = []; /** * Creates a DID instance. @@ -42,7 +44,7 @@ export class HcsDid implements HederaDid { * @param didTopicId The appnet's DID topic ID. * @param didRootKey The public key from which DID is derived. */ - constructor(network: string, idString: string, didTopicId: TopicId, didRootKey?: PublicKey); + constructor(network: string, idString: string, didTopicId: TopicId); constructor(...args: any[]) { if ( typeof args[0] === "string" && @@ -82,15 +84,14 @@ export class HcsDid implements HederaDid { typeof args[0] === "string" && typeof args[1] === "string" && (args[2] instanceof TopicId || args[2] === undefined) && - (args[3] instanceof PublicKey || args[3] === undefined) && - args.length === 4 + args.length === 3 ) { - const [network, idString, didTopicId, didRootKey] = args; + const [network, idString, didTopicId] = args; this.didTopicId = didTopicId; this.network = network; this.idString = idString; - this.didRootKey = didRootKey; + this.didRootKey = HcsDid.idStringToPublicKey(idString); this.did = this.buildDid(); return; @@ -105,7 +106,7 @@ export class HcsDid implements HederaDid { * @param didString A Hedera DID string. * @return {@link HcsDid} object derived from the given Hedera DID string. */ - public static fromString(didString: string, didRootKey?: PublicKey): HcsDid { + public static fromString(didString: string): HcsDid { if (!didString) { throw new Error("DID string cannot be null"); } @@ -142,16 +143,12 @@ export class HcsDid implements HederaDid { throw new Error("DID string is invalid."); } - return new HcsDid(networkName, didIdString, topicId, didRootKey); + return new HcsDid(networkName, didIdString, topicId); } catch (e) { throw new Error("DID string is invalid. " + e.message); } } - public static fromStringWithDidRootKey(didString: string, didRootKey: PublicKey): HcsDid { - return this.fromString(didString, didRootKey); - } - /** * Generates a random DID root key. * @@ -202,6 +199,14 @@ export class HcsDid implements HederaDid { return this.did; } + public getMessages() { + return this.messages; + } + + public addMessage(message: HcsDidMessage) { + this.messages.push(message); + } + /** * Constructs DID string from the instance of DID object. * @@ -233,6 +238,10 @@ export class HcsDid implements HederaDid { return Hashing.multibase.encode(Hashing.sha256.digest(didRootKey.toBytes())); } + public static idStringToPublicKey(idString: string): PublicKey { + return PublicKey.fromBytes(Hashing.multibase.decode(idString)); + } + /** * Returns a private key of DID root key. * This is only available if it was provided during {@link HcsDid} construction. diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index f228df5..f778bb1 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -1,11 +1,11 @@ -import { Decrypter, Encrypter, Message } from "./message"; -import Long from "long"; -import { MessageMode } from "./message-mode"; -import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; import { PublicKey, Timestamp, TopicMessage } from "@hashgraph/sdk"; -import { JsonClass } from "./json-class"; import { Base64 } from "js-base64"; +import Long from "long"; import { ArraysUtils } from "../../utils/arrays-utils"; +import { JsonClass } from "./json-class"; +import { Decrypter, Encrypter, Message } from "./message"; +import { MessageMode } from "./message-mode"; +import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; export type PublicKeyProvider = (evn: MessageEnvelope) => PublicKey; export type SignFunction = (message: Uint8Array) => Uint8Array; @@ -109,6 +109,7 @@ export class MessageEnvelope { ): MessageEnvelope { const msgJson = ArraysUtils.toString(response.contents); const result = MessageEnvelope.fromJson(msgJson, messageClass); + // console.log(result); result.mirrorResponse = new SerializableMirrorConsensusResponse(response); return result; diff --git a/src/identity/hcs/message-resolver.ts b/src/identity/hcs/message-resolver.ts index 991053a..6e43778 100644 --- a/src/identity/hcs/message-resolver.ts +++ b/src/identity/hcs/message-resolver.ts @@ -1,11 +1,10 @@ -import { Decrypter, Message } from "./message"; -import Long from "long"; import { Client, Timestamp, TopicId } from "@hashgraph/sdk"; +import Long from "long"; +import { Sleep } from "../../utils/sleep"; +import { Validator } from "../../utils/validator"; +import { Decrypter, Message } from "./message"; import { MessageEnvelope } from "./message-envelope"; import { MessageListener } from "./message-listener"; -import { Validator } from "../../utils/validator"; -import { TimestampUtils } from "../../utils/timestamp-utils"; -import { Sleep } from "../../utils/sleep"; export abstract class MessageResolver { /** @@ -32,6 +31,7 @@ export abstract class MessageResolver { constructor(topicId: TopicId) { this.topicId = topicId; this.results = new Map(); + this.noMoreMessagesTimeout = MessageResolver.DEFAULT_TIMEOUT; this.lastMessageArrivalTime = Long.fromInt(Date.now()); } From ed4713f4f7eafbb2ca921e7812383d985aafa44c Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 2 Feb 2022 17:15:21 +1100 Subject: [PATCH 027/133] apply events and resolve did --- demo/5_resolve_did.js | 35 +++++++++++++++++++ src/identity/did-document-base.ts | 16 ++++++++- .../hcs/did/event/hcs-did-did-owner-event.ts | 14 +++++++- src/identity/hcs/did/event/hcs-did-event.ts | 4 ++- .../hcs/did/event/hcs-did-service-event.ts | 8 +++++ .../hcs-did-verification-method-event.ts | 7 +++- ...hcs-did-verification-relationship-event.ts | 7 +++- src/identity/hcs/did/hcs-did.ts | 9 +++-- 8 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 demo/5_resolve_did.js diff --git a/demo/5_resolve_did.js b/demo/5_resolve_did.js new file mode 100644 index 0000000..9395299 --- /dev/null +++ b/demo/5_resolve_did.js @@ -0,0 +1,35 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid, HcsDidResolver } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = HcsDid.fromString(TEST_DID_STR); + + /** + * Read DID resolver setup + */ + const resolver = new HcsDidResolver(did.didTopicId).setTimeout(3000).whenFinished((result) => { + const didResult = result.get(did.did); + + console.log("generating did doc"); + console.log(didResult.generateDidDocument().toJsonTree()); + }); + + /** + * Read DID information + */ + resolver.addDid(did.did); + resolver.execute(client); +} + +main(); diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index 15101d6..eac0b71 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -1,3 +1,4 @@ +import { HcsDidServiceEvent } from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidRootKey } from "./hcs/did/hcs-did-root-key"; @@ -6,6 +7,7 @@ export class DidDocumentBase { private id: string; private context: string; private didRootKey: HcsDidRootKey; + private service: HcsDidServiceEvent; constructor(did: string) { this.id = did; @@ -51,6 +53,14 @@ export class DidDocumentBase { return this.id; } + public getService(): HcsDidServiceEvent { + return this.service; + } + + public setService(service: HcsDidServiceEvent): void { + this.service = service; + } + public getDidRootKey(): HcsDidRootKey { return this.didRootKey; } @@ -60,7 +70,7 @@ export class DidDocumentBase { } public toJsonTree(): any { - const rootObject = {}; + let rootObject = {}; rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; @@ -68,6 +78,10 @@ export class DidDocumentBase { rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; + if (this.service) { + rootObject = { ...rootObject, ...this.service.toJsonTree() }; + } + return rootObject; } diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts index f8776ac..6684460 100644 --- a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts +++ b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts @@ -1,5 +1,6 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; +import { Hashing, HcsDidRootKey } from "../../../.."; +import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -63,4 +64,15 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidDidOwnerEvent(tree.id, tree.controller, publicKey); } + + // TODO: apply owner event + process(didDoc: DidDocumentBase): DidDocumentBase { + // verify DID owner + if (this.controller + HcsDidRootKey.DID_ROOT_KEY_NAME !== didDoc.getDidRootKey().getId()) { + throw new Error("DID Owner varification failed."); + } + + // TODO: how to identify and change didDoc if transfer of ownership event + return didDoc; + } } diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index bb8514e..b269952 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -1,4 +1,4 @@ -import { Hashing } from "../../../.."; +import { DidDocumentBase, Hashing } from "../../../.."; import { HcsDidEventName } from "./hcs-did-event-name"; export abstract class HcsDidEvent { @@ -10,6 +10,8 @@ export abstract class HcsDidEvent { abstract toJSON(): string; + abstract process(didDoc: DidDocumentBase): DidDocumentBase; + public getBase64() { return Hashing.base64.encode(this.toJSON()); } diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts index 64a8aa8..3e6b6a0 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -1,3 +1,4 @@ +import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -48,4 +49,11 @@ export class HcsDidServiceEvent extends HcsDidEvent { static fromJsonTree(tree: any): HcsDidServiceEvent { return new HcsDidServiceEvent(tree.id, tree.type, tree.serviceEndpoint); } + + // TODO: apply service event + process(didDoc: DidDocumentBase): DidDocumentBase { + // add relevent service json properties to didDoc + didDoc.setService(this); + return didDoc; + } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts index 21ad3d1..fe4ffe5 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; +import { DidDocumentBase, Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -63,4 +63,9 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidVerificationMethodEvent(tree.id, tree.controller, publicKey); } + + // TODO: apply verification method event + process(didDoc: DidDocumentBase): DidDocumentBase { + throw new Error("Method not implemented."); + } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts index b27b531..e2d5d5a 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; +import { DidDocumentBase, Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -77,4 +77,9 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidVerificationRelationshipEvent(tree.id, tree.relationshipType, tree.controller, publicKey); } + + // TODO: apply verification method event + process(didDoc: DidDocumentBase): DidDocumentBase { + throw new Error("Method not implemented."); + } } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 7e50e68..92a2711 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -166,12 +166,17 @@ export class HcsDid implements HederaDid { * @throws IllegalArgumentException In case given DID root key does not match this DID. */ public generateDidDocument(): DidDocumentBase { - const result = new DidDocumentBase(this.toDid()); + let result = new DidDocumentBase(this.toDid()); if (this.didRootKey) { const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); result.setDidRootKey(rootKey); } + // proccess events to get uptodate did document + this.getMessages().forEach((msg) => { + result = msg.getEvent().process(result); + }); + return result; } @@ -235,7 +240,7 @@ export class HcsDid implements HederaDid { * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. */ public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.multibase.encode(Hashing.sha256.digest(didRootKey.toBytes())); + return Hashing.multibase.encode(didRootKey.toBytes()); } public static idStringToPublicKey(idString: string): PublicKey { From abb03e1ccc083de49b7c6572e9265fb18d5d13a1 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 2 Feb 2022 17:38:22 +1100 Subject: [PATCH 028/133] added multiple services event --- src/identity/did-document-base.ts | 18 +++++++++++------- .../hcs/did/event/hcs-did-service-event.ts | 4 +++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index eac0b71..7cecacb 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -7,11 +7,12 @@ export class DidDocumentBase { private id: string; private context: string; private didRootKey: HcsDidRootKey; - private service: HcsDidServiceEvent; + private services: HcsDidServiceEvent[]; constructor(did: string) { this.id = did; this.context = DidSyntax.DID_DOCUMENT_CONTEXT; + this.services = []; } /** @@ -53,12 +54,12 @@ export class DidDocumentBase { return this.id; } - public getService(): HcsDidServiceEvent { - return this.service; + public getServices(): HcsDidServiceEvent[] { + return this.services; } - public setService(service: HcsDidServiceEvent): void { - this.service = service; + public addService(service: HcsDidServiceEvent): void { + this.services.push(service); } public getDidRootKey(): HcsDidRootKey { @@ -78,8 +79,11 @@ export class DidDocumentBase { rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; - if (this.service) { - rootObject = { ...rootObject, ...this.service.toJsonTree() }; + if (this.getServices().length > 0) { + rootObject[DidDocumentJsonProperties.SERVICE] = []; + this.getServices().forEach((service) => { + rootObject[DidDocumentJsonProperties.SERVICE].push(service.toJsonTree().Service); + }); } return rootObject; diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts index 3e6b6a0..df26512 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -53,7 +53,9 @@ export class HcsDidServiceEvent extends HcsDidEvent { // TODO: apply service event process(didDoc: DidDocumentBase): DidDocumentBase { // add relevent service json properties to didDoc - didDoc.setService(this); + if (didDoc.getServices().find((service) => service.getId() === this.getId())) return didDoc; + + didDoc.addService(this); return didDoc; } } From c05d298b89e24959e08257617826e8808963dacf Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 2 Feb 2022 18:41:51 +1100 Subject: [PATCH 029/133] added dragonglass explorer link --- demo/4_read_did_messages.js | 5 +++++ demo/5_resolve_did.js | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/demo/4_read_did_messages.js b/demo/4_read_did_messages.js index 00a0f5d..e92b20d 100644 --- a/demo/4_read_did_messages.js +++ b/demo/4_read_did_messages.js @@ -31,6 +31,11 @@ async function main() { console.log("Event:"); console.log(msg.event.toJsonTree()); }); + console.log("\n"); + console.log("==================================================="); + console.log("DragaonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.didTopicId}`); + console.log("\n"); }); /** diff --git a/demo/5_resolve_did.js b/demo/5_resolve_did.js index 9395299..e4312c9 100644 --- a/demo/5_resolve_did.js +++ b/demo/5_resolve_did.js @@ -23,6 +23,12 @@ async function main() { console.log("generating did doc"); console.log(didResult.generateDidDocument().toJsonTree()); + + console.log("\n"); + console.log("==================================================="); + console.log("DragaonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.didTopicId}`); + console.log("\n"); }); /** From b5d868013835d4aa6465c352283eca09e9ffd1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Wed, 2 Feb 2022 19:03:40 +0100 Subject: [PATCH 030/133] Reading does not need private keys --- demo/4_read_did_messages.js | 6 ++---- demo/5_resolve_did.js | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/demo/4_read_did_messages.js b/demo/4_read_did_messages.js index e92b20d..57ff7c5 100644 --- a/demo/4_read_did_messages.js +++ b/demo/4_read_did_messages.js @@ -1,14 +1,12 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidResolver } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); +const { TEST_DID_STR } = require("./config"); async function main() { /** * Client setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); /** * Build DID instance diff --git a/demo/5_resolve_did.js b/demo/5_resolve_did.js index e4312c9..4e4b441 100644 --- a/demo/5_resolve_did.js +++ b/demo/5_resolve_did.js @@ -1,14 +1,12 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidResolver } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); +const { TEST_DID_STR } = require("./config"); async function main() { /** * Client setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); /** * Build DID instance From 327f1f70b64bc26f944dc2764fe7fd1c7476ce06 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 3 Feb 2022 17:58:55 +1100 Subject: [PATCH 031/133] MEE-3130 / 32 remove all code related to VC & appnet --- src/identity/hcs/did/hcs-did-message.ts | 99 +------- .../hcs/did/hcs-did-topic-listener.ts | 18 +- .../hcs/hcs-identity-network-builder.ts | 28 +-- src/identity/hcs/hcs-identity-network.ts | 119 +-------- src/identity/hcs/message-envelope.ts | 28 +-- src/identity/hcs/message-listener.ts | 19 -- src/identity/hcs/message-mode.ts | 1 - src/identity/hcs/message-resolver.ts | 1 - src/identity/hcs/message-transaction.ts | 34 --- src/identity/hcs/vc/credential-subject.ts | 44 ---- src/identity/hcs/vc/hcs-vc-document-base.ts | 230 ------------------ .../hcs/vc/hcs-vc-document-hash-base.ts | 59 ----- .../hcs/vc/hcs-vc-document-json-properties.ts | 15 -- src/identity/hcs/vc/hcs-vc-message.ts | 117 --------- src/identity/hcs/vc/hcs-vc-operation.ts | 9 - src/identity/hcs/vc/hcs-vc-status-resolver.ts | 96 -------- src/identity/hcs/vc/hcs-vc-topic-listener.ts | 109 --------- src/identity/hcs/vc/hcs-vc-transaction.ts | 84 ------- src/identity/hcs/vc/issuer.ts | 67 ----- src/index.ts | 18 -- test/vc/demo-access-credential.js | 77 ------ .../vc/demo-verifiable-credential-document.js | 22 -- test/vc/hcs-vc-document-base-test.js | 127 ---------- test/vc/hcs-vc-document-operations-test.js | 111 --------- test/vc/hcs-vc-encryption-test.js | 176 -------------- 25 files changed, 8 insertions(+), 1700 deletions(-) delete mode 100644 src/identity/hcs/vc/credential-subject.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-document-base.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-document-hash-base.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-document-json-properties.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-message.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-operation.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-status-resolver.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-topic-listener.ts delete mode 100644 src/identity/hcs/vc/hcs-vc-transaction.ts delete mode 100644 src/identity/hcs/vc/issuer.ts delete mode 100644 test/vc/demo-access-credential.js delete mode 100644 test/vc/demo-verifiable-credential-document.js delete mode 100644 test/vc/hcs-vc-document-base-test.js delete mode 100644 test/vc/hcs-vc-document-operations-test.js delete mode 100644 test/vc/hcs-vc-encryption-test.js diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 4e6401d..bb293d4 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -31,7 +31,7 @@ export class HcsDidMessage extends Message { * * @param operation The operation on DID document. * @param did The DID string. - * @param didDocumentBase64 The Base64-encoded DID document. + * @param event The DID Event. */ constructor(operation: DidMethodOperation, did: string, event: HcsDidEvent) { super(); @@ -137,33 +137,6 @@ export class HcsDidMessage extends Message { return true; } - /** - * Extracts #did-root-key from the DID document. - * - * @return Public key of the DID subject. - */ - /** - * TODO: message no longer contains the whole DID document - */ - // public extractDidRootKey(): PublicKey { - // let result: PublicKey = null; - // try { - // const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); - // // Make sure that DID root key is present in the document - // if (doc.getDidRootKey() != null && doc.getDidRootKey().getPublicKeyMultibase() != null) { - // const publicKeyBytes: Uint8Array = Hashing.multibase.decode( - // doc.getDidRootKey().getPublicKeyMultibase() - // ); - // result = PublicKey.fromBytes(publicKeyBytes); - // } - // // ArrayIndexOutOfBoundsException is thrown in case public key is invalid in PublicKey.fromBytes - // } catch (e) { - // return null; - // } - - // return result; - // } - public toJsonTree(): any { const result: any = super.toJsonTree(); result.operation = this.operation; @@ -193,74 +166,4 @@ export class HcsDidMessage extends Message { public static fromJson(json: string): Message { return Message.fromJsonTree(JSON.parse(json)); } - - /** - * Creates a new DID message for submission to HCS topic. - * - * @param didDocumentJson DID document as JSON string. - * @param operation The operation on DID document. - * @return The HCS message wrapped in an envelope for the given DID document and method operation. - */ - /** - * TODO: we no longer submit the whole DID document - */ - // public static fromDidDocumentJson( - // didDocumentJson: string, - // operation: DidMethodOperation - // ): MessageEnvelope { - // const didDocumentBase: DidDocumentBase = DidDocumentBase.fromJson(didDocumentJson); - // const didDocumentBase64 = Hashing.base64.encode(didDocumentJson); - // const message: HcsDidMessage = new HcsDidMessage(operation, didDocumentBase.getId(), didDocumentBase64); - // return new MessageEnvelope(message); - // } - - /** - * Provides an encryption operator that converts an {@link HcsDidMessage} into encrypted one. - * - * @param encryptionFunction The encryption function to use for encryption of single attributes. - * @return The encryption operator instance. - */ - // public static getEncrypter(encryptionFunction: Encrypter): Encrypter { - // if (encryptionFunction == null) { - // throw "Encryption function is missing or null."; - // } - // return function (message: HcsDidMessage): HcsDidMessage { - // const operation: DidMethodOperation = message.getOperation(); - // // Encrypt the DID - // const encryptedDid: string = encryptionFunction(message.getDid()); - // const did: string = Hashing.base64.encode(encryptedDid); - // // Encrypt the DID document - // const encryptedDoc: string = encryptionFunction(message.getDidDocumentBase64()); - // const didDocumentBase64: string = Hashing.base64.encode(encryptedDoc); - // return new HcsDidMessage(operation, did, didDocumentBase64); - // }; - // } - - /** - * Provides a decryption function that converts {@link HcsDidMessage} in encrypted for into a plain form. - * - * @param decryptionFunction The decryption function to use for decryption of single attributes. - * @return The Decryption function for the {@link HcsDidMessage} - */ - // public static getDecrypter(decryptionFunction: Decrypter): Decrypter { - // if (decryptionFunction == null) { - // throw "Decryption function is missing or null."; - // } - // return function (encryptedMsg: HcsDidMessage, consensusTimestamp: Timestamp): HcsDidMessage { - // const operation: DidMethodOperation = encryptedMsg.getOperation(); - // // Decrypt DID string - // let decryptedDid: string = encryptedMsg.getDid(); - // if (decryptedDid != null) { - // const did: string = Hashing.base64.decode(decryptedDid); - // decryptedDid = decryptionFunction(did, consensusTimestamp); - // } - // // Decrypt DID document - // let decryptedDocBase64 = encryptedMsg.getDidDocumentBase64(); - // if (decryptedDocBase64 != null) { - // const doc: string = Hashing.base64.decode(decryptedDocBase64); - // decryptedDocBase64 = decryptionFunction(doc, consensusTimestamp); - // } - // return new HcsDidMessage(operation, decryptedDid, decryptedDocBase64); - // }; - // } } diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 3643bc3..dbbc99a 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -31,28 +31,12 @@ export class HcsDidTopicListener extends MessageListener { protected override isMessageValid(envelope: MessageEnvelope, response: TopicMessage): boolean { try { - // const msgDecrypter = !!this.decrypter ? HcsDidMessage.getDecrypter(this.decrypter) : null; - /** - * TODO: Looks like we no longer encrypt messages - */ - const msgDecrypter = null; - - const message: HcsDidMessage = envelope.open(msgDecrypter); + const message: HcsDidMessage = envelope.open(); if (!message) { this.reportInvalidMessage(response, "Empty message received when opening envelope"); return false; } - /** - * TODO: message no longer contains the whole DID document - */ - - // const key = message.extractDidRootKey(); - // if (!envelope.isSignatureValid(key)) { - // this.reportInvalidMessage(response, "Signature validation failed"); - // return false; - // } - if (!message.isValid(this.topicId)) { this.reportInvalidMessage(response, "Message content validation failed."); return false; diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts index ef72b08..c067b90 100644 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ b/src/identity/hcs/hcs-identity-network-builder.ts @@ -1,10 +1,9 @@ -import { Client, FileCreateTransaction, Hbar, PublicKey, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; +import { Client, Hbar, PublicKey, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; import { HcsIdentityNetwork } from "./hcs-identity-network"; export class HcsIdentityNetworkBuilder { - private appnetName: string; private didTopicId: TopicId; - private vcTopicId: TopicId; + private network: string; private didServers: string[]; private publicKey: PublicKey; @@ -24,18 +23,7 @@ export class HcsIdentityNetworkBuilder { const didTxId = await didTopicCreateTransaction.execute(client); this.didTopicId = (await didTxId.getReceipt(client)).topicId; - const vcTopicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(this.maxTransactionFee) - .setTopicMemo(this.vcTopicMemo); - - if (this.publicKey) { - vcTopicCreateTransaction.setAdminKey(this.publicKey); - } - - const vcTxId = await vcTopicCreateTransaction.execute(client); - this.vcTopicId = (await vcTxId.getReceipt(client)).topicId; - - return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId, this.vcTopicId); + return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId); } public addAppnetDidServer(serverUrl: string): HcsIdentityNetworkBuilder { @@ -50,11 +38,6 @@ export class HcsIdentityNetworkBuilder { return this; } - public setAppnetName(appnetName: string): HcsIdentityNetworkBuilder { - this.appnetName = appnetName; - return this; - } - public setDidTopicMemo(didTopicMemo: string): HcsIdentityNetworkBuilder { this.didTopicMemo = didTopicMemo; return this; @@ -70,11 +53,6 @@ export class HcsIdentityNetworkBuilder { return this; } - public setVCTopicId(vcTopicId: TopicId): HcsIdentityNetworkBuilder { - this.vcTopicId = vcTopicId; - return this; - } - public setMaxTransactionFee(maxTransactionFee: Hbar): HcsIdentityNetworkBuilder { this.maxTransactionFee = maxTransactionFee; return this; diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts index 5b8523b..fd05e05 100644 --- a/src/identity/hcs/hcs-identity-network.ts +++ b/src/identity/hcs/hcs-identity-network.ts @@ -5,11 +5,6 @@ import { HcsDidResolver } from "./did/hcs-did-resolver"; import { HcsDidTopicListener } from "./did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./did/hcs-did-transaction"; import { MessageEnvelope } from "./message-envelope"; -import { HcsVcMessage } from "./vc/hcs-vc-message"; -import { HcsVcOperation } from "./vc/hcs-vc-operation"; -import { HcsVcStatusResolver } from "./vc/hcs-vc-status-resolver"; -import { HcsVcTopicListener } from "./vc/hcs-vc-topic-listener"; -import { HcsVcTransaction } from "./vc/hcs-vc-transaction"; /** * Identity network based on Hedera HCS DID method specification. @@ -22,8 +17,6 @@ export class HcsIdentityNetwork { private didTopicId: TopicId; - private vcTopicId: TopicId; - /** * Instantiates existing identity network using a DID generated for this network. * @@ -43,15 +36,10 @@ export class HcsIdentityNetwork { * @param network The Hedera network. * @return The identity network instance. */ - public static async fromHcsDidAndVCTopic( - network: string, - didTopicId: TopicId, - vcTopicId: TopicId - ): Promise { + public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId): Promise { const result = new HcsIdentityNetwork(); result.network = network; result.didTopicId = didTopicId; - result.vcTopicId = vcTopicId; return result; } @@ -87,46 +75,6 @@ export class HcsIdentityNetwork { } } - /** - * Instantiates a {@link HcsVcTransaction} to perform the specified operation on the VC document. - * - * @param operation The type of operation. - * @param credentialHash Credential hash. - * @param signerPublicKey Public key of the signer (issuer). - * @return The transaction instance. - */ - public createVcTransaction( - operation: HcsVcOperation, - credentialHash: string, - signerPublicKey: PublicKey - ): HcsVcTransaction; - - /** - * Instantiates a {@link HcsVcTransaction} to perform the specified operation on the VC document status. - * - * @param message The VC topic message ready to for sending. - * @param signerPublicKey Public key of the signer (usually issuer). - * @return The {@link HcsVcTransaction} instance. - */ - public createVcTransaction(message: MessageEnvelope, signerPublicKey: PublicKey): HcsVcTransaction; - - public createVcTransaction(...args): HcsVcTransaction { - if ( - args.length === 3 && - // (args[0] instanceof HcsVcOperation) && - typeof args[1] === "string" && - args[2] instanceof PublicKey - ) { - const [operation, credentialHash, signerPublicKey] = args; - return new HcsVcTransaction(this.vcTopicId, operation, credentialHash, signerPublicKey); - } else if (args.length === 2 && args[0] instanceof MessageEnvelope && args[1] instanceof PublicKey) { - const [message, signerPublicKey] = args; - return new HcsVcTransaction(this.vcTopicId, message, signerPublicKey); - } else { - throw new Error("Invalid arguments"); - } - } - /** * Returns the Hedera network on which this identity network runs. * @@ -145,15 +93,6 @@ export class HcsIdentityNetwork { return this.didTopicId; } - /** - * Returns the VC Topic on which this identity network sends messages to. - * - * @return The Hedera TopicId. - */ - public getVcTopicId(): TopicId { - return this.vcTopicId; - } - /** * Generates a new DID and it's root key. * @@ -200,60 +139,4 @@ export class HcsIdentityNetwork { public getDidTopicListener(): HcsDidTopicListener { return new HcsDidTopicListener(this.didTopicId); } - - /** - * Returns a VC status resolver for this network. - * - * @return The VC status resolver for this network. - */ - public getVcStatusResolver(): HcsVcStatusResolver; - - /** - * Returns a VC status resolver for this network. - * Resolver will validate signatures of topic messages against public keys supplied - * by the given provider. - * - * @param publicKeysProvider Provider of a public keys acceptable for a given VC hash. - * @return The VC status resolver for this network. - */ - public getVcStatusResolver(publicKeysProvider: (t: string) => PublicKey[]): HcsVcStatusResolver; - - public getVcStatusResolver(...args): HcsVcStatusResolver { - if (args.length === 0) { - return new HcsVcStatusResolver(this.vcTopicId); - } else if (args.length === 1) { - const [publicKeysProvider] = args; - return new HcsVcStatusResolver(this.vcTopicId, publicKeysProvider); - } else { - throw Error("Invalid arguments"); - } - } - - /** - * Returns a VC topic listener for this network. - * - * @return The VC topic listener. - */ - public getVcTopicListener(): HcsVcTopicListener; - - /** - * Returns a VC topic listener for this network. - * This listener will validate signatures of topic messages against public keys supplied - * by the given provider. - * - * @param publicKeysProvider Provider of a public keys acceptable for a given VC hash. - * @return The VC topic listener. - */ - public getVcTopicListener(publicKeysProvider: (t: string) => PublicKey[]): HcsVcTopicListener; - - public getVcTopicListener(...args): HcsVcTopicListener { - if (args.length === 0) { - return new HcsVcTopicListener(this.vcTopicId); - } else if (args.length === 1) { - const [publicKeysProvider] = args; - return new HcsVcTopicListener(this.vcTopicId, publicKeysProvider); - } else { - throw new Error("Invalid arguments"); - } - } } diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index f778bb1..41fdede 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -136,24 +136,6 @@ export class MessageEnvelope { return result; } - /** - * Encrypts the message in this envelope and returns its encrypted instance. - * - * @param encrypter The function used to encrypt the message. - * @return This envelope instance. - */ - public encrypt(encrypter: Encrypter): MessageEnvelope { - if (!encrypter) { - throw new Error("The encryption function is not provided."); - } - - this.decryptedMessage = this.message; - this.message = encrypter(this.message); - this.mode = MessageMode.ENCRYPTED; - - return this; - } - /** * Verifies the signature of the envelope against the public key of it's signer. * @@ -193,18 +175,12 @@ export class MessageEnvelope { * @param decrypter The function used to decrypt the message. * @return The message object in a plain mode. */ - public open(decrypter: Decrypter = null): T { + public open(): T { if (this.decryptedMessage != null) { return this.decryptedMessage; } - if (MessageMode.ENCRYPTED !== this.mode) { - this.decryptedMessage = this.message; - } else if (!decrypter) { - throw new Error("The message is encrypted, provide decryption function."); - } else if (!this.decryptedMessage) { - this.decryptedMessage = decrypter(this.message, this.getConsensusTimestamp()); - } + this.decryptedMessage = this.message; return this.decryptedMessage; } diff --git a/src/identity/hcs/message-listener.ts b/src/identity/hcs/message-listener.ts index 882bb36..97a79a2 100644 --- a/src/identity/hcs/message-listener.ts +++ b/src/identity/hcs/message-listener.ts @@ -14,7 +14,6 @@ export abstract class MessageListener { protected query: TopicMessageQuery; protected errorHandler: (input: Error) => void; protected ignoreErrors: boolean; - protected decrypter: Decrypter; protected subscriptionHandle: SubscriptionHandle; protected filters: ((input: TopicMessage) => boolean)[]; protected invalidMessageHandler: (t: TopicMessage, u: string) => void; @@ -116,11 +115,6 @@ export abstract class MessageListener { return; } - if (MessageMode.ENCRYPTED === envelope.getMode() && !this.decrypter) { - this.reportInvalidMessage(response, "Message is encrypted and no decryption function was provided"); - return; - } - if (this.isMessageValid(envelope, response)) { receiver(envelope); } @@ -179,19 +173,6 @@ export abstract class MessageListener { return this; } - /** - * Defines decryption function that decrypts submitted message attributes after consensus is reached. - * Decryption function must accept a byte array of encrypted message and an Timestamp that is its consensus timestamp, - * If decrypter is not specified, encrypted messages will be ignored. - * - * @param decrypter The decryption function to use. - * @return This transaction instance. - */ - public onDecrypt(decrypter: Decrypter): MessageListener { - this.decrypter = decrypter; - return this; - } - public setStartTime(startTime: Timestamp): MessageListener { this.query.setStartTime(startTime); return this; diff --git a/src/identity/hcs/message-mode.ts b/src/identity/hcs/message-mode.ts index 6211ef0..8e7087d 100644 --- a/src/identity/hcs/message-mode.ts +++ b/src/identity/hcs/message-mode.ts @@ -1,4 +1,3 @@ export enum MessageMode { PLAIN = "plain", - ENCRYPTED = "encrypted", } diff --git a/src/identity/hcs/message-resolver.ts b/src/identity/hcs/message-resolver.ts index 6e43778..eb9adbe 100644 --- a/src/identity/hcs/message-resolver.ts +++ b/src/identity/hcs/message-resolver.ts @@ -77,7 +77,6 @@ export abstract class MessageResolver { .setEndTime(Timestamp.fromDate(new Date())) .setIgnoreErrors(false) .onError(this.errorHandler) - .onDecrypt(this.decrypter) .subscribe(client, (msg) => { return this.handleMessage(msg); }); diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index a482f1b..74fcbd2 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -12,8 +12,6 @@ export abstract class MessageTransaction { protected topicId: TopicId; protected message: MessageEnvelope; - private encrypter: Encrypter; - private decrypter: Decrypter; private buildTransactionFunction: (input: TopicMessageSubmitTransaction) => Transaction; private receiver: (input: MessageEnvelope) => void; private errorHandler: (input: Error) => void; @@ -87,17 +85,6 @@ export abstract class MessageTransaction { } } - /** - * Defines encryption function that encrypts the message attributes before submission. - * - * @param encrypter The encrypter to use. - * @return This transaction instance. - */ - public onEncrypt(encrypter: Encrypter): MessageTransaction { - this.encrypter = encrypter; - return this; - } - /** * Handles event from a mirror node when a message was consensus was reached and message received. * @@ -120,18 +107,6 @@ export abstract class MessageTransaction { return this; } - /** - * Defines decryption function that decrypts message attributes after consensus is reached. - * Decryption function must accept a byte array of encrypted message and an Timestamp that is its consensus timestamp, - * - * @param decrypter The decrypter to use. - * @return This transaction instance. - */ - public onDecrypt(decrypter: Decrypter): MessageTransaction { - this.decrypter = decrypter; - return this; - } - /** * Defines a function that signs the message. * @@ -170,10 +145,6 @@ export abstract class MessageTransaction { const envelope = !this.message ? this.buildMessage() : this.message; - if (this.encrypter) { - envelope.encrypt(this.provideMessageEncrypter(this.encrypter)); - } - const messageContent = !envelope.getSignature() ? envelope.sign(this.signer) : ArraysUtils.fromString(envelope.toJSON()); @@ -199,7 +170,6 @@ export abstract class MessageTransaction { this.handleError(new Error(reason + ": " + ArraysUtils.toString(response.contents))); this.listener.unsubscribe(); }) - .onDecrypt(this.decrypter) .subscribe(client, (msg) => { this.listener.unsubscribe(); this.receiver(msg); @@ -236,9 +206,5 @@ export abstract class MessageTransaction { "Signing function is missing." ); validator.require(!!this.buildTransactionFunction, "Transaction builder is missing."); - validator.require( - (!!this.encrypter && !!this.decrypter) || (!this.decrypter && !this.encrypter), - "Either both encrypter and decrypter must be specified or none." - ); } } diff --git a/src/identity/hcs/vc/credential-subject.ts b/src/identity/hcs/vc/credential-subject.ts deleted file mode 100644 index f8bc237..0000000 --- a/src/identity/hcs/vc/credential-subject.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { HcsVcDocumentJsonProperties } from "./hcs-vc-document-json-properties"; - -export class CredentialSubject { - protected id: string; - - public getId(): string { - return this.id; - } - - public setId(id: string): void { - this.id = id; - } - - // JsonClass - - public toJsonTree(): any { - const rootObject = {}; - rootObject[HcsVcDocumentJsonProperties.ID] = this.id; - return rootObject; - } - - public static fromJsonTree(root: any, result?: CredentialSubject): CredentialSubject { - if (!result) result = new CredentialSubject(); - result.id = root[HcsVcDocumentJsonProperties.ID]; - return result; - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJson(json: string): CredentialSubject { - let result: CredentialSubject; - - try { - const root = JSON.parse(json); - result = this.fromJsonTree(root); - } catch (e) { - throw new Error("Given JSON string is not a valid CredentialSubject " + e.message); - } - - return result; - } -} diff --git a/src/identity/hcs/vc/hcs-vc-document-base.ts b/src/identity/hcs/vc/hcs-vc-document-base.ts deleted file mode 100644 index 25c1eba..0000000 --- a/src/identity/hcs/vc/hcs-vc-document-base.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { Timestamp } from "@hashgraph/sdk"; -import { Hashing } from "../../../utils/hashing"; -import { TimestampUtils } from "../../../utils/timestamp-utils"; -import { HcsDid } from "../did/hcs-did"; -import { JsonClass } from "../json-class"; -import { CredentialSubject } from "./credential-subject"; -import { HcsVcDocumentHashBase } from "./hcs-vc-document-hash-base"; -import { HcsVcDocumentJsonProperties } from "./hcs-vc-document-json-properties"; -import { Issuer } from "./issuer"; - -/** - * The base for a VC document generation in JSON-LD format. - * VC documents according to W3C draft specification must be compatible with JSON-LD version 1.1 Up until now there is - * no Java implementation library of JSON-LD version 1.1. For that reason this object represents only the most basic and - * mandatory attributes from the VC specification and Hedera HCS DID method specification point of view. Applications - * shall extend it with any VC document properties or custom properties they require. - */ -export class HcsVcDocumentBase extends HcsVcDocumentHashBase { - protected context: string[]; - protected credentialSubject: T[]; - - /** - * Creates a new VC Document instance. - */ - constructor() { - super(); - this.context = [HcsVcDocumentJsonProperties.FIRST_CONTEXT_ENTRY]; - } - - /** - * Constructs a credential hash that uniquely identifies this verifiable credential. - * This is not a credential ID, but a hash composed of the properties included in HcsVcDocumentHashBase class - * (excluding issuer name). - * Credential hash is used to find the credential on Hedera VC registry. - * Due to the nature of the VC document the hash taken from the base mandatory fields in this class - * and shall produce a unique constant. - * W3C specification defines ID field of a verifiable credential as not mandatory, however Hedera requires issuers to - * define this property for each VC. - * - * @return The credential hash uniquely identifying this verifiable credential. - */ - public toCredentialHash(): string { - const map = {}; - map[HcsVcDocumentJsonProperties.ID] = this.id; - map[HcsVcDocumentJsonProperties.TYPE] = this.type; - map[HcsVcDocumentJsonProperties.ISSUER] = this.issuer.getId(); - map[HcsVcDocumentJsonProperties.ISSUANCE_DATE] = TimestampUtils.toJSON(this.issuanceDate); - const json: string = JSON.stringify(map); - const hash: Uint8Array = Hashing.sha256.digest(json); - return Hashing.multibase.encode(hash); - } - - public getContext(): string[] { - return this.context; - } - - public getId(): string { - return this.id; - } - - public getType(): string[] { - return this.type; - } - - public getIssuer(): Issuer { - return this.issuer; - } - - public getIssuanceDate(): Timestamp { - return this.issuanceDate; - } - - public getCredentialSubject(): T[] { - return this.credentialSubject; - } - - public setId(id: string): void { - this.id = id; - } - - public setIssuer(issuerDid: string): void; - public setIssuer(issuer: Issuer): void; - public setIssuer(issuerDid: HcsDid): void; - public setIssuer(...args: any[]): void { - if (typeof args[0] === "string") { - this.issuer = new Issuer(args[0]); - return; - } - if (args[0] instanceof Issuer) { - this.issuer = args[0]; - return; - } - if (args[0] instanceof HcsDid) { - this.issuer = new Issuer(args[0].toDid()); - return; - } - } - - public setIssuanceDate(issuanceDate: Timestamp): void { - this.issuanceDate = issuanceDate; - } - - /** - * Adds an additional context to @context field of the VC document. - * - * @param context The context to add. - */ - public addContext(context: string): void { - this.context.push(context); - } - - /** - * Adds an additional type to `type` field of the VC document. - * - * @param type The type to add. - */ - public addType(type: string): void { - this.type.push(type); - } - - /** - * Adds a credential subject. - * - * @param credentialSubject The credential subject to add. - */ - public addCredentialSubject(credentialSubject: T): void { - if (this.credentialSubject == null) { - this.credentialSubject = []; - } - - this.credentialSubject.push(credentialSubject); - } - - /** - * Checks if all mandatory fields of a VC document are filled in. - * - * @return True if the document is complete and false otherwise. - */ - public isComplete(): boolean { - return ( - this.context != null && - !!this.context.length && - HcsVcDocumentJsonProperties.FIRST_CONTEXT_ENTRY == this.context[0] && - this.type != null && - !!this.type.length && - this.type.indexOf(HcsVcDocumentJsonProperties.VERIFIABLE_CREDENTIAL_TYPE) > -1 && - this.issuanceDate != null && - this.issuer != null && - !!this.issuer.getId() && - this.credentialSubject != null && - !!this.credentialSubject.length - ); - } - - // JsonClass - - public toJsonTree(): any { - const rootObject = super.toJsonTree(); - - const context = []; - if (this.context) { - for (let index = 0; index < this.context.length; index++) { - const element = this.context[index]; - context.push(element); - } - } - rootObject[HcsVcDocumentJsonProperties.CONTEXT] = context; - - const credentialSubject = []; - if (this.credentialSubject) { - for (let index = 0; index < this.credentialSubject.length; index++) { - const element = this.credentialSubject[index]; - credentialSubject.push(element.toJsonTree()); - } - } - rootObject[HcsVcDocumentJsonProperties.CREDENTIAL_SUBJECT] = credentialSubject; - - return rootObject; - } - - public static fromJsonTree( - root: any, - result?: HcsVcDocumentBase, - credentialSubjectClass?: JsonClass - ): HcsVcDocumentBase { - if (!result) result = new HcsVcDocumentBase(); - result = HcsVcDocumentHashBase.fromJsonTree(root, result) as HcsVcDocumentBase; - const jsonCredentialSubject = root[HcsVcDocumentJsonProperties.CREDENTIAL_SUBJECT] as any[]; - const credentialSubject: U[] = []; - for (let i = 0; i < jsonCredentialSubject.length; i++) { - const item = jsonCredentialSubject[i]; - const subject: U = credentialSubjectClass.fromJsonTree(item); - credentialSubject.push(subject); - } - result.credentialSubject = credentialSubject; - return result; - } - - /** - * Converts this document into a JSON string. - * - * @return The JSON representation of this document. - */ - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - /** - * Converts a VC document in JSON format into a {@link HcsVcDocumentBase} object. - * Please note this conversion respects only the fields of the base VC document. All other fields are ignored. - * - * @param The type of the credential subject. - * @param json The VC document as JSON string. - * @param credentialSubjectClass The type of the credential subject inside. - * @return The {@link HcsVcDocumentBase} object. - */ - public static fromJson( - json: string, - credentialSubjectClass?: JsonClass - ): HcsVcDocumentBase { - let result: HcsVcDocumentBase; - try { - const root = JSON.parse(json); - result = this.fromJsonTree(root, null, credentialSubjectClass); - } catch (e) { - throw new Error("Given JSON string is not a valid HcsVcDocumentBase " + e.message); - } - return result; - } -} diff --git a/src/identity/hcs/vc/hcs-vc-document-hash-base.ts b/src/identity/hcs/vc/hcs-vc-document-hash-base.ts deleted file mode 100644 index a5bb848..0000000 --- a/src/identity/hcs/vc/hcs-vc-document-hash-base.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Timestamp } from "@hashgraph/sdk"; -import { TimestampUtils } from "../../../utils/timestamp-utils"; -import { HcsVcDocumentJsonProperties } from "./hcs-vc-document-json-properties"; -import { Issuer } from "./issuer"; - -/** - * The part of the VC document that is used for hash calculation. - */ -export class HcsVcDocumentHashBase { - protected id: string; - protected type: string[]; - protected issuer: Issuer; - protected issuanceDate: Timestamp; - - /** - * Creates a new VC document instance. - */ - constructor() { - this.type = [HcsVcDocumentJsonProperties.VERIFIABLE_CREDENTIAL_TYPE]; - } - - // JsonClass - - public toJsonTree(): any { - const rootObject = {}; - if (this.id) rootObject[HcsVcDocumentJsonProperties.ID] = this.id; - if (this.type) rootObject[HcsVcDocumentJsonProperties.TYPE] = this.type; - if (this.issuer) rootObject[HcsVcDocumentJsonProperties.ISSUER] = this.issuer.toJsonTree(); - if (this.issuanceDate) - rootObject[HcsVcDocumentJsonProperties.ISSUANCE_DATE] = TimestampUtils.toJSON(this.issuanceDate); - return rootObject; - } - - public static fromJsonTree(root: any, result?: HcsVcDocumentHashBase): HcsVcDocumentHashBase { - if (!result) result = new HcsVcDocumentHashBase(); - if (root[HcsVcDocumentJsonProperties.ID]) result.id = root[HcsVcDocumentJsonProperties.ID]; - if (root[HcsVcDocumentJsonProperties.TYPE]) result.type = root[HcsVcDocumentJsonProperties.TYPE]; - if (root[HcsVcDocumentJsonProperties.ISSUER]) - result.issuer = Issuer.fromJsonTree(root[HcsVcDocumentJsonProperties.ISSUER]); - if (root[HcsVcDocumentJsonProperties.ISSUANCE_DATE]) - result.issuanceDate = TimestampUtils.fromJson(root[HcsVcDocumentJsonProperties.ISSUANCE_DATE]); - return result; - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJson(json: string): HcsVcDocumentHashBase { - let result: HcsVcDocumentHashBase; - try { - const root = JSON.parse(json); - result = this.fromJsonTree(root); - } catch (e) { - throw new Error("Given JSON string is not a valid HcsVcDocumentHashBase " + e.message); - } - return result; - } -} diff --git a/src/identity/hcs/vc/hcs-vc-document-json-properties.ts b/src/identity/hcs/vc/hcs-vc-document-json-properties.ts deleted file mode 100644 index b07d14c..0000000 --- a/src/identity/hcs/vc/hcs-vc-document-json-properties.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Key property names in VC document standard. - */ -export module HcsVcDocumentJsonProperties { - export const CONTEXT = "@context"; - export const FIRST_CONTEXT_ENTRY = "https://www.w3.org/2018/credentials/v1"; - export const ID = "id"; - export const CREDENTIAL_SUBJECT = "credentialSubject"; - export const TYPE = "type"; - export const VERIFIABLE_CREDENTIAL_TYPE = "VerifiableCredential"; - export const ISSUER = "issuer"; - export const ISSUANCE_DATE = "issuanceDate"; - export const CREDENTIAL_STATUS = "credentialStatus"; - export const PROOF = "proof"; -} diff --git a/src/identity/hcs/vc/hcs-vc-message.ts b/src/identity/hcs/vc/hcs-vc-message.ts deleted file mode 100644 index c69c206..0000000 --- a/src/identity/hcs/vc/hcs-vc-message.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { Timestamp } from "@hashgraph/sdk"; -import { Hashing } from "../../../utils/hashing"; -import { Decrypter, Encrypter, Message } from "../message"; -import { MessageEnvelope } from "../message-envelope"; -import { HcsVcOperation } from "./hcs-vc-operation"; - -export class HcsVcMessage extends Message { - private operation: HcsVcOperation; - private credentialHash: string; - - /** - * Creates a new message instance. - * - * @param operation Operation type. - * @param credentialHash Credential hash. - */ - constructor(operation: HcsVcOperation, credentialHash: string) { - super(); - this.operation = operation; - this.credentialHash = credentialHash; - } - - /** - * Checks if the message is valid from content point of view. - * Does not verify hash nor any signatures. - * - * @return True if the message is valid and False otherwise. - */ - public isValid(): boolean { - return !!this.credentialHash && !!this.operation; - } - - public getOperation(): HcsVcOperation { - return this.operation; - } - - public getCredentialHash(): string { - return this.credentialHash; - } - - public toJsonTree(): any { - const result: any = super.toJsonTree(); - result.operation = this.operation; - result.credentialHash = this.credentialHash; - return result; - } - - public static fromJsonTree(tree: any, result?: HcsVcMessage): HcsVcMessage { - if (!result) { - result = new HcsVcMessage(tree.operation, tree.credentialHash); - } else { - result.operation = tree.operation; - result.credentialHash = tree.credentialHash; - } - result = super.fromJsonTree(tree, result) as HcsVcMessage; - return result; - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJson(json: string): Message { - return Message.fromJsonTree(JSON.parse(json)); - } - - /** - * Creates a new VC message for submission to HCS topic. - * - * @param credentialHash VC hash. - * @param operation The operation on a VC document. - * @return The HCS message wrapped in an envelope for the given VC and operation. - */ - public static fromCredentialHash(credentialHash: string, operation: HcsVcOperation): MessageEnvelope { - const message: HcsVcMessage = new HcsVcMessage(operation, credentialHash); - return new MessageEnvelope(message); - } - - /** - * Provides an encryption operator that converts an {@link HcsVcMessage} into encrypted one. - * - * @param encryptionFunction The encryption function to use for encryption of single attributes. - * @return The encryption operator instance. - */ - public static getEncrypter(encryptionFunction: Encrypter): Encrypter { - if (encryptionFunction == null) { - throw "Encryption function is missing or null."; - } - return function (message: HcsVcMessage) { - // Encrypt the credential hash - const encryptedHash: string = encryptionFunction(message.getCredentialHash()); - const hash = Hashing.base64.encode(encryptedHash); - return new HcsVcMessage(message.getOperation(), hash); - }; - } - - /** - * Provides a decryption function that converts {@link HcsVcMessage} in encrypted for into a plain form. - * - * @param decryptionFunction The decryption function to use for decryption of single attributes. - * @return The decryption function for the {@link HcsVcMessage} - */ - public static getDecrypter(decryptionFunction: Decrypter): Decrypter { - if (decryptionFunction == null) { - throw "Decryption function is missing or null."; - } - return function (encryptedMsg: HcsVcMessage, consensusTimestamp: Timestamp) { - // Decrypt DID string - let decryptedHash: string = encryptedMsg.getCredentialHash(); - if (decryptedHash != null) { - const hash: string = Hashing.base64.decode(decryptedHash); - decryptedHash = decryptionFunction(hash, consensusTimestamp); - } - return new HcsVcMessage(encryptedMsg.getOperation(), decryptedHash); - }; - } -} diff --git a/src/identity/hcs/vc/hcs-vc-operation.ts b/src/identity/hcs/vc/hcs-vc-operation.ts deleted file mode 100644 index b450d7a..0000000 --- a/src/identity/hcs/vc/hcs-vc-operation.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * The operation type to be performed on the DID document. - */ -export enum HcsVcOperation { - ISSUE = "issue", - REVOKE = "revoke", - SUSPEND = "suspend", - RESUME = "resume", -} diff --git a/src/identity/hcs/vc/hcs-vc-status-resolver.ts b/src/identity/hcs/vc/hcs-vc-status-resolver.ts deleted file mode 100644 index 0f50969..0000000 --- a/src/identity/hcs/vc/hcs-vc-status-resolver.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { TopicId } from "@hashgraph/sdk"; -import { TimestampUtils } from "../../../utils/timestamp-utils"; -import { MessageEnvelope } from "../message-envelope"; -import { MessageListener } from "../message-listener"; -import { MessageResolver } from "../message-resolver"; -import { HcsVcMessage } from "./hcs-vc-message"; -import { HcsVcOperation } from "./hcs-vc-operation"; -import { HcsVcTopicListener, PublicKeysProvider } from "./hcs-vc-topic-listener"; - -/** - * Resolves the DID from Hedera network. - */ -export class HcsVcStatusResolver extends MessageResolver { - /** - * A function providing a collection of public keys accepted for a given credential hash. - * If the function is not supplied, the listener will not validate signatures. - */ - private publicKeysProvider: PublicKeysProvider; - - /** - * Instantiates a new status resolver for the given VC topic. - * - * @param topicId The HCS VC topic ID. - */ - constructor(topicId: TopicId); - /** - * Instantiates a new status resolver for the given VC topic with signature validation. - * - * @param topicId The VC consensus topic ID. - * @param publicKeysProvider Provider of a public keys acceptable for a given VC hash. - */ - constructor(topicId: TopicId, publicKeysProvider: PublicKeysProvider); - constructor(...args: any[]) { - const topicId = args[0] as TopicId; - super(topicId); - if (args[1]) { - this.publicKeysProvider = args[1]; - } else { - this.publicKeysProvider = null; - } - } - - /** - * Adds a credential hash to resolve its status. - * - * @param credentialHash The credential hash string. - * @return This resolver instance. - */ - public addCredentialHash(credentialHash: string): HcsVcStatusResolver { - if (credentialHash != null) { - this.results.set(credentialHash, null); - } - return this; - } - - /** - * Adds multiple VC hashes to resolve. - * - * @param hashes The set of VC hash strings. - * @return This resolver instance. - */ - public addCredentialHashes(hashes: string[]): HcsVcStatusResolver { - if (hashes != null) { - hashes.forEach((d) => this.addCredentialHash(d)); - } - - return this; - } - - protected override matchesSearchCriteria(message: HcsVcMessage): boolean { - return this.results.has(message.getCredentialHash()); - } - - protected override supplyMessageListener(): MessageListener { - return new HcsVcTopicListener(this.topicId, this.publicKeysProvider); - } - - protected override processMessage(envelope: MessageEnvelope): void { - const message: HcsVcMessage = envelope.open(); - - // Skip messages that are older than the once collected or if we already have a REVOKED message - const existing: MessageEnvelope = this.results.get(message.getCredentialHash()); - - const chackOperation = - existing != null && - (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || - (HcsVcOperation.REVOKE == existing.open().getOperation() && - HcsVcOperation.REVOKE != message.getOperation())); - if (chackOperation) { - return; - } - - // Add valid message to the results - this.results.set(message.getCredentialHash(), envelope); - } -} diff --git a/src/identity/hcs/vc/hcs-vc-topic-listener.ts b/src/identity/hcs/vc/hcs-vc-topic-listener.ts deleted file mode 100644 index 8f0c5ac..0000000 --- a/src/identity/hcs/vc/hcs-vc-topic-listener.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { PublicKey, TopicId, TopicMessage } from "@hashgraph/sdk"; -import { MessageEnvelope } from "../message-envelope"; -import { MessageListener } from "../message-listener"; -import { HcsVcMessage } from "./hcs-vc-message"; - -export type PublicKeysProvider = (t: string) => PublicKey[]; - -/** - * A listener of confirmed {@link HcsVcMessage} messages from a VC topic. - * Messages are received from a given mirror node, parsed and validated. - */ -export class HcsVcTopicListener extends MessageListener { - /** - * A function providing a collection of public keys accepted for a given credential hash. - * If the function is not supplied, the listener will not validate signatures. - */ - private publicKeysProvider: PublicKeysProvider; - - /** - * Creates a new instance of a VC topic listener for the given consensus topic. - * By default, invalid messages are ignored and errors are not. - * Listener without a public key provider will not validate message signatures. - * - * @param vcTopicId The VC consensus topic ID. - */ - constructor(vcTopicId: TopicId); - /** - * Creates a new instance of a VC topic listener for the given consensus topic. - * By default, invalid messages are ignored and errors are not. - * - * @param vcTopicId The VC consensus topic ID. - * @param publicKeysProvider Provider of a public keys acceptable for a given VC hash. - */ - constructor(vcTopicId: TopicId, publicKeysProvider: PublicKeysProvider); - constructor(...args: any[]) { - const vcTopicId = args[0] as TopicId; - super(vcTopicId); - if (args[1]) { - this.publicKeysProvider = args[1]; - } else { - this.publicKeysProvider = null; - } - } - - protected override extractMessage(response: TopicMessage): MessageEnvelope { - let result: MessageEnvelope = null; - try { - result = MessageEnvelope.fromMirrorResponse(response, HcsVcMessage); - } catch (err) { - this.handleError(err); - } - return result; - } - - protected override isMessageValid(envelope: MessageEnvelope, response: TopicMessage): boolean { - try { - const msgDecrypter = !!this.decrypter ? HcsVcMessage.getDecrypter(this.decrypter) : null; - - const message: HcsVcMessage = envelope.open(msgDecrypter); - if (message == null) { - this.reportInvalidMessage(response, "Empty message received when opening envelope"); - return false; - } - - if (!message.isValid()) { - this.reportInvalidMessage(response, "Message content validation failed."); - return false; - } - - // Validate signature only if public key provider has been supplied. - if (!!this.publicKeysProvider && !this.isSignatureAccepted(envelope)) { - this.reportInvalidMessage(response, "Signature validation failed"); - return false; - } - - return true; - } catch (err) { - this.handleError(err); - this.reportInvalidMessage(response, "Exception while validating message: " + err.message); - return false; - } - } - - /** - * Checks if the signature on the envelope is accepted by any public key supplied for the credential hash. - * - * @param envelope The message envelope. - * @return True if signature is accepted, false otherwise. - */ - private isSignatureAccepted(envelope: MessageEnvelope): boolean { - if (!this.publicKeysProvider) { - return false; - } - - const message: HcsVcMessage = envelope.open(); - const acceptedKeys: PublicKey[] = this.publicKeysProvider(message.getCredentialHash()); - if (!acceptedKeys || !acceptedKeys.length) { - return false; - } - - for (let publicKey of acceptedKeys) { - if (envelope.isSignatureValid(publicKey)) { - return true; - } - } - - return false; - } -} diff --git a/src/identity/hcs/vc/hcs-vc-transaction.ts b/src/identity/hcs/vc/hcs-vc-transaction.ts deleted file mode 100644 index fa59b52..0000000 --- a/src/identity/hcs/vc/hcs-vc-transaction.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { MessageTransaction } from "../message-transaction"; -import { HcsVcMessage } from "./hcs-vc-message"; -import { HcsVcOperation } from "./hcs-vc-operation"; -import { PublicKey, TopicId } from "@hashgraph/sdk"; -import { MessageEnvelope } from "../message-envelope"; -import { Validator } from "../../../utils/validator"; -import { MessageListener } from "../message-listener"; -import { HcsVcTopicListener } from "./hcs-vc-topic-listener"; -import { Encrypter } from "../message"; - -/** - * The DID document creation, update or deletion transaction. - * Builds a correct {@link HcsDidMessage} and send it to HCS DID topic. - */ -export class HcsVcTransaction extends MessageTransaction { - private operation: HcsVcOperation; - private credentialHash: string; - private signerPublicKey: PublicKey; - - /** - * Instantiates a new transaction object. - * - * @param topicId The HCS VC topic ID where message will be submitted. - * @param operation The operation to be performed on a verifiable credential. - * @param credentialHash The hash of a credential. - * @param signerPublicKey Public key of the signer of this operation. - */ - constructor(topicId: TopicId, operation: HcsVcOperation, credentialHash: string, signerPublicKey: PublicKey); - - /** - * Instantiates a new transaction object from a message that was already prepared. - * - * @param topicId The HCS VC topic ID where message will be submitted. - * @param message The message envelope. - * @param signerPublicKey Public key of the signer of this operation. - */ - constructor(topicId: TopicId, message: MessageEnvelope, signerPublicKey: PublicKey); - constructor(...args) { - if ( - args.length === 4 && - args[0] instanceof TopicId && - // (args[1] instanceof HcsVcOperation) && - typeof args[2] === "string" && - args[3] instanceof PublicKey - ) { - const [topicId, operation, credentialHash, signerPublicKey] = args; - super(topicId); - this.operation = operation; - this.credentialHash = credentialHash; - this.signerPublicKey = signerPublicKey; - } else if ( - args.length === 3 && - args[0] instanceof TopicId && - args[1] instanceof MessageEnvelope && - args[2] instanceof PublicKey - ) { - const [topicId, message, signerPublicKey] = args; - super(topicId, message); - this.signerPublicKey = signerPublicKey; - this.operation = null; - this.credentialHash = null; - } - } - - protected validate(validator: Validator): void { - super.validate(validator); - validator.require(!!this.credentialHash || !!this.message, "Verifiable credential hash is null or empty."); - validator.require(!!this.operation || !!this.message, "Operation on verifiable credential is not defined."); - } - - protected buildMessage(): MessageEnvelope { - return HcsVcMessage.fromCredentialHash(this.credentialHash, this.operation); - } - - protected provideTopicListener(topicIdToListen: TopicId): MessageListener { - return new HcsVcTopicListener(topicIdToListen, (s) => { - return [this.signerPublicKey]; - }); - } - - protected provideMessageEncrypter(encryptionFunction: Encrypter): (input: HcsVcMessage) => HcsVcMessage { - return HcsVcMessage.getEncrypter(encryptionFunction); - } -} diff --git a/src/identity/hcs/vc/issuer.ts b/src/identity/hcs/vc/issuer.ts deleted file mode 100644 index 0ea42b6..0000000 --- a/src/identity/hcs/vc/issuer.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { HcsVcDocumentJsonProperties } from "./hcs-vc-document-json-properties"; - -export class Issuer { - protected id: string; - protected name: string; - - constructor(id: string); - constructor(id: string, name: string); - constructor(...args: any[]) { - this.id = args[0]; - this.name = args[1] || null; - } - - public getId(): string { - return this.id; - } - - public getName(): string { - return this.name; - } - - // JsonClass - - public toJsonTree(): any { - if (this.name) { - const rootObject = {}; - rootObject[HcsVcDocumentJsonProperties.ID] = this.id; - rootObject["name"] = this.name; - return rootObject; - } - return this.id; - } - - public static fromJsonTree(root: any, result?: Issuer): Issuer { - let id: string, name: string; - if (typeof root == "string") { - id = root; - } else { - id = root[HcsVcDocumentJsonProperties.ID]; - name = root["name"]; - } - if (result) { - result.id = id; - result.name = name; - return result; - } else { - return new Issuer(id, name); - } - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJson(json: string): Issuer { - let result: Issuer; - - try { - const root = JSON.parse(json); - result = this.fromJsonTree(root); - } catch (e) { - throw new Error("Given JSON string is not a valid Issuer " + e.message); - } - - return result; - } -} diff --git a/src/index.ts b/src/index.ts index cf6f7f5..b4195be 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,15 +23,6 @@ import { MessageMode } from "./identity/hcs/message-mode"; import { MessageResolver } from "./identity/hcs/message-resolver"; import { MessageTransaction } from "./identity/hcs/message-transaction"; import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; -import { CredentialSubject } from "./identity/hcs/vc/credential-subject"; -import { HcsVcDocumentBase } from "./identity/hcs/vc/hcs-vc-document-base"; -import { HcsVcDocumentHashBase } from "./identity/hcs/vc/hcs-vc-document-hash-base"; -import { HcsVcDocumentJsonProperties } from "./identity/hcs/vc/hcs-vc-document-json-properties"; -import { HcsVcMessage } from "./identity/hcs/vc/hcs-vc-message"; -import { HcsVcOperation } from "./identity/hcs/vc/hcs-vc-operation"; -import { HcsVcStatusResolver } from "./identity/hcs/vc/hcs-vc-status-resolver"; -import { HcsVcTopicListener } from "./identity/hcs/vc/hcs-vc-topic-listener"; -import { Issuer } from "./identity/hcs/vc/issuer"; import { HederaDid } from "./identity/hedera-did"; import { ArraysUtils } from "./utils/arrays-utils"; import { Ed25519PubCodec } from "./utils/ed25519PubCodec"; @@ -41,7 +32,6 @@ import { Validator } from "./utils/validator"; export { ArraysUtils, - CredentialSubject, DidDocumentBase, DidDocumentJsonProperties, DidMethodOperation, @@ -56,13 +46,6 @@ export { HcsDidTransaction, HcsIdentityNetwork, HcsIdentityNetworkBuilder, - HcsVcDocumentBase, - HcsVcDocumentHashBase, - HcsVcDocumentJsonProperties, - HcsVcMessage, - HcsVcOperation, - HcsVcStatusResolver, - HcsVcTopicListener, HcsDidDidOwnerEvent, HcsDidServiceEvent, HcsDidVerificationMethodEvent, @@ -78,6 +61,5 @@ export { SerializableMirrorConsensusResponse, TimestampUtils, Validator, - Issuer, Ed25519PubCodec, }; diff --git a/test/vc/demo-access-credential.js b/test/vc/demo-access-credential.js deleted file mode 100644 index 782e811..0000000 --- a/test/vc/demo-access-credential.js +++ /dev/null @@ -1,77 +0,0 @@ -const { CredentialSubject } = require("../../dist"); - -/** - * Example Credential. - */ -class DemoAccessCredential extends CredentialSubject { - static ACCESS_GRANTED = "granted"; - static ACCESS_DENIED = "denied"; - - blueLevel; - greenLevel; - redLevel; - - /** - * Creates a new credential instance. - * - * @param did Credential Subject DID. - * @param blue Access to blue level granted or denied. - * @param green Access to green level granted or denied. - * @param red Access to red level granted or denied. - */ - constructor(did, blue, green, red) { - super(); - this.id = did; - this.blueLevel = blue ? DemoAccessCredential.ACCESS_GRANTED : DemoAccessCredential.ACCESS_DENIED; - this.greenLevel = green ? DemoAccessCredential.ACCESS_GRANTED : DemoAccessCredential.ACCESS_DENIED; - this.redLevel = red ? DemoAccessCredential.ACCESS_GRANTED : DemoAccessCredential.ACCESS_DENIED; - } - - getBlueLevel() { - return this.blueLevel; - } - - getGreenLevel() { - return this.greenLevel; - } - - getRedLevel() { - return this.redLevel; - } - - toJsonTree() { - const json = super.toJsonTree(); - json["blueLevel"] = this.blueLevel; - json["greenLevel"] = this.greenLevel; - json["redLevel"] = this.redLevel; - return json; - } - - toJson() { - return JSON.stringify(this.toJsonTree()); - } - - static fromJsonTree(json) { - const result = new DemoAccessCredential(null, null, null, null); - super.fromJsonTree(json, result); - result.blueLevel = json["blueLevel"]; - result.greenLevel = json["greenLevel"]; - result.redLevel = json["redLevel"]; - return result; - } - - static fromJson(json) { - const root = JSON.parse(json); - return this.fromJsonTree(root); - } - - static toJsonTree(item) { - return item ? item.toJsonTree() : null; - } - - static toJson(item) { - return JSON.stringify(this.toJsonTree(item)); - } -} - -exports.DemoAccessCredential = DemoAccessCredential; diff --git a/test/vc/demo-verifiable-credential-document.js b/test/vc/demo-verifiable-credential-document.js deleted file mode 100644 index 83948db..0000000 --- a/test/vc/demo-verifiable-credential-document.js +++ /dev/null @@ -1,22 +0,0 @@ -const { HcsVcDocumentBase } = require("../../dist"); - -/** - * Custom VC document for tests. - */ -class DemoVerifiableCredentialDocument extends HcsVcDocumentBase { - customProperty; - - constructor() { - super(); - } - - getCustomProperty() { - return this.customProperty; - } - - setCustomProperty(customProperty) { - this.customProperty = customProperty; - } -} - -exports.DemoVerifiableCredentialDocument = DemoVerifiableCredentialDocument; diff --git a/test/vc/hcs-vc-document-base-test.js b/test/vc/hcs-vc-document-base-test.js deleted file mode 100644 index 0f1f773..0000000 --- a/test/vc/hcs-vc-document-base-test.js +++ /dev/null @@ -1,127 +0,0 @@ -const { HcsVcDocumentBase, Issuer } = require("../../dist"); -const { Timestamp } = require("@hashgraph/sdk"); -const { DemoAccessCredential } = require("./demo-access-credential"); -const { DemoVerifiableCredentialDocument } = require("./demo-verifiable-credential-document"); -const { NetworkReadyTestBase } = require("../network-ready-test-base"); - -const { expect, assert } = require("chai"); - -describe("HcsVcDocumentBaseTest", function () { - const network = new NetworkReadyTestBase(); - let issuer, owner; - - before(async function () { - this.timeout(60000); - await network.setup(); - - issuer = network.didNetwork.generateDid(); - owner = network.didNetwork.generateDid(); - }); - - after(async function () { - network.cleanup(); - }); - - it("Test VcDocumentConstruction", async function () { - const vc = new HcsVcDocumentBase(); - - // Should fail as no issuer is set. - assert.isFalse(vc.isComplete()); - - vc.setIssuer(issuer); - - // Should fail as no issuance date is set. - assert.isFalse(vc.isComplete()); - - vc.setIssuanceDate(Timestamp.fromDate(new Date())); - - // Should fail as no credential subject is set. - assert.isFalse(vc.isComplete()); - - // Default VC type should be set. - assert.exists(vc.getType()); - assert.equal(1, vc.getType().length); - - // Add a custom type - vc.addType("TestVC"); - assert.equal(2, vc.getType().length); - - // Default context should be set - assert.exists(vc.getContext()); - assert.equal(1, vc.getContext().length); - - // Add a custom context - vc.addContext("https://www.example.com/testContext"); - assert.equal(2, vc.getContext().length); - - // Add a credential subject. - assert.notExists(vc.getCredentialSubject()); - const credential = new DemoAccessCredential(owner.toDid(), true, false, false); - vc.addCredentialSubject(credential); - - // Make sure it's there - assert.exists(vc.getCredentialSubject()); - assert.equal(1, vc.getCredentialSubject().length); - - // Now all mandatory fields should be set - assert.isTrue(vc.isComplete()); - }); - - it("Test VcJsonConversion", async function () { - const vc = new HcsVcDocumentBase(); - vc.setId("example:test:vc:id"); - vc.setIssuer(new Issuer(issuer.toDid(), "My Company Ltd.")); - vc.setIssuanceDate(Timestamp.fromDate(new Date())); - - const subject = new DemoAccessCredential(owner.toDid(), true, false, false); - vc.addCredentialSubject(subject); - - // Convert to JSON - const json = vc.toJSON(); - assert.isFalse(!json); - - // Convert back to VC document and compare - const vcFromJson = HcsVcDocumentBase.fromJson(json, DemoAccessCredential); - // Test simple properties - assert.exists(vcFromJson); - assert.deepEqual(vc.getType(), vcFromJson.getType()); - assert.deepEqual(vc.getContext(), vcFromJson.getContext()); - assert.deepEqual(vc.getIssuanceDate(), vcFromJson.getIssuanceDate()); - assert.equal(vc.getId(), vcFromJson.getId()); - - // Test issuer object - assert.exists(vcFromJson.getIssuer()); - assert.equal(vc.getIssuer().getId(), vcFromJson.getIssuer().getId()); - assert.equal(vc.getIssuer().getName(), vcFromJson.getIssuer().getName()); - - // Test credential subject - assert.exists(vcFromJson.getCredentialSubject()); - - const subjectFromJson = vcFromJson.getCredentialSubject()[0]; - assert.equal(subject.getId(), subjectFromJson.getId()); - assert.equal(subject.getBlueLevel(), subjectFromJson.getBlueLevel()); - assert.equal(subject.getGreenLevel(), subjectFromJson.getGreenLevel()); - assert.equal(subject.getRedLevel(), subjectFromJson.getRedLevel()); - }); - - it("Test CredentialHash", async function () { - const vc = new DemoVerifiableCredentialDocument(); - vc.setId("example:test:vc:id"); - vc.setIssuer(issuer); - vc.setIssuanceDate(Timestamp.fromDate(new Date())); - vc.addCredentialSubject(new DemoAccessCredential(owner.toDid(), true, false, false)); - vc.setCustomProperty("Custom property value 1"); - - const credentialHash = vc.toCredentialHash(); - assert.isFalse(!credentialHash); - - // Recalculation should give the same value - assert.equal(credentialHash, vc.toCredentialHash()); - - // Hash shall not change if we don't change anything in the document - vc.setCustomProperty("Another value for custom property"); - vc.addCredentialSubject(new DemoAccessCredential(owner.toDid(), false, false, true)); - - assert.equal(credentialHash, vc.toCredentialHash()); - }); -}); diff --git a/test/vc/hcs-vc-document-operations-test.js b/test/vc/hcs-vc-document-operations-test.js deleted file mode 100644 index 03262c3..0000000 --- a/test/vc/hcs-vc-document-operations-test.js +++ /dev/null @@ -1,111 +0,0 @@ -const { HcsVcDocumentBase, HcsVcOperation } = require("../../dist"); -const { Timestamp } = require("@hashgraph/sdk"); -const { DemoAccessCredential } = require("./demo-access-credential"); -const { NetworkReadyTestBase } = require("../network-ready-test-base"); - -const { expect, assert } = require("chai"); - -/** - * Tests operations on verifiable credentials and their status resolution. - */ -describe("HcsVcDocumentOperationsTest", function () { - const network = new NetworkReadyTestBase(); - let issuer, owner, vc, credentialHash, issuersPrivateKey; - - before(async function () { - this.timeout(60000); - await network.setup(); - - issuer = network.didNetwork.generateDid(); - issuersPrivateKey = issuer.getPrivateDidRootKey(); - - owner = network.didNetwork.generateDid(); - - // For tests only we do not need to submit DID documents, as we will not validate them. - // final DidMethodOperation op = DidMethodOperation.CREATE; - // sendDidTransaction(issuer, issuer.generateDidDocument().toJson(), op, EXPECT_NO_ERROR); - // sendDidTransaction(owner, owner.generateDidDocument().toJson(), op, EXPECT_NO_ERROR); - - // Create an example Verifiable Credential. - vc = new HcsVcDocumentBase(); - vc.setIssuer(issuer); - vc.setIssuanceDate(Timestamp.fromDate(new Date())); - vc.addCredentialSubject(new DemoAccessCredential(owner.toDid(), true, false, false)); - - credentialHash = vc.toCredentialHash(); - }); - - after(async function () { - network.cleanup(); - }); - - const EXPECT_NO_ERROR = function (err) { - assert.notExists(err); - }; - - const testVcOperation = async function (op) { - const envelope = await network.sendVcTransaction(op, credentialHash, issuersPrivateKey, EXPECT_NO_ERROR); - - assert.exists(envelope); - - const msg = envelope.open(); - - // Check results - assert.exists(msg); - assert.isTrue(msg.isValid()); - assert.equal(op, msg.getOperation()); - assert.equal(credentialHash, msg.getCredentialHash()); - }; - - const testVcStatusResolution = async function (expectedOperation) { - const envelope = await network.resolveVcStatus( - credentialHash, - (m) => [issuersPrivateKey.publicKey], - EXPECT_NO_ERROR - ); - - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.isTrue(msg.isValid()); - assert.equal(credentialHash, msg.getCredentialHash()); - assert.equal(expectedOperation, msg.getOperation()); - }; - - it("Test Issue", async function () { - this.timeout(60000); - await testVcOperation(HcsVcOperation.ISSUE); - await testVcStatusResolution(HcsVcOperation.ISSUE); - }); - - it("Test Suspend", async function () { - this.timeout(60000); - await testVcOperation(HcsVcOperation.SUSPEND); - await testVcStatusResolution(HcsVcOperation.SUSPEND); - }); - - it("Test Resume", async function () { - this.timeout(60000); - await testVcOperation(HcsVcOperation.RESUME); - await testVcStatusResolution(HcsVcOperation.RESUME); - }); - - it("Test Revoke", async function () { - this.timeout(60000); - await testVcOperation(HcsVcOperation.REVOKE); - await testVcStatusResolution(HcsVcOperation.REVOKE); - }); - - it("Test InvalidResumeAfterRevoke", async function () { - this.timeout(120000); - await testVcOperation(HcsVcOperation.RESUME); - // Status should still be revoked - await testVcStatusResolution(HcsVcOperation.REVOKE); - - await testVcOperation(HcsVcOperation.SUSPEND); - // Status should still be revoked - await testVcStatusResolution(HcsVcOperation.REVOKE); - }); -}); diff --git a/test/vc/hcs-vc-encryption-test.js b/test/vc/hcs-vc-encryption-test.js deleted file mode 100644 index 711d40b..0000000 --- a/test/vc/hcs-vc-encryption-test.js +++ /dev/null @@ -1,176 +0,0 @@ -const { Hbar, Timestamp } = require("@hashgraph/sdk"); - -const { HcsVcDocumentBase, HcsVcOperation, HcsVcMessage, MessageEnvelope, ArraysUtils } = require("../../dist"); -const { DemoAccessCredential } = require("./demo-access-credential"); -const { DemoVerifiableCredentialDocument } = require("./demo-verifiable-credential-document"); -const { NetworkReadyTestBase, until, sleep } = require("../network-ready-test-base"); -const { encrypt, decrypt } = require("../aes-encryption-util"); - -const { expect, assert } = require("chai"); - -/** - * Tests operations on verifiable credentials and their status resolution. - */ -describe("HcsVcEncryptionTest", function () { - const MIRROR_NODE_TIMEOUT = 30 * 1000; - const NO_MORE_MESSAGES_TIMEOUT = 15 * 1000; - const FEE = new Hbar(2); - const SECRET = "Secret message used for encryption"; - const INVALID_SECRET = "Invalid secret message used for decryption"; - const network = new NetworkReadyTestBase(); - let issuer, owner, vc, credentialHash, issuersPrivateKey; - - const EXPECT_NO_ERROR = function (err) { - assert.notExists(err); - }; - - before(async function () { - this.timeout(120000); - await network.setup(); - - issuer = network.didNetwork.generateDid(); - issuersPrivateKey = issuer.getPrivateDidRootKey(); - - owner = network.didNetwork.generateDid(); - - // For tests only we do not need to submit DID documents, as we will not validate them. - // final DidMethodOperation op = DidMethodOperation.CREATE; - // sendDidTransaction(issuer, issuer.generateDidDocument().toJson(), op, EXPECT_NO_ERROR); - // sendDidTransaction(owner, owner.generateDidDocument().toJson(), op, EXPECT_NO_ERROR); - - // Create an example Verifiable Credential. - vc = new HcsVcDocumentBase(); - vc.setIssuer(issuer); - vc.setIssuanceDate(Timestamp.fromDate(new Date())); - vc.addCredentialSubject(new DemoAccessCredential(owner.toDid(), true, false, false)); - - credentialHash = vc.toCredentialHash(); - - await sleep(1000); - }); - - after(async function () { - network.cleanup(); - }); - - it("Test IssueValidEncryptedMessage", async function () { - this.timeout(60000); - - const messageRef = []; - - // Build and execute transaction with encrypted message - await network.didNetwork - .createVcTransaction(HcsVcOperation.ISSUE, credentialHash, issuersPrivateKey.publicKey) - .signMessage((doc) => issuersPrivateKey.sign(doc)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed((msg) => messageRef.push(msg)) - .onError(EXPECT_NO_ERROR) - .onEncrypt((m) => encrypt(m, SECRET)) - .onDecrypt((m, i) => decrypt(m, SECRET)) - .execute(network.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - const envelope = messageRef[0]; - - assert.exists(envelope); - - const msg = envelope.open(); - - // Check results - assert.exists(msg); - assert.isTrue(msg.isValid()); - assert.equal(credentialHash, msg.getCredentialHash()); - - await sleep(1000); - }); - - it("Test ResolveWithValidDecrypter", async function () { - this.timeout(60000); - - const mapRef = []; - - // Resolve encrypted message - network.didNetwork - .getVcStatusResolver((m) => [issuersPrivateKey.publicKey]) - .addCredentialHash(credentialHash) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(EXPECT_NO_ERROR) - .onDecrypt((m, i) => decrypt(m, SECRET)) - .whenFinished((m) => mapRef.push(m)) - .execute(network.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - const envelope = mapRef[0] ? mapRef[0].get(credentialHash) : null; - - assert.exists(envelope); - - const msg = envelope.open(); - - // Check results - assert.exists(msg); - assert.isTrue(msg.isValid()); - assert.equal(credentialHash, msg.getCredentialHash()); - - await sleep(1000); - }); - - it("Test ResolveWithInvalidDecrypter", async function () { - this.timeout(60000); - - const mapRef = []; - const errorRef = []; - - // Try to resolve encrypted message with a wrong secret - network.didNetwork - .getVcStatusResolver((m) => [issuersPrivateKey.publicKey]) - .addCredentialHash(credentialHash) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError((e) => errorRef.push(String(e))) - .onDecrypt((m, i) => decrypt(m, INVALID_SECRET)) - .whenFinished((m) => mapRef.push(m)) - .execute(network.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - const envelope = mapRef[0] ? mapRef[0].get(credentialHash) : null; - const error = errorRef[0]; - - assert.notExists(envelope); - assert.exists(error); - - await sleep(1000); - }); - - it("Test MessageEncryptionDecryption", async function () { - this.timeout(60000); - - const msg = HcsVcMessage.fromCredentialHash(credentialHash, HcsVcOperation.ISSUE); - - const encryptedMsg = msg.encrypt(HcsVcMessage.getEncrypter((m) => encrypt(m, SECRET))); - - assert.exists(encryptedMsg); - - const msgJson = ArraysUtils.toString(encryptedMsg.sign((m) => issuersPrivateKey.sign(m))); - const encryptedSignedMsg = MessageEnvelope.fromJson(msgJson, HcsVcMessage); - - assert.exists(encryptedSignedMsg); - // Throw error if decrypter is not provided - try { - encryptedSignedMsg.open(); - assert.fail("Throw error if decrypter is not provided"); - } catch (error) { - assert.exists(error); - } - - const decryptedMsg = encryptedSignedMsg.open(HcsVcMessage.getDecrypter((m, i) => decrypt(m, SECRET))); - - assert.exists(decryptedMsg); - assert.equal(credentialHash, decryptedMsg.getCredentialHash()); - assert.equal(encryptedSignedMsg.open().getTimestamp(), decryptedMsg.getTimestamp()); - }); -}); From 517257c4893b09f06fb9797b8586955b893f64ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 3 Feb 2022 17:57:15 +0100 Subject: [PATCH 032/133] New DID class; #register implementation --- src/identity/hcs/did/hcs-did-v2.ts | 191 ++++++++++++++++++++++++ src/identity/hcs/message-transaction.ts | 8 +- src/index.ts | 2 + test/did/hcs-did-v2.js | 143 ++++++++++++++++++ 4 files changed, 340 insertions(+), 4 deletions(-) create mode 100644 src/identity/hcs/did/hcs-did-v2.ts create mode 100644 test/did/hcs-did-v2.js diff --git a/src/identity/hcs/did/hcs-did-v2.ts b/src/identity/hcs/did/hcs-did-v2.ts new file mode 100644 index 0000000..8559e37 --- /dev/null +++ b/src/identity/hcs/did/hcs-did-v2.ts @@ -0,0 +1,191 @@ +import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; +import { + DidMethodOperation, + Hashing, + HcsDidDidOwnerEvent, + HcsDidMessage, + HcsDidTransaction, + MessageEnvelope, +} from "../../.."; +import { DidSyntax } from "../../did-syntax"; + +export class HcsDidV2 { + public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; + + protected client: Client; + protected privateKey: PrivateKey; + protected identifier: string; + protected network: string; + protected topicId: TopicId; + + private updatedAt: Timestamp; + + constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { + this.identifier = args.identifier; + this.privateKey = args.privateKey; + this.client = args.client; + + if (!this.identifier && !this.privateKey) { + throw new Error("identifier and privateKey cannot be empty"); + } + + if (this.identifier) { + const [networkName, topicId] = this.parseIdentifier(this.identifier); + this.network = networkName; + this.topicId = topicId; + } + } + + /** + * Public API + */ + + async register() { + if (this.identifier) { + throw new Error("DID is already registered"); + } + + if (!this.privateKey) { + throw new Error("privateKey is missingi i"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + /** + * Create topic + */ + const topicCreateTransaction = new TopicCreateTransaction() + .setMaxTransactionFee(new Hbar(2)) + .setAdminKey(this.privateKey.publicKey); + + const txId = await topicCreateTransaction.execute(this.client); + const topicId = (await txId.getReceipt(this.client)).topicId; + + this.topicId = topicId; + this.network = this.client.networkName; + this.identifier = this.buildIdentifier(this.privateKey.publicKey); + + /** + * Set ownership + */ + const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); + const message = new HcsDidMessage(DidMethodOperation.CREATE, this.identifier, event); + const envelope = new MessageEnvelope(message); + + const transaction = new HcsDidTransaction(envelope, this.topicId); + + // Expect some subscribtion errors because it takes time for Topic to be accessible + + await new Promise((resolve, reject) => { + transaction + .signMessage((msg) => this.privateKey.sign(msg)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(new Hbar(2))) + .onMessageConfirmed((msg) => { + console.log("Submitted"); + resolve(msg); + }) + .onError((err) => { + console.log(err); + reject(err); + }) + .execute(this.client); + }); + + return this; + } + + async resolve() {} + + /** + * Attribute getters + */ + + public getIdentifier() { + return this.identifier; + } + + public getClient() { + return this.client; + } + + public getPrivateKey() { + return this.privateKey; + } + + public getTopicId() { + return this.topicId; + } + + public getNetwork() { + return this.network; + } + + public getMethod() { + return HcsDidV2.DID_METHOD; + } + + /** + * Private + */ + + private buildIdentifier(publicKey: PublicKey): string { + const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); + + let ret: string; + ret = + DidSyntax.DID_PREFIX + + DidSyntax.DID_METHOD_SEPARATOR + + methodNetwork + + DidSyntax.DID_METHOD_SEPARATOR + + this.publicKeyToIdString(publicKey) + + DidSyntax.DID_TOPIC_SEPARATOR + + this.topicId.toString(); + + return ret; + } + + private parseIdentifier(identifier: string): [string, TopicId] { + const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); + + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); + } + + const topicId = TopicId.fromString(topicIdPart); + + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); + + if (didParts.shift() !== DidSyntax.DID_PREFIX) { + throw new Error("DID string is invalid: invalid prefix."); + } + + const methodName = didParts.shift(); + if (DidSyntax.Method.HEDERA_HCS !== methodName) { + throw new Error("DID string is invalid: invalid method name: " + methodName); + } + + try { + const networkName = didParts.shift(); + + if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { + throw new Error("Invalid Hedera network."); + } + + const didIdString = didParts.shift(); + + if (didIdString.length < 32 || didParts.shift()) { + throw new Error("DID string is invalid."); + } + + return [networkName, topicId]; + } catch (e) { + throw new Error("DID string is invalid. " + e.message); + } + } + + private publicKeyToIdString(publicKey: PublicKey): string { + return Hashing.multibase.encode(publicKey.toBytes()); + } +} diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index 74fcbd2..d788a70 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -1,10 +1,10 @@ -import { Decrypter, Encrypter, Message, Signer } from "./message"; import { Client, Timestamp, TopicId, TopicMessageSubmitTransaction, Transaction, TransactionId } from "@hashgraph/sdk"; -import { MessageEnvelope } from "./message-envelope"; -import { MessageListener } from "./message-listener"; -import { Validator } from "../../utils/validator"; import moment from "moment"; import { ArraysUtils } from "../../utils/arrays-utils"; +import { Validator } from "../../utils/validator"; +import { Encrypter, Message, Signer } from "./message"; +import { MessageEnvelope } from "./message-envelope"; +import { MessageListener } from "./message-listener"; export abstract class MessageTransaction { private static SUBTRACT_TIME = 1; // seconds diff --git a/src/index.ts b/src/index.ts index b4195be..aa9f39d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,7 @@ import { HcsDidResolver } from "./identity/hcs/did/hcs-did-resolver"; import { HcsDidRootKey } from "./identity/hcs/did/hcs-did-root-key"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; +import { HcsDidV2 } from "./identity/hcs/did/hcs-did-v2"; import { HcsIdentityNetwork } from "./identity/hcs/hcs-identity-network"; import { HcsIdentityNetworkBuilder } from "./identity/hcs/hcs-identity-network-builder"; import { JsonClass } from "./identity/hcs/json-class"; @@ -39,6 +40,7 @@ export { DidSyntax, Hashing, HcsDid, + HcsDidV2, HcsDidMessage, HcsDidResolver, HcsDidRootKey, diff --git a/test/did/hcs-did-v2.js b/test/did/hcs-did-v2.js new file mode 100644 index 0000000..1bf522c --- /dev/null +++ b/test/did/hcs-did-v2.js @@ -0,0 +1,143 @@ +const { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } = require("@hashgraph/sdk"); +const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("../variables"); +const { HcsDidV2, Hashing } = require("../../dist"); + +const { assert } = require("chai"); + +const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; + +describe("HcsDidV2", function () { + describe("#constructor", () => { + it("throws error because of missing identifier and privateKey", () => { + assert.throw(() => { + new HcsDidV2({}); + }); + }); + + it("successfuly builds HcsDid with private key only", () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDidV2({ privateKey }); + + assert.equal(did.getIdentifier(), null); + assert.equal(did.getPrivateKey(), privateKey); + assert.equal(did.getClient(), null); + assert.equal(did.getTopicId(), null); + assert.equal(did.getNetwork(), null); + }); + + it("successfuly builds HcsDid with identifier only", () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDidV2({ identifier }); + + assert.equal(did.getIdentifier(), identifier); + assert.equal(did.getPrivateKey(), null); + assert.equal(did.getClient(), null); + assert.equal(did.getTopicId(), "0.0.29613327"); + assert.equal(did.getNetwork(), "testnet"); + }); + + it("throws error if passed identifer is invalid", () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((identifier) => { + assert.throw(() => { + new HcsDidV2({ identifier }); + }); + }); + }); + + it("accepts client parameter", () => { + const client = Client.forTestnet(); + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDidV2({ identifier, client }); + + assert.equal(did.getIdentifier(), identifier); + assert.equal(did.getPrivateKey(), null); + assert.equal(did.getClient(), client); + assert.equal(did.getTopicId(), "0.0.29613327"); + assert.equal(did.getNetwork(), "testnet"); + }); + }); + + describe("#register", async () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if DID is already registered", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDidV2({ identifier }); + + try { + await did.register(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "DID is already registered"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDidV2({ privateKey }); + + try { + await did.register(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("creates new DID by registering a topic and submitting first message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDidV2({ privateKey, client }); + const result = await did.register(); + + assert.equal(result, did); + assert.match(did.getTopicId().toString(), TOPIC_REGEXP); + assert.equal( + did.getIdentifier(), + `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did + .getTopicId() + .toString()}` + ); + assert.equal(did.getPrivateKey(), privateKey); + assert.equal(did.getClient(), client); + assert.equal(did.getNetwork(), "testnet"); + + const messages = []; + + new TopicMessageQuery() + .setTopicId(did.getTopicId()) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * Will have to change, let's just wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 3000)); + + assert.equal(messages.length, 1); + }).timeout(60000); + }); +}); From 61cd89ba4df144ab8967d99d8f3726eb64feb296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 3 Feb 2022 19:00:38 +0100 Subject: [PATCH 033/133] Implement first version of resolve method --- src/identity/did-document-base.ts | 54 +++++------------ .../hcs/did/event/hcs-did-did-owner-event.ts | 14 ++--- src/identity/hcs/did/hcs-did-resolver.ts | 11 ++-- src/identity/hcs/did/hcs-did-v2.ts | 41 ++++++++++++- src/identity/hcs/did/hcs-did.ts | 5 -- test/did/hcs-did-v2.js | 59 +++++++++++++++++++ 6 files changed, 124 insertions(+), 60 deletions(-) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index 7cecacb..beab3e1 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -1,49 +1,18 @@ import { HcsDidServiceEvent } from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; -import { HcsDidRootKey } from "./hcs/did/hcs-did-root-key"; export class DidDocumentBase { private id: string; private context: string; - private didRootKey: HcsDidRootKey; private services: HcsDidServiceEvent[]; + private owners: any[]; constructor(did: string) { this.id = did; this.context = DidSyntax.DID_DOCUMENT_CONTEXT; this.services = []; - } - - /** - * TODO: inverstigate, how fexible this method should be? Should it still support old format? - */ - public static fromJson(json: string): DidDocumentBase { - let result: DidDocumentBase; - - try { - const root = JSON.parse(json); - result = new DidDocumentBase(root.id); - if (root.hasOwnProperty(DidDocumentJsonProperties.VERIFICATION_METHOD)) { - if (!Array.isArray(root[DidDocumentJsonProperties.VERIFICATION_METHOD])) { - throw new Error(`${root[DidDocumentJsonProperties.VERIFICATION_METHOD]} is not an array`); - } - for (let publicKeyObj of root[DidDocumentJsonProperties.VERIFICATION_METHOD]) { - if ( - publicKeyObj.hasOwnProperty(DidDocumentJsonProperties.ID) && - publicKeyObj[DidDocumentJsonProperties.ID] === result.getId() + HcsDidRootKey.DID_ROOT_KEY_NAME - ) { - const didRootKey = HcsDidRootKey.fromJsonTree(publicKeyObj); - result.setDidRootKey(didRootKey); - break; - } - } - } - } catch (e) { - throw new Error("Given JSON string is not a valid DID document " + e.message); - } - - return result; + this.owners = []; } public getContext(): string { @@ -62,22 +31,27 @@ export class DidDocumentBase { this.services.push(service); } - public getDidRootKey(): HcsDidRootKey { - return this.didRootKey; + public addOwner(owner): void { + if (this.owners.includes((o) => o.id === owner.id)) { + return; + } + + this.owners.push(owner); } - public setDidRootKey(rootKey: HcsDidRootKey): void { - this.didRootKey = rootKey; + public getOwners(): any[] { + return this.owners; } public toJsonTree(): any { let rootObject = {}; + rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [this.didRootKey.getId()]; - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [this.didRootKey.getId()]; - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [this.didRootKey.toJsonTree()]; + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = this.owners.map((owner) => owner.id); + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = this.owners.map((owner) => owner.id); + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = this.owners; if (this.getServices().length > 0) { rootObject[DidDocumentJsonProperties.SERVICE] = []; diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts index 6684460..7631ffa 100644 --- a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts +++ b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidRootKey } from "../../../.."; +import { Hashing } from "../../../.."; import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -65,14 +65,14 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { return new HcsDidDidOwnerEvent(tree.id, tree.controller, publicKey); } - // TODO: apply owner event process(didDoc: DidDocumentBase): DidDocumentBase { - // verify DID owner - if (this.controller + HcsDidRootKey.DID_ROOT_KEY_NAME !== didDoc.getDidRootKey().getId()) { - throw new Error("DID Owner varification failed."); - } + didDoc.addOwner({ + id: this.getId() + "#did-root-key", + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }); - // TODO: how to identify and change didDoc if transfer of ownership event return didDoc; } } diff --git a/src/identity/hcs/did/hcs-did-resolver.ts b/src/identity/hcs/did/hcs-did-resolver.ts index f97f7b3..3a31616 100644 --- a/src/identity/hcs/did/hcs-did-resolver.ts +++ b/src/identity/hcs/did/hcs-did-resolver.ts @@ -5,7 +5,6 @@ import { Sleep } from "../../../utils/sleep"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; import { MessageResolver } from "../message-resolver"; -import { HcsDid } from "./hcs-did"; import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; @@ -19,10 +18,10 @@ export class HcsDidResolver { public static DEFAULT_TIMEOUT: Long = Long.fromInt(30000); protected topicId: TopicId; - protected results: Map; + protected results: Map; private lastMessageArrivalTime: Long; - private resultsHandler: (input: Map) => void; + private resultsHandler: (input: Map) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; private listener: MessageListener; @@ -49,7 +48,7 @@ export class HcsDidResolver { */ public addDid(did: string): HcsDidResolver { if (did != null) { - this.results.set(did, HcsDid.fromString(did)); + this.results.set(did, []); } return this; } @@ -135,7 +134,7 @@ export class HcsDidResolver { * @param handler The results handler. * @return This resolver instance. */ - public whenFinished(handler: (input: Map) => void): HcsDidResolver { + public whenFinished(handler: (input: Map) => void): HcsDidResolver { this.resultsHandler = handler; return this; } @@ -202,7 +201,7 @@ export class HcsDidResolver { // } // Add valid message to the results - this.results.get(message.getDid()).addMessage(message); + this.results.get(message.getDid()).push(message); } protected supplyMessageListener(): MessageListener { diff --git a/src/identity/hcs/did/hcs-did-v2.ts b/src/identity/hcs/did/hcs-did-v2.ts index 8559e37..149e36a 100644 --- a/src/identity/hcs/did/hcs-did-v2.ts +++ b/src/identity/hcs/did/hcs-did-v2.ts @@ -1,5 +1,6 @@ import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; import { + DidDocumentBase, DidMethodOperation, Hashing, HcsDidDidOwnerEvent, @@ -8,6 +9,7 @@ import { MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; +import { HcsDidResolver } from "./hcs-did-resolver"; export class HcsDidV2 { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; @@ -18,7 +20,8 @@ export class HcsDidV2 { protected network: string; protected topicId: TopicId; - private updatedAt: Timestamp; + protected messages: HcsDidMessage[]; + protected resolvedAt: Timestamp; constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { this.identifier = args.identifier; @@ -96,7 +99,41 @@ export class HcsDidV2 { return this; } - async resolve() {} + async resolve() { + if (!this.identifier) { + throw new Error("DID is not registered"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + return await new Promise((resolve, reject) => { + /** + * This API will have to change... + */ + const resolver = new HcsDidResolver(this.topicId) + .setTimeout(3000) + .whenFinished((result) => { + this.messages = result.get(this.identifier); + + let document = new DidDocumentBase(this.identifier); + + this.messages.forEach((msg) => { + document = msg.getEvent().process(document); + }); + + resolve(document); + }) + .onError((err) => { + console.log(err); + reject(err); + }); + + resolver.addDid(this.identifier); + resolver.execute(this.client); + }); + } /** * Attribute getters diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 92a2711..3c86207 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -4,7 +4,6 @@ import { DidDocumentBase } from "../../did-document-base"; import { DidSyntax } from "../../did-syntax"; import { HederaDid } from "../../hedera-did"; import { HcsDidMessage } from "./hcs-did-message"; -import { HcsDidRootKey } from "./hcs-did-root-key"; /** * Hedera Decentralized Identifier for Hedera DID Method specification based on HCS. @@ -167,10 +166,6 @@ export class HcsDid implements HederaDid { */ public generateDidDocument(): DidDocumentBase { let result = new DidDocumentBase(this.toDid()); - if (this.didRootKey) { - const rootKey = HcsDidRootKey.fromHcsIdentity(this, this.didRootKey); - result.setDidRootKey(rootKey); - } // proccess events to get uptodate did document this.getMessages().forEach((msg) => { diff --git a/test/did/hcs-did-v2.js b/test/did/hcs-did-v2.js index 1bf522c..c85a660 100644 --- a/test/did/hcs-did-v2.js +++ b/test/did/hcs-did-v2.js @@ -140,4 +140,63 @@ describe("HcsDidV2", function () { assert.equal(messages.length, 1); }).timeout(60000); }); + + describe("#resolve", () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error about unregistered DID", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDidV2({ privateKey, client }); + + try { + await did.resolve(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "DID is not registered"); + } + }); + + it("throws error about missing Client parameter", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDidV2({ identifier }); + + try { + await did.resolve(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("successfuly resolves just registered DID", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDidV2({ privateKey, client }); + + await did.register(); + + const didDocument = (await did.resolve()).toJsonTree(); + + assert.equal(didDocument["@context"], "https://www.w3.org/ns/did/v1"); + assert.equal(didDocument["id"], did.getIdentifier()); + assert.equal(didDocument["assertionMethod"].length, 1); + assert.equal(didDocument["assertionMethod"][0], `${did.getIdentifier()}#did-root-key`); + assert.equal(didDocument["authentication"].length, 1); + assert.equal(didDocument["authentication"][0], `${did.getIdentifier()}#did-root-key`); + assert.equal(didDocument["verificationMethod"].length, 1); + assert.deepEqual(didDocument["verificationMethod"][0], { + id: `${did.getIdentifier()}#did-root-key`, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + }); + }).timeout(60000); + }); }); From 1db951b0c8f067fb7b2ec3b6047c4331ec2c8da5 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 11:06:03 +1100 Subject: [PATCH 034/133] removed hcs identity network --- .../hcs/hcs-identity-network-builder.ts | 70 ------ src/identity/hcs/hcs-identity-network.ts | 142 ------------ src/index.ts | 4 - test/did/hcs-did-method-operations.js | 158 ------------- test/hcs-identity-network.js | 105 --------- test/network-ready-test-base.js | 207 ------------------ 6 files changed, 686 deletions(-) delete mode 100644 src/identity/hcs/hcs-identity-network-builder.ts delete mode 100644 src/identity/hcs/hcs-identity-network.ts delete mode 100644 test/did/hcs-did-method-operations.js delete mode 100644 test/hcs-identity-network.js delete mode 100644 test/network-ready-test-base.js diff --git a/src/identity/hcs/hcs-identity-network-builder.ts b/src/identity/hcs/hcs-identity-network-builder.ts deleted file mode 100644 index c067b90..0000000 --- a/src/identity/hcs/hcs-identity-network-builder.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Client, Hbar, PublicKey, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; -import { HcsIdentityNetwork } from "./hcs-identity-network"; - -export class HcsIdentityNetworkBuilder { - private didTopicId: TopicId; - - private network: string; - private didServers: string[]; - private publicKey: PublicKey; - private maxTransactionFee: Hbar = new Hbar(2); - private didTopicMemo: string = ""; - private vcTopicMemo: string = ""; - - public async execute(client: Client): Promise { - const didTopicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(this.maxTransactionFee) - .setTopicMemo(this.didTopicMemo); - - if (this.publicKey) { - didTopicCreateTransaction.setAdminKey(this.publicKey); - } - - const didTxId = await didTopicCreateTransaction.execute(client); - this.didTopicId = (await didTxId.getReceipt(client)).topicId; - - return HcsIdentityNetwork.fromHcsDidAndVCTopic(this.network, this.didTopicId); - } - - public addAppnetDidServer(serverUrl: string): HcsIdentityNetworkBuilder { - if (!this.didServers) { - this.didServers = []; - } - - if (this.didServers.indexOf(serverUrl) == -1) { - this.didServers.push(serverUrl); - } - - return this; - } - - public setDidTopicMemo(didTopicMemo: string): HcsIdentityNetworkBuilder { - this.didTopicMemo = didTopicMemo; - return this; - } - - public setVCTopicMemo(vcTopicMemo: string): HcsIdentityNetworkBuilder { - this.vcTopicMemo = vcTopicMemo; - return this; - } - - public setDidTopicId(didTopicId: TopicId): HcsIdentityNetworkBuilder { - this.didTopicId = didTopicId; - return this; - } - - public setMaxTransactionFee(maxTransactionFee: Hbar): HcsIdentityNetworkBuilder { - this.maxTransactionFee = maxTransactionFee; - return this; - } - - public setPublicKey(publicKey: PublicKey): HcsIdentityNetworkBuilder { - this.publicKey = publicKey; - return this; - } - - public setNetwork(network: string): HcsIdentityNetworkBuilder { - this.network = network; - return this; - } -} diff --git a/src/identity/hcs/hcs-identity-network.ts b/src/identity/hcs/hcs-identity-network.ts deleted file mode 100644 index fd05e05..0000000 --- a/src/identity/hcs/hcs-identity-network.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; -import { HcsDid } from "./did/hcs-did"; -import { HcsDidMessage } from "./did/hcs-did-message"; -import { HcsDidResolver } from "./did/hcs-did-resolver"; -import { HcsDidTopicListener } from "./did/hcs-did-topic-listener"; -import { HcsDidTransaction } from "./did/hcs-did-transaction"; -import { MessageEnvelope } from "./message-envelope"; - -/** - * Identity network based on Hedera HCS DID method specification. - */ -export class HcsIdentityNetwork { - /** - * The Hedera network on which this identity network is created. - */ - private network: string; - - private didTopicId: TopicId; - - /** - * Instantiates existing identity network using a DID generated for this network. - * - * @param network The Hedera network. - * @return The identity network instance. - */ - public static async fromHcsDidTopic(network: string, didTopicId: TopicId): Promise { - const result = new HcsIdentityNetwork(); - result.network = network; - result.didTopicId = didTopicId; - return result; - } - - /** - * Instantiates existing identity network using a DID generated for this network. - * - * @param network The Hedera network. - * @return The identity network instance. - */ - public static async fromHcsDidAndVCTopic(network: string, didTopicId: TopicId): Promise { - const result = new HcsIdentityNetwork(); - result.network = network; - result.didTopicId = didTopicId; - return result; - } - - /** - * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. - * - * @param operation The operation to be performed on a DID document. - * @return The {@link HcsDidTransaction} instance. - */ - // public createDidTransaction(operation: DidMethodOperation): HcsDidTransaction; - - /** - * Instantiates a {@link HcsDidTransaction} to perform the specified operation on the DID document. - * - * @param message The DID topic message ready to for sending. - * @return The {@link HcsDidTransaction} instance. - */ - public createDidTransaction(message: MessageEnvelope): HcsDidTransaction; - - public createDidTransaction(...args): HcsDidTransaction { - if (args.length === 1 && args[0] instanceof MessageEnvelope) { - const [message] = args; - return new HcsDidTransaction(message, this.didTopicId); - } // else if ( - // args.length === 1 - // // (args[0] instanceof DidMethodOperation) - // ) { - // const [operation] = args; - // return new HcsDidTransaction(operation, this.didTopicId); - // } - else { - throw new Error("Invalid arguments"); - } - } - - /** - * Returns the Hedera network on which this identity network runs. - * - * @return The Hedera network. - */ - public getNetwork(): string { - return this.network; - } - - /** - * Returns the Did Topic on which this identity network sends messages to. - * - * @return The TopicId. - */ - public getDidTopicId(): TopicId { - return this.didTopicId; - } - - /** - * Generates a new DID and it's root key. - * - * @return Generated {@link HcsDid} with it's private DID root key. - */ - public generateDid(): HcsDid; - - public generateDid(privateKey: PrivateKey): HcsDid; - - /** - * Generates a new DID from the given public DID root key. - * - * @param publicKey A DID root key. - * @return A newly generated DID. - */ - public generateDid(publicKey: PublicKey): HcsDid; - public generateDid(...args): HcsDid { - if (args.length === 0) { - const privateKey = HcsDid.generateDidRootKey(); - return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); - } else if (args.length === 1 && args[0] instanceof PublicKey) { - const [publicKey] = args; - return new HcsDid(this.getNetwork(), publicKey, this.didTopicId); - } else if (args.length === 1 && args[0] instanceof PrivateKey) { - const [privateKey] = args; - return new HcsDid(this.getNetwork(), privateKey, this.didTopicId); - } - } - - /** - * Returns a DID resolver for this network. - * - * @return The DID resolver for this network. - */ - public getDidResolver(): HcsDidResolver { - return new HcsDidResolver(this.didTopicId); - } - - /** - * Returns a DID topic listener for this network. - * - * @return The DID topic listener. - */ - public getDidTopicListener(): HcsDidTopicListener { - return new HcsDidTopicListener(this.didTopicId); - } -} diff --git a/src/index.ts b/src/index.ts index aa9f39d..e5a097a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,8 +14,6 @@ import { HcsDidRootKey } from "./identity/hcs/did/hcs-did-root-key"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; import { HcsDidV2 } from "./identity/hcs/did/hcs-did-v2"; -import { HcsIdentityNetwork } from "./identity/hcs/hcs-identity-network"; -import { HcsIdentityNetworkBuilder } from "./identity/hcs/hcs-identity-network-builder"; import { JsonClass } from "./identity/hcs/json-class"; import { Message } from "./identity/hcs/message"; import { MessageEnvelope } from "./identity/hcs/message-envelope"; @@ -46,8 +44,6 @@ export { HcsDidRootKey, HcsDidTopicListener, HcsDidTransaction, - HcsIdentityNetwork, - HcsIdentityNetworkBuilder, HcsDidDidOwnerEvent, HcsDidServiceEvent, HcsDidVerificationMethodEvent, diff --git a/test/did/hcs-did-method-operations.js b/test/did/hcs-did-method-operations.js deleted file mode 100644 index 5c2ba49..0000000 --- a/test/did/hcs-did-method-operations.js +++ /dev/null @@ -1,158 +0,0 @@ -const { DidMethodOperation, DidDocumentJsonProperties } = require("../../dist"); -const { NetworkReadyTestBase } = require("../network-ready-test-base"); - -const { assert } = require("chai"); - -const testBase = new NetworkReadyTestBase(); - -let hcsDid, didDocument; - -const EXPECT_NO_ERROR = function (err) { - throw err; -}; - -describe("Hcs Did Method Operations", function () { - before(async function () { - this.timeout(60000); - await testBase.setup(); - hcsDid = testBase.didNetwork.generateDid(); - didDocument = hcsDid.generateDidDocument().toJSON(); - }); - - after(async function () { - testBase.cleanup(); - }); - - it("Test Create", async function () { - this.timeout(60000); - const op = DidMethodOperation.CREATE; - - const envelope = await testBase.sendDidTransaction(hcsDid, didDocument, op, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - assert.exists(msg); - assert.exists(msg.getDidDocument()); - - assert.equal(hcsDid.toDid(), msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it("Test Resolve After Create", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.CREATE, msg.getOperation()); - }); - - it("Test Update", async function () { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - const publicKeys = rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD]; - publicKeys.push( - JSON.parse( - "{" + - '"id": "did:example:123456789abcdefghi#keys-2",' + - '"type": "Ed25519VerificationKey2018",' + - '"controller": "did:example:pqrstuvwxyz0987654321",' + - '"publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - "}" - ) - ); - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = publicKeys; - - const newDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.UPDATE; - const envelope = await testBase.sendDidTransaction(hcsDid, newDoc, operation, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(newDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Resolve After Update", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.UPDATE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it("Test Delete", async function () { - this.timeout(60000); - const rootObject = JSON.parse(didDocument); - - if (rootObject.hasOwnProperty(DidDocumentJsonProperties.AUTHENTICATION)) { - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = []; - } - - if (rootObject.hasOwnProperty(DidDocumentJsonProperties.ASSERTION_METHOD)) { - rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = []; - } - - const deletedDoc = JSON.stringify(rootObject); - - const operation = DidMethodOperation.DELETE; - const envelope = await testBase.sendDidTransaction(hcsDid, deletedDoc, operation, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(deletedDoc, msg.getDidDocument()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Resolve After Delete", async function () { - this.timeout(60000); - const didString = hcsDid.toDid(); - - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); - - it("Test Resolve After Delete And Another Invalid Submit", async function () { - this.timeout(60000); - await testBase.sendDidTransaction(hcsDid, didDocument, DidMethodOperation.UPDATE, EXPECT_NO_ERROR); - - const didString = hcsDid.toDid(); - const envelope = await testBase.resolveDid(didString, EXPECT_NO_ERROR); - assert.exists(envelope); - - const msg = envelope.open(); - - assert.exists(msg); - assert.equal(didString, msg.getDid()); - assert.isTrue(msg.isValid()); - assert.equal(DidMethodOperation.DELETE, msg.getOperation()); - assert.notEqual(didDocument, msg.getDidDocument()); - }); -}); diff --git a/test/hcs-identity-network.js b/test/hcs-identity-network.js deleted file mode 100644 index 64cd958..0000000 --- a/test/hcs-identity-network.js +++ /dev/null @@ -1,105 +0,0 @@ -const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("./variables"); -const { AccountId, PrivateKey, Client, Hbar, TopicInfoQuery, TopicId } = require("@hashgraph/sdk"); - -const { HcsDid, HcsIdentityNetworkBuilder, HcsIdentityNetwork } = require("../dist"); - -const { assert } = require("chai"); - -const FEE = new Hbar(2); -const DID_TOPIC_ID = TopicId.fromString("0.0.214920"); - -let client, operatorId, operatorKey, network; - -describe("HcsIdentityNetwork", function () { - before(async function () { - this.timeout(60000); - - operatorId = AccountId.fromString(OPERATOR_ID); - operatorKey = PrivateKey.fromString(OPERATOR_KEY); - network = NETWORK; - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + network + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("Test Create Identity Network", async function () { - this.timeout(60000); - const didTopicMemo = "Test Identity SDK appnet DID topic"; - const vcTopicMemo = "Test Identity SDK appnet VC topic"; - - const didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(network) - .setPublicKey(operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .execute(client); - - assert.exists(didNetwork); - - const didTopicInfo = await new TopicInfoQuery().setTopicId(didNetwork.getDidTopicId()).execute(client); - - assert.exists(didTopicInfo); - assert.equal(didTopicInfo.topicMemo, didTopicMemo); - - const vcTopicInfo = await new TopicInfoQuery().setTopicId(didNetwork.getVcTopicId()).execute(client); - - assert.exists(vcTopicInfo); - assert.equal(vcTopicInfo.topicMemo, vcTopicMemo); - }); - - it("Test Init Network From Did topic", async function () { - this.timeout(60000); - const did = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, DID_TOPIC_ID); - - const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic(network, did.getDidTopicId()); - - assert.exists(didNetwork); - assert.equal(didNetwork.getDidTopicId(), DID_TOPIC_ID); - assert.equal(didNetwork.getNetwork(), network); - }); - - it("Test Generate Did For Network", async function () { - this.timeout(60000); - - function checkTestGenerateDidForNetwork(did, publicKey, didTopicId) { - assert.exists(did); - assert.equal(HcsDid.publicKeyToIdString(publicKey), did.getIdString()); - assert.equal(did.getNetwork(), network); - assert.equal(did.getDidTopicId().toString(), didTopicId); - assert.equal(did.getMethod(), HcsDid.DID_METHOD); - } - - const didNetwork = await HcsIdentityNetwork.fromHcsDidTopic(network, DID_TOPIC_ID); - - let did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - - let publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - did = didNetwork.generateDid(); - assert.exists(did.getPrivateDidRootKey()); - publicKey = did.getPrivateDidRootKey().publicKey; - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey); - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - - publicKey = HcsDid.generateDidRootKey().publicKey; - did = didNetwork.generateDid(publicKey); - checkTestGenerateDidForNetwork(did, publicKey, didNetwork.getDidTopicId()); - }); -}); diff --git a/test/network-ready-test-base.js b/test/network-ready-test-base.js deleted file mode 100644 index eabf1eb..0000000 --- a/test/network-ready-test-base.js +++ /dev/null @@ -1,207 +0,0 @@ -const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("./variables"); -const { AccountId, PrivateKey, Client, Hbar } = require("@hashgraph/sdk"); - -const { HcsIdentityNetworkBuilder } = require("../dist"); - -const MIRROR_NODE_TIMEOUT = 30 * 1000; -const NO_MORE_MESSAGES_TIMEOUT = 15 * 1000; -const FEE = new Hbar(2); - -const EXISTING_DID_TOPIC_ID = null; -const EXISTING_VC_TOPIC_ID = null; - -const sleep = function (sleepTime) { - return new Promise((resolve) => { - setTimeout(() => { - resolve(); - }, sleepTime); - }); -}; - -const until = function (maxTime, untilFunction) { - return new Promise((resolve) => { - let t, i; - i = setInterval(() => { - if (untilFunction()) { - clearInterval(i); - clearTimeout(t); - resolve(); - } - }, 100); - t = setTimeout(() => { - clearInterval(i); - clearTimeout(t); - resolve(); - }, maxTime); - }); -}; - -/** - * Base class for test classes that need a hedera identity network set up before running. - */ -class NetworkReadyTestBase { - operatorId; - operatorKey; - network; - didNetwork; - client; - - /** - * Initialize hedera clients and accounts. - */ - // BeforeAll - async setup() { - this.operatorId = AccountId.fromString(OPERATOR_ID); - this.operatorKey = PrivateKey.fromString(OPERATOR_KEY); - this.network = NETWORK; - - // Build Hedera testnet client - switch (this.network.toUpperCase()) { - case "MAINNET": - this.client = Client.forMainnet(); - break; - case "TESTNET": - this.client = Client.forTestnet(); - break; - case "PREVIEWNET": - this.client = Client.forPreviewnet(); - break; - default: - throw "Illegal argument for network."; - } - - // Set the operator account ID and operator private key - this.client.setOperator(this.operatorId, this.operatorKey); - - await this.setupIdentityNetwork(); - } - - async setupIdentityNetwork() { - const appnetName = "Test Identity SDK appnet"; - const didServerUrl = "http://localhost:3000/api/v1"; - const didTopicMemo = "Test Identity SDK appnet DID topic"; - const vcTopicMemo = "Test Identity SDK appnet VC topic"; - - this.didNetwork = await new HcsIdentityNetworkBuilder() - .setNetwork(this.network) - .setPublicKey(this.operatorKey.publicKey) - .setMaxTransactionFee(FEE) - .setDidTopicMemo(didTopicMemo) - .setVCTopicMemo(vcTopicMemo) - .setDidTopicId(EXISTING_DID_TOPIC_ID) - .setVCTopicId(EXISTING_VC_TOPIC_ID) - .execute(this.client); - console.info("New identity network created: " + appnetName); - console.info("Sleeping 10s to allow propagation of new topics to mirror node"); - - await sleep(10000); - } - - //AfterAll - cleanup() { - try { - if (this.client != null) { - this.client.close(); - } - - if (this.client != null) { - this.client.close(); - } - } catch (e) { - // ignore - } - } - - async sendDidTransaction(did, didDocumentJson, operation, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork - .createDidTransaction(operation) - .setDidDocument(didDocumentJson) - .signMessage((doc) => did.getPrivateDidRootKey().sign(doc)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed((msg) => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined; - } - } - - async resolveDid(didString, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork - .getDidResolver() - .addDid(didString) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished((m) => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(didString); - } catch (error) { - return undefined; - } - } - - async sendVcTransaction(operation, credentialHash, signingKey, onError) { - const messageRef = []; - - // Build and execute transaction - await this.didNetwork - .createVcTransaction(operation, credentialHash, signingKey.publicKey) - .signMessage((doc) => signingKey.sign(doc)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(FEE)) - .onMessageConfirmed((msg) => messageRef.push(msg)) - .onError(onError) - .execute(this.client); - - // Wait until consensus is reached and mirror node received the DID document, but with max. time limit. - await until(MIRROR_NODE_TIMEOUT, () => !!messageRef.length); - - try { - return messageRef[0]; - } catch (error) { - return undefined; - } - } - - async resolveVcStatus(credentialHash, provider, onError) { - const mapRef = []; - - // Now resolve the DID. - this.didNetwork - .getVcStatusResolver(provider) - .addCredentialHash(credentialHash) - .setTimeout(NO_MORE_MESSAGES_TIMEOUT) - .onError(onError) - .whenFinished((m) => mapRef.push(m)) - .execute(this.client); - - // Wait until mirror node resolves the DID. - await until(MIRROR_NODE_TIMEOUT, () => !!mapRef.length); - - try { - return mapRef[0].get(credentialHash); - } catch (error) { - return undefined; - } - } -} - -exports.NetworkReadyTestBase = NetworkReadyTestBase; -exports.until = until; -exports.sleep = sleep; From a2d50a7b51dd85d451bbee594079d5cee64b4f78 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 11:25:17 +1100 Subject: [PATCH 035/133] rename HscDidv2 to HscDid removed hcs-did-root-key classes and test fix --- src/identity/did-parser.ts | 5 +- src/identity/hcs/did/hcs-did-message.ts | 9 +- src/identity/hcs/did/hcs-did-root-key.ts | 102 ------- src/identity/hcs/did/hcs-did-v2.ts | 228 -------------- src/identity/hcs/did/hcs-did.ts | 366 ++++++++++------------- src/index.ts | 4 - test/did/hcs-did-root-key.js | 39 --- test/did/hcs-did-v2.js | 202 ------------- test/did/hcs-did.js | 264 +++++++++++----- 9 files changed, 361 insertions(+), 858 deletions(-) delete mode 100644 src/identity/hcs/did/hcs-did-root-key.ts delete mode 100644 src/identity/hcs/did/hcs-did-v2.ts delete mode 100644 test/did/hcs-did-root-key.js delete mode 100644 test/did/hcs-did-v2.js diff --git a/src/identity/did-parser.ts b/src/identity/did-parser.ts index 6617b7a..ea30354 100644 --- a/src/identity/did-parser.ts +++ b/src/identity/did-parser.ts @@ -1,4 +1,3 @@ -import { HederaDid } from "./hedera-did"; import { DidSyntax } from "./did-syntax"; import { HcsDid } from "./hcs/did/hcs-did"; @@ -9,14 +8,14 @@ import { HcsDid } from "./hcs/did/hcs-did"; * @return {@link HederaDid} instance. */ export class DidParser { - public static parse(didString: string): HederaDid { + public static parse(didString: string): HcsDid { const methodIndex = DidSyntax.DID_PREFIX.length + 1; if (!didString || didString.length <= methodIndex) { throw new Error("DID string cannot be null"); } if (didString.startsWith(HcsDid.DID_METHOD + DidSyntax.DID_METHOD_SEPARATOR, methodIndex)) { - return HcsDid.fromString(didString); + return new HcsDid({ identifier: didString }); } else { throw new Error("DID string is invalid."); } diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index bb293d4..e7d4e3d 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -1,5 +1,6 @@ import { Timestamp, TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../../did-method-operation"; +import { DidParser } from "../../did-parser"; import { Message } from "../message"; import { HcsDidEvent } from "./event/hcs-did-event"; import { HcsDidEventParser } from "./event/hcs-did-event-parser"; @@ -112,7 +113,7 @@ export class HcsDidMessage extends Message { // // Verify that DID was derived from this DID root key - const hcsDid: HcsDid = HcsDid.fromString(this.did); + const hcsDid: HcsDid = DidParser.parse(this.did); // // Extract public key from the DID document // const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyMultibase()); @@ -123,11 +124,7 @@ export class HcsDidMessage extends Message { // } // Verify that the message was sent to the right topic, if the DID contains the topic - if ( - !!didTopicId && - !!hcsDid.getDidTopicId() && - didTopicId.toString() != hcsDid.getDidTopicId().toString() - ) { + if (!!didTopicId && !!hcsDid.getTopicId() && didTopicId.toString() != hcsDid.getTopicId().toString()) { return false; } } catch (e) { diff --git a/src/identity/hcs/did/hcs-did-root-key.ts b/src/identity/hcs/did/hcs-did-root-key.ts deleted file mode 100644 index 3006c99..0000000 --- a/src/identity/hcs/did/hcs-did-root-key.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../.."; -import { HcsDid } from "./hcs-did"; -/** - * Represents a root key of HCS Identity DID. - * That is a public key of type Ed25519VerificationKey2018 compatible with a single publicKey entry of a DID Document. - */ -export class HcsDidRootKey { - public static DID_ROOT_KEY_NAME = "#did-root-key"; - public static DID_ROOT_KEY_TYPE = "Ed25519VerificationKey2018"; - - private id: string; - private type: string; - private controller: string; - private publicKeyMultibase: string; - - /** - * Creates a {@link HcsDidRootKey} object from the given {@link HcsDid} DID and it's root public key. - * - * @param did The {@link HcsDid} DID object. - * @param didRootKey The public key from which the DID was derived. - * @return The {@link HcsDidRootKey} object. - */ - public static fromHcsIdentity(did: HcsDid, didRootKey: PublicKey): HcsDidRootKey { - if (!did) { - throw new Error("DID cannot be " + did); - } - if (!didRootKey) { - throw new Error("DID root key cannot be " + didRootKey); - } - if (HcsDid.publicKeyToIdString(didRootKey) !== did.getIdString()) { - throw new Error("The specified DID does not correspond to the given DID root key"); - } - const result = new HcsDidRootKey(); - result.controller = did.toDid(); - result.id = result.controller + HcsDidRootKey.DID_ROOT_KEY_NAME; - result.publicKeyMultibase = Hashing.multibase.encode(didRootKey.toBytes()); - result.type = HcsDidRootKey.DID_ROOT_KEY_TYPE; - - return result; - } - - public static fromId(id: string): HcsDidRootKey { - if (id == null) { - throw new Error("id cannot be null"); - } - const didString = id.replace(new RegExp(HcsDidRootKey.DID_ROOT_KEY_NAME + "$"), ""); - if (didString == null) { - throw new Error("DID cannot be null"); - } - const did = HcsDid.fromString(didString); - - const result = new HcsDidRootKey(); - result.controller = did.toDid(); - result.id = result.controller + this.DID_ROOT_KEY_NAME; - result.publicKeyMultibase = null; - result.type = this.DID_ROOT_KEY_TYPE; - return result; - } - - public getId(): string { - return this.id; - } - - public getType(): string { - return this.type; - } - - public getController(): string { - return this.controller; - } - - public getPublicKeyMultibase(): string { - return this.publicKeyMultibase; - } - - public toJsonTree(): any { - const result: any = {}; - result.id = this.id; - result.type = this.type; - result.controller = this.controller; - result.publicKeyMultibase = this.publicKeyMultibase; - return result; - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJsonTree(json: any): HcsDidRootKey { - const result = new HcsDidRootKey(); - result.id = json.id; - result.type = json.type; - result.controller = json.controller; - result.publicKeyMultibase = json.publicKeyMultibase; - return result; - } - - public static fromJson(json: string): HcsDidRootKey { - return HcsDidRootKey.fromJsonTree(JSON.parse(json)); - } -} diff --git a/src/identity/hcs/did/hcs-did-v2.ts b/src/identity/hcs/did/hcs-did-v2.ts deleted file mode 100644 index 149e36a..0000000 --- a/src/identity/hcs/did/hcs-did-v2.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; -import { - DidDocumentBase, - DidMethodOperation, - Hashing, - HcsDidDidOwnerEvent, - HcsDidMessage, - HcsDidTransaction, - MessageEnvelope, -} from "../../.."; -import { DidSyntax } from "../../did-syntax"; -import { HcsDidResolver } from "./hcs-did-resolver"; - -export class HcsDidV2 { - public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; - - protected client: Client; - protected privateKey: PrivateKey; - protected identifier: string; - protected network: string; - protected topicId: TopicId; - - protected messages: HcsDidMessage[]; - protected resolvedAt: Timestamp; - - constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { - this.identifier = args.identifier; - this.privateKey = args.privateKey; - this.client = args.client; - - if (!this.identifier && !this.privateKey) { - throw new Error("identifier and privateKey cannot be empty"); - } - - if (this.identifier) { - const [networkName, topicId] = this.parseIdentifier(this.identifier); - this.network = networkName; - this.topicId = topicId; - } - } - - /** - * Public API - */ - - async register() { - if (this.identifier) { - throw new Error("DID is already registered"); - } - - if (!this.privateKey) { - throw new Error("privateKey is missingi i"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - /** - * Create topic - */ - const topicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(new Hbar(2)) - .setAdminKey(this.privateKey.publicKey); - - const txId = await topicCreateTransaction.execute(this.client); - const topicId = (await txId.getReceipt(this.client)).topicId; - - this.topicId = topicId; - this.network = this.client.networkName; - this.identifier = this.buildIdentifier(this.privateKey.publicKey); - - /** - * Set ownership - */ - const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); - const message = new HcsDidMessage(DidMethodOperation.CREATE, this.identifier, event); - const envelope = new MessageEnvelope(message); - - const transaction = new HcsDidTransaction(envelope, this.topicId); - - // Expect some subscribtion errors because it takes time for Topic to be accessible - - await new Promise((resolve, reject) => { - transaction - .signMessage((msg) => this.privateKey.sign(msg)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(new Hbar(2))) - .onMessageConfirmed((msg) => { - console.log("Submitted"); - resolve(msg); - }) - .onError((err) => { - console.log(err); - reject(err); - }) - .execute(this.client); - }); - - return this; - } - - async resolve() { - if (!this.identifier) { - throw new Error("DID is not registered"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - return await new Promise((resolve, reject) => { - /** - * This API will have to change... - */ - const resolver = new HcsDidResolver(this.topicId) - .setTimeout(3000) - .whenFinished((result) => { - this.messages = result.get(this.identifier); - - let document = new DidDocumentBase(this.identifier); - - this.messages.forEach((msg) => { - document = msg.getEvent().process(document); - }); - - resolve(document); - }) - .onError((err) => { - console.log(err); - reject(err); - }); - - resolver.addDid(this.identifier); - resolver.execute(this.client); - }); - } - - /** - * Attribute getters - */ - - public getIdentifier() { - return this.identifier; - } - - public getClient() { - return this.client; - } - - public getPrivateKey() { - return this.privateKey; - } - - public getTopicId() { - return this.topicId; - } - - public getNetwork() { - return this.network; - } - - public getMethod() { - return HcsDidV2.DID_METHOD; - } - - /** - * Private - */ - - private buildIdentifier(publicKey: PublicKey): string { - const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); - - let ret: string; - ret = - DidSyntax.DID_PREFIX + - DidSyntax.DID_METHOD_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - this.publicKeyToIdString(publicKey) + - DidSyntax.DID_TOPIC_SEPARATOR + - this.topicId.toString(); - - return ret; - } - - private parseIdentifier(identifier: string): [string, TopicId] { - const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); - - if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); - } - - const topicId = TopicId.fromString(topicIdPart); - - const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); - - if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); - } - - const methodName = didParts.shift(); - if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error("DID string is invalid: invalid method name: " + methodName); - } - - try { - const networkName = didParts.shift(); - - if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { - throw new Error("Invalid Hedera network."); - } - - const didIdString = didParts.shift(); - - if (didIdString.length < 32 || didParts.shift()) { - throw new Error("DID string is invalid."); - } - - return [networkName, topicId]; - } catch (e) { - throw new Error("DID string is invalid. " + e.message); - } - } - - private publicKeyToIdString(publicKey: PublicKey): string { - return Hashing.multibase.encode(publicKey.toBytes()); - } -} diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 3c86207..e4c43e1 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -1,218 +1,173 @@ -import { PrivateKey, PublicKey, TopicId } from "@hashgraph/sdk"; -import { Hashing } from "../../../utils/hashing"; -import { DidDocumentBase } from "../../did-document-base"; +import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; +import { + DidDocumentBase, + DidMethodOperation, + Hashing, + HcsDidDidOwnerEvent, + HcsDidMessage, + HcsDidTransaction, + MessageEnvelope, +} from "../../.."; import { DidSyntax } from "../../did-syntax"; -import { HederaDid } from "../../hedera-did"; -import { HcsDidMessage } from "./hcs-did-message"; +import { HcsDidResolver } from "./hcs-did-resolver"; -/** - * Hedera Decentralized Identifier for Hedera DID Method specification based on HCS. - */ -export class HcsDid implements HederaDid { +export class HcsDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; - private didTopicId: TopicId; - private network: string; - private idString: string; - private did: string; - private didRootKey: PublicKey; - private privateDidRootKey: PrivateKey; - private messages: HcsDidMessage[] = []; + protected client: Client; + protected privateKey: PrivateKey; + protected identifier: string; + protected network: string; + protected topicId: TopicId; - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param didRootKey The public key from which DID is derived. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, didRootKey: PublicKey, didTopicId: TopicId); - /** - * Creates a DID instance with private DID root key. - * - * @param network The Hedera DID network. - * @param privateDidRootKey The private DID root key. - * @param didTopicId The appnet's DID topic ID. - */ - constructor(network: string, privateDidRootKey: PrivateKey, didTopicId: TopicId); - /** - * Creates a DID instance. - * - * @param network The Hedera DID network. - * @param idString The id-string of a DID. - * @param didTopicId The appnet's DID topic ID. - * @param didRootKey The public key from which DID is derived. - */ - constructor(network: string, idString: string, didTopicId: TopicId); - constructor(...args: any[]) { - if ( - typeof args[0] === "string" && - args[1] instanceof PublicKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, didRootKey, didTopicId] = args; - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = didRootKey; - this.idString = HcsDid.publicKeyToIdString(didRootKey); - this.did = this.buildDid(); - - return; - } + protected messages: HcsDidMessage[]; + protected resolvedAt: Timestamp; - if ( - typeof args[0] === "string" && - args[1] instanceof PrivateKey && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, privateDidRootKey, didTopicId] = args; - - this.didTopicId = didTopicId; - this.network = network; - this.didRootKey = privateDidRootKey.publicKey; - this.idString = HcsDid.publicKeyToIdString(privateDidRootKey.publicKey); - this.did = this.buildDid(); - this.privateDidRootKey = privateDidRootKey; - - return; - } + constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { + this.identifier = args.identifier; + this.privateKey = args.privateKey; + this.client = args.client; - if ( - typeof args[0] === "string" && - typeof args[1] === "string" && - (args[2] instanceof TopicId || args[2] === undefined) && - args.length === 3 - ) { - const [network, idString, didTopicId] = args; - - this.didTopicId = didTopicId; - this.network = network; - this.idString = idString; - this.didRootKey = HcsDid.idStringToPublicKey(idString); - this.did = this.buildDid(); - - return; + if (!this.identifier && !this.privateKey) { + throw new Error("identifier and privateKey cannot be empty"); } - throw new Error("Couldn't find constructor"); + if (this.identifier) { + const [networkName, topicId] = this.parseIdentifier(this.identifier); + this.network = networkName; + this.topicId = topicId; + } } /** - * Converts a Hedera DID string into {@link HcsDid} object. - * - * @param didString A Hedera DID string. - * @return {@link HcsDid} object derived from the given Hedera DID string. + * Public API */ - public static fromString(didString: string): HcsDid { - if (!didString) { - throw new Error("DID string cannot be null"); - } - - const [didPart, topicIdPart] = didString.split(DidSyntax.DID_TOPIC_SEPARATOR); - if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); + async register() { + if (this.identifier) { + throw new Error("DID is already registered"); } - const topicId = TopicId.fromString(topicIdPart); - - const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); - - if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); + if (!this.privateKey) { + throw new Error("privateKey is missingi i"); } - const methodName = didParts.shift(); - if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error("DID string is invalid: invalid method name: " + methodName); + if (!this.client) { + throw new Error("Client configuration is missing"); } - try { - const networkName = didParts.shift(); - - if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { - throw new Error("Invalid Hedera network."); - } + /** + * Create topic + */ + const topicCreateTransaction = new TopicCreateTransaction() + .setMaxTransactionFee(new Hbar(2)) + .setAdminKey(this.privateKey.publicKey); + + const txId = await topicCreateTransaction.execute(this.client); + const topicId = (await txId.getReceipt(this.client)).topicId; + + this.topicId = topicId; + this.network = this.client.networkName; + this.identifier = this.buildIdentifier(this.privateKey.publicKey); + + /** + * Set ownership + */ + const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); + const message = new HcsDidMessage(DidMethodOperation.CREATE, this.identifier, event); + const envelope = new MessageEnvelope(message); + + const transaction = new HcsDidTransaction(envelope, this.topicId); + + // Expect some subscribtion errors because it takes time for Topic to be accessible + + await new Promise((resolve, reject) => { + transaction + .signMessage((msg) => this.privateKey.sign(msg)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(new Hbar(2))) + .onMessageConfirmed((msg) => { + console.log("Submitted"); + resolve(msg); + }) + .onError((err) => { + console.log(err); + reject(err); + }) + .execute(this.client); + }); - const didIdString = didParts.shift(); + return this; + } - if (didIdString.length < 32 || didParts.shift()) { - throw new Error("DID string is invalid."); - } + async resolve() { + if (!this.identifier) { + throw new Error("DID is not registered"); + } - return new HcsDid(networkName, didIdString, topicId); - } catch (e) { - throw new Error("DID string is invalid. " + e.message); + if (!this.client) { + throw new Error("Client configuration is missing"); } - } - /** - * Generates a random DID root key. - * - * @return A private key of generated public DID root key. - */ - public static generateDidRootKey(): PrivateKey { - return PrivateKey.generate(); + return await new Promise((resolve, reject) => { + /** + * This API will have to change... + */ + const resolver = new HcsDidResolver(this.topicId) + .setTimeout(3000) + .whenFinished((result) => { + this.messages = result.get(this.identifier); + + let document = new DidDocumentBase(this.identifier); + + this.messages.forEach((msg) => { + document = msg.getEvent().process(document); + }); + + resolve(document); + }) + .onError((err) => { + console.log(err); + reject(err); + }); + + resolver.addDid(this.identifier); + resolver.execute(this.client); + }); } /** - * Generates DID document base from the given DID and its root key. - * - * @param didRootKey Public key used to build this DID. - * @return The DID document base. - * @throws IllegalArgumentException In case given DID root key does not match this DID. + * Attribute getters */ - public generateDidDocument(): DidDocumentBase { - let result = new DidDocumentBase(this.toDid()); - - // proccess events to get uptodate did document - this.getMessages().forEach((msg) => { - result = msg.getEvent().process(result); - }); - - return result; - } - - public getNetwork(): string { - return this.network; - } - - public getMethod(): DidSyntax.Method { - return DidSyntax.Method.HEDERA_HCS; - } - public toString(): string { - return this.did; + public getIdentifier() { + return this.identifier; } - public getDidTopicId(): TopicId { - return this.didTopicId; + public getClient() { + return this.client; } - public getIdString(): string { - return this.idString; + public getPrivateKey() { + return this.privateKey; } - public toDid() { - return this.did; + public getTopicId() { + return this.topicId; } - public getMessages() { - return this.messages; + public getNetwork() { + return this.network; } - public addMessage(message: HcsDidMessage) { - this.messages.push(message); + public getMethod() { + return HcsDid.DID_METHOD; } /** - * Constructs DID string from the instance of DID object. - * - * @return A DID string. + * Private */ - private buildDid(): string { + + private buildIdentifier(publicKey: PublicKey): string { const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); let ret: string; @@ -221,44 +176,53 @@ export class HcsDid implements HederaDid { DidSyntax.DID_METHOD_SEPARATOR + methodNetwork + DidSyntax.DID_METHOD_SEPARATOR + - this.idString + + this.publicKeyToIdString(publicKey) + DidSyntax.DID_TOPIC_SEPARATOR + - this.didTopicId.toString(); + this.topicId.toString(); return ret; } - /** - * Constructs an id-string of a DID from a given public key. - * - * @param didRootKey Public Key from which the DID is created. - * @return The id-string of a DID that is a Base58-encoded SHA-256 hash of a given public key. - */ - public static publicKeyToIdString(didRootKey: PublicKey): string { - return Hashing.multibase.encode(didRootKey.toBytes()); - } + private parseIdentifier(identifier: string): [string, TopicId] { + const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); - public static idStringToPublicKey(idString: string): PublicKey { - return PublicKey.fromBytes(Hashing.multibase.decode(idString)); - } + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); + } - /** - * Returns a private key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPrivateDidRootKey(): PrivateKey { - return this.privateDidRootKey; + const topicId = TopicId.fromString(topicIdPart); + + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); + + if (didParts.shift() !== DidSyntax.DID_PREFIX) { + throw new Error("DID string is invalid: invalid prefix."); + } + + const methodName = didParts.shift(); + if (DidSyntax.Method.HEDERA_HCS !== methodName) { + throw new Error("DID string is invalid: invalid method name: " + methodName); + } + + try { + const networkName = didParts.shift(); + + if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { + throw new Error("Invalid Hedera network."); + } + + const didIdString = didParts.shift(); + + if (didIdString.length < 32 || didParts.shift()) { + throw new Error("DID string is invalid."); + } + + return [networkName, topicId]; + } catch (e) { + throw new Error("DID string is invalid. " + e.message); + } } - /** - * Returns a public key of DID root key. - * This is only available if it was provided during {@link HcsDid} construction. - * - * @return The private key of DID root key. - */ - public getPublicDidRootKey(): PublicKey { - return this.didRootKey; + private publicKeyToIdString(publicKey: PublicKey): string { + return Hashing.multibase.encode(publicKey.toBytes()); } } diff --git a/src/index.ts b/src/index.ts index e5a097a..ab275b9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,10 +10,8 @@ import { HcsDidVerificationRelationshipEvent } from "./identity/hcs/did/event/hc import { HcsDid } from "./identity/hcs/did/hcs-did"; import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; import { HcsDidResolver } from "./identity/hcs/did/hcs-did-resolver"; -import { HcsDidRootKey } from "./identity/hcs/did/hcs-did-root-key"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; -import { HcsDidV2 } from "./identity/hcs/did/hcs-did-v2"; import { JsonClass } from "./identity/hcs/json-class"; import { Message } from "./identity/hcs/message"; import { MessageEnvelope } from "./identity/hcs/message-envelope"; @@ -38,10 +36,8 @@ export { DidSyntax, Hashing, HcsDid, - HcsDidV2, HcsDidMessage, HcsDidResolver, - HcsDidRootKey, HcsDidTopicListener, HcsDidTransaction, HcsDidDidOwnerEvent, diff --git a/test/did/hcs-did-root-key.js b/test/did/hcs-did-root-key.js deleted file mode 100644 index 2c4678e..0000000 --- a/test/did/hcs-did-root-key.js +++ /dev/null @@ -1,39 +0,0 @@ -const { TopicId } = require("@hashgraph/sdk"); -const { HcsDid, HcsDidRootKey, Hashing } = require("../../dist"); - -const { assert } = require("chai"); - -const network = "network"; - -describe("HcsDidRootKey", function () { - it("Test Generate", async function () { - const didTopicId = TopicId.fromString("1.5.23462345"); - - const privateKey = HcsDid.generateDidRootKey(); - - const did = new HcsDid(network, privateKey.publicKey, didTopicId); - - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(null, null); - }); - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(did, null); - }); - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(null, privateKey.publicKey); - }); - - const differentPublicKey = HcsDid.generateDidRootKey().publicKey; - assert.throw(() => { - HcsDidRootKey.fromHcsIdentity(did, differentPublicKey); - }); - - const didRootKey = HcsDidRootKey.fromHcsIdentity(did, privateKey.publicKey); - assert.exists(didRootKey); - - assert.equal(didRootKey.getType(), "Ed25519VerificationKey2018"); - assert.equal(didRootKey.getId(), did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); - assert.equal(didRootKey.getController(), did.toDid()); - assert.equal(didRootKey.getPublicKeyMultibase(), Hashing.multibase.encode(privateKey.publicKey.toBytes())); - }); -}); diff --git a/test/did/hcs-did-v2.js b/test/did/hcs-did-v2.js deleted file mode 100644 index c85a660..0000000 --- a/test/did/hcs-did-v2.js +++ /dev/null @@ -1,202 +0,0 @@ -const { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } = require("@hashgraph/sdk"); -const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("../variables"); -const { HcsDidV2, Hashing } = require("../../dist"); - -const { assert } = require("chai"); - -const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; - -describe("HcsDidV2", function () { - describe("#constructor", () => { - it("throws error because of missing identifier and privateKey", () => { - assert.throw(() => { - new HcsDidV2({}); - }); - }); - - it("successfuly builds HcsDid with private key only", () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDidV2({ privateKey }); - - assert.equal(did.getIdentifier(), null); - assert.equal(did.getPrivateKey(), privateKey); - assert.equal(did.getClient(), null); - assert.equal(did.getTopicId(), null); - assert.equal(did.getNetwork(), null); - }); - - it("successfuly builds HcsDid with identifier only", () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDidV2({ identifier }); - - assert.equal(did.getIdentifier(), identifier); - assert.equal(did.getPrivateKey(), null); - assert.equal(did.getClient(), null); - assert.equal(did.getTopicId(), "0.0.29613327"); - assert.equal(did.getNetwork(), "testnet"); - }); - - it("throws error if passed identifer is invalid", () => { - [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ].forEach((identifier) => { - assert.throw(() => { - new HcsDidV2({ identifier }); - }); - }); - }); - - it("accepts client parameter", () => { - const client = Client.forTestnet(); - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDidV2({ identifier, client }); - - assert.equal(did.getIdentifier(), identifier); - assert.equal(did.getPrivateKey(), null); - assert.equal(did.getClient(), client); - assert.equal(did.getTopicId(), "0.0.29613327"); - assert.equal(did.getNetwork(), "testnet"); - }); - }); - - describe("#register", async () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if DID is already registered", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDidV2({ identifier }); - - try { - await did.register(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "DID is already registered"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDidV2({ privateKey }); - - try { - await did.register(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("creates new DID by registering a topic and submitting first message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDidV2({ privateKey, client }); - const result = await did.register(); - - assert.equal(result, did); - assert.match(did.getTopicId().toString(), TOPIC_REGEXP); - assert.equal( - did.getIdentifier(), - `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did - .getTopicId() - .toString()}` - ); - assert.equal(did.getPrivateKey(), privateKey); - assert.equal(did.getClient(), client); - assert.equal(did.getNetwork(), "testnet"); - - const messages = []; - - new TopicMessageQuery() - .setTopicId(did.getTopicId()) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * Will have to change, let's just wait for 3s and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, 3000)); - - assert.equal(messages.length, 1); - }).timeout(60000); - }); - - describe("#resolve", () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error about unregistered DID", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDidV2({ privateKey, client }); - - try { - await did.resolve(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "DID is not registered"); - } - }); - - it("throws error about missing Client parameter", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDidV2({ identifier }); - - try { - await did.resolve(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("successfuly resolves just registered DID", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDidV2({ privateKey, client }); - - await did.register(); - - const didDocument = (await did.resolve()).toJsonTree(); - - assert.equal(didDocument["@context"], "https://www.w3.org/ns/did/v1"); - assert.equal(didDocument["id"], did.getIdentifier()); - assert.equal(didDocument["assertionMethod"].length, 1); - assert.equal(didDocument["assertionMethod"][0], `${did.getIdentifier()}#did-root-key`); - assert.equal(didDocument["authentication"].length, 1); - assert.equal(didDocument["authentication"][0], `${did.getIdentifier()}#did-root-key`); - assert.equal(didDocument["verificationMethod"].length, 1); - assert.deepEqual(didDocument["verificationMethod"][0], { - id: `${did.getIdentifier()}#did-root-key`, - type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), - }); - }).timeout(60000); - }); -}); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index e95d94a..145d258 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -1,84 +1,202 @@ -const { TopicId } = require("@hashgraph/sdk"); -const { DidSyntax, HcsDid, Hashing } = require("../../dist"); +const { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } = require("@hashgraph/sdk"); +const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("../variables"); +const { HcsDid, Hashing } = require("../../dist"); const { assert } = require("chai"); -const network = "testnet"; +const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; describe("HcsDid", function () { - it("Test Generate And Parse Did With Tid", async function () { - const didTopicId = "1.5.23462345"; - - const privateKey = HcsDid.generateDidRootKey(); - - const topicId = TopicId.fromString(didTopicId); - const did = new HcsDid(network, privateKey.publicKey, topicId); - - const didString = did.toString(); - - assert.exists(didString); - - const parsedDid = HcsDid.fromString(didString); - - assert.exists(parsedDid); - assert.exists(parsedDid.getDidTopicId()); - - assert.equal(parsedDid.toDid(), didString); - assert.equal(parsedDid.getMethod(), DidSyntax.Method.HEDERA_HCS); - assert.equal(parsedDid.getNetwork(), network); - assert.equal(parsedDid.getDidTopicId().toString(), didTopicId); - assert.equal(parsedDid.getIdString(), did.getIdString()); - - const parsedDocument = parsedDid.generateDidDocument(); - - assert.exists(parsedDocument); - assert.equal(parsedDocument.getId(), parsedDid.toString()); - assert.equal(parsedDocument.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.notExists(parsedDocument.getDidRootKey()); - - const document = did.generateDidDocument(); - - assert.exists(document); - assert.equal(document.getId(), parsedDid.toString()); - assert.equal(document.getContext(), DidSyntax.DID_DOCUMENT_CONTEXT); - assert.exists(document.getDidRootKey()); - assert.equal( - document.getDidRootKey().getPublicKeyMultibase(), - Hashing.multibase.encode(privateKey.publicKey.toBytes()) - ); - }); - - it("Test Parse Predefined Dids", async function () { - const didTopicId = "1.5.23462345"; - - const validDidWithSwitchedParamsOrder = - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak" + "_" + didTopicId; - - const invalidDids = [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ]; - - for (let did of invalidDids) { + describe("#constructor", () => { + it("throws error because of missing identifier and privateKey", () => { assert.throw(() => { - HcsDid.fromString(did); + new HcsDid({}); }); - } + }); + + it("successfuly builds HcsDid with private key only", () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + assert.equal(did.getIdentifier(), null); + assert.equal(did.getPrivateKey(), privateKey); + assert.equal(did.getClient(), null); + assert.equal(did.getTopicId(), null); + assert.equal(did.getNetwork(), null); + }); + + it("successfuly builds HcsDid with identifier only", () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + assert.equal(did.getIdentifier(), identifier); + assert.equal(did.getPrivateKey(), null); + assert.equal(did.getClient(), null); + assert.equal(did.getTopicId(), "0.0.29613327"); + assert.equal(did.getNetwork(), "testnet"); + }); + + it("throws error if passed identifer is invalid", () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((identifier) => { + assert.throw(() => { + new HcsDid({ identifier }); + }); + }); + }); + + it("accepts client parameter", () => { + const client = Client.forTestnet(); + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, client }); + + assert.equal(did.getIdentifier(), identifier); + assert.equal(did.getPrivateKey(), null); + assert.equal(did.getClient(), client); + assert.equal(did.getTopicId(), "0.0.29613327"); + assert.equal(did.getNetwork(), "testnet"); + }); + }); - const validDid = HcsDid.fromString(validDidWithSwitchedParamsOrder); + describe("#register", async () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if DID is already registered", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.register(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "DID is already registered"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.register(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("creates new DID by registering a topic and submitting first message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + const result = await did.register(); + + assert.equal(result, did); + assert.match(did.getTopicId().toString(), TOPIC_REGEXP); + assert.equal( + did.getIdentifier(), + `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did + .getTopicId() + .toString()}` + ); + assert.equal(did.getPrivateKey(), privateKey); + assert.equal(did.getClient(), client); + assert.equal(did.getNetwork(), "testnet"); + + const messages = []; + + new TopicMessageQuery() + .setTopicId(did.getTopicId()) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * Will have to change, let's just wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 3000)); + + assert.equal(messages.length, 1); + }).timeout(60000); + }); - assert.exists(validDid); - assert.exists(validDid.getDidTopicId()); - assert.equal(validDid.getDidTopicId().toString(), didTopicId); + describe("#resolve", () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error about unregistered DID", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.resolve(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "DID is not registered"); + } + }); + + it("throws error about missing Client parameter", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.resolve(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("successfuly resolves just registered DID", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + + const didDocument = (await did.resolve()).toJsonTree(); + + assert.equal(didDocument["@context"], "https://www.w3.org/ns/did/v1"); + assert.equal(didDocument["id"], did.getIdentifier()); + assert.equal(didDocument["assertionMethod"].length, 1); + assert.equal(didDocument["assertionMethod"][0], `${did.getIdentifier()}#did-root-key`); + assert.equal(didDocument["authentication"].length, 1); + assert.equal(didDocument["authentication"][0], `${did.getIdentifier()}#did-root-key`); + assert.equal(didDocument["verificationMethod"].length, 1); + assert.deepEqual(didDocument["verificationMethod"][0], { + id: `${did.getIdentifier()}#did-root-key`, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + }); + }).timeout(60000); }); }); From 2c3b31c787f49547886fdc727a732c2d1a468811 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 12:21:22 +1100 Subject: [PATCH 036/133] fix the demo with new hsc did api --- demo/1_create_did_topic.js | 19 +++++-------------- demo/2_register_did_owner.js | 8 ++++---- demo/3_register_service_endpoint.js | 12 ++++++++---- demo/4_read_did_messages.js | 12 ++++++------ demo/5_resolve_did.js | 28 ++++++++++------------------ 5 files changed, 33 insertions(+), 46 deletions(-) diff --git a/demo/1_create_did_topic.js b/demo/1_create_did_topic.js index 7be09b9..43891eb 100644 --- a/demo/1_create_did_topic.js +++ b/demo/1_create_did_topic.js @@ -1,6 +1,6 @@ -const { TopicCreateTransaction, PrivateKey, Client } = require("@hashgraph/sdk"); +const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, MAX_TRANSACTION_FEE } = require("./config"); +const { OPERATOR_ID, PRIVATE_KEY_STR } = require("./config"); async function main() { /** @@ -10,25 +10,16 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); - /** - * Create topic and generate DID - */ - const didTopicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(MAX_TRANSACTION_FEE) - .setAdminKey(privateKey.publicKey); - - const didTxId = await didTopicCreateTransaction.execute(client); - const didTopicId = (await didTxId.getReceipt(client)).topicId; - /** * Build DID intance */ - const did = new HcsDid(client.networkName, privateKey.publicKey, didTopicId); + const did = new HcsDid({ privateKey: privateKey, client: client }); + const registeredDid = await did.register(); console.log(`PRIVATE KEY: ${privateKey.toString()}`); console.log(`PUBLIC KEY: ${privateKey.publicKey.toString()}`); console.log("\n"); - console.log(did.generateDidDocument().toJsonTree()); + console.log(registeredDid.getIdentifier()); } main(); diff --git a/demo/2_register_did_owner.js b/demo/2_register_did_owner.js index fcb5cd9..025874d 100644 --- a/demo/2_register_did_owner.js +++ b/demo/2_register_did_owner.js @@ -20,19 +20,19 @@ async function main() { /** * Build DID instance */ - const did = HcsDid.fromString(TEST_DID_STR); + const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey }); /** * Build create DIDOwner message */ - const event = new HcsDidDidOwnerEvent(did.did, did.did, privateKey.publicKey); - const message = new HcsDidMessage(DidMethodOperation.CREATE, did.did, event); + const event = new HcsDidDidOwnerEvent(did.getIdentifier(), did.getIdentifier(), privateKey.publicKey); + const message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), event); const envelope = new MessageEnvelope(message); /** * Send DIDOwner message to Hashgraph */ - const transaction = new HcsDidTransaction(envelope, did.didTopicId); + const transaction = new HcsDidTransaction(envelope, did.getTopicId()); transaction .signMessage((msg) => privateKey.sign(msg)) diff --git a/demo/3_register_service_endpoint.js b/demo/3_register_service_endpoint.js index 18f93f4..6bdcf6f 100644 --- a/demo/3_register_service_endpoint.js +++ b/demo/3_register_service_endpoint.js @@ -20,19 +20,23 @@ async function main() { /** * Build DID instance */ - const did = HcsDid.fromString(TEST_DID_STR); + const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey }); /** * Build create Service message */ - const event = new HcsDidServiceEvent(did.did, "VerifiableCredentialService", "https://test.meeco.me/vcs"); - const message = new HcsDidMessage(DidMethodOperation.CREATE, did.did, event); + const event = new HcsDidServiceEvent( + did.getIdentifier(), + "VerifiableCredentialService", + "https://test.meeco.me/vcs" + ); + const message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), event); const envelope = new MessageEnvelope(message); /** * Send DIDOwner message to Hashgraph */ - const transaction = new HcsDidTransaction(envelope, did.didTopicId); + const transaction = new HcsDidTransaction(envelope, did.getTopicId()); transaction .signMessage((msg) => privateKey.sign(msg)) diff --git a/demo/4_read_did_messages.js b/demo/4_read_did_messages.js index 57ff7c5..06c1ae3 100644 --- a/demo/4_read_did_messages.js +++ b/demo/4_read_did_messages.js @@ -11,15 +11,15 @@ async function main() { /** * Build DID instance */ - const did = HcsDid.fromString(TEST_DID_STR); + const did = new HcsDid({ identifier: TEST_DID_STR }); /** * Read DID resolver setup */ - const resolver = new HcsDidResolver(did.didTopicId).setTimeout(3000).whenFinished((result) => { - const didResult = result.get(did.did); + const resolver = new HcsDidResolver(did.getTopicId()).setTimeout(3000).whenFinished((result) => { + const didResult = result.get(did.getIdentifier()); - didResult.getMessages().forEach((msg) => { + didResult.forEach((msg) => { console.log("\n"); console.log("==================================================="); console.log("\n"); @@ -32,14 +32,14 @@ async function main() { console.log("\n"); console.log("==================================================="); console.log("DragaonGlass Explorer:"); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.didTopicId}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); console.log("\n"); }); /** * Read DID information */ - resolver.addDid(did.did); + resolver.addDid(did.getIdentifier()); resolver.execute(client); } diff --git a/demo/5_resolve_did.js b/demo/5_resolve_did.js index 4e4b441..0cc80e0 100644 --- a/demo/5_resolve_did.js +++ b/demo/5_resolve_did.js @@ -11,29 +11,21 @@ async function main() { /** * Build DID instance */ - const did = HcsDid.fromString(TEST_DID_STR); + const did = new HcsDid({ identifier: TEST_DID_STR, client: client }); /** - * Read DID resolver setup + * Resolve DID */ - const resolver = new HcsDidResolver(did.didTopicId).setTimeout(3000).whenFinished((result) => { - const didResult = result.get(did.did); - console.log("generating did doc"); - console.log(didResult.generateDidDocument().toJsonTree()); + console.log("generating did doc"); + const didDoc = await did.resolve(); + console.log(didDoc.toJsonTree()); - console.log("\n"); - console.log("==================================================="); - console.log("DragaonGlass Explorer:"); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.didTopicId}`); - console.log("\n"); - }); - - /** - * Read DID information - */ - resolver.addDid(did.did); - resolver.execute(client); + console.log("\n"); + console.log("==================================================="); + console.log("DragaonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + console.log("\n"); } main(); From c685c3f7259c71530a96977fcd19451a3c7b70d7 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 14:55:14 +1100 Subject: [PATCH 037/133] added add service method to DID --- demo/2_register_did_owner.js | 47 ---------- demo/2_register_service_endpoint.js | 24 ++++++ ...did_messages.js => 3_read_did_messages.js} | 0 demo/3_register_service_endpoint.js | 51 ----------- demo/{5_resolve_did.js => 4_resolve_did.js} | 0 .../hcs/did/event/hcs-did-service-event.ts | 6 +- src/identity/hcs/did/hcs-did.ts | 86 ++++++++++++++----- test/did/hcs-did.js | 85 ++++++++++++++++++ 8 files changed, 177 insertions(+), 122 deletions(-) delete mode 100644 demo/2_register_did_owner.js create mode 100644 demo/2_register_service_endpoint.js rename demo/{4_read_did_messages.js => 3_read_did_messages.js} (100%) delete mode 100644 demo/3_register_service_endpoint.js rename demo/{5_resolve_did.js => 4_resolve_did.js} (100%) diff --git a/demo/2_register_did_owner.js b/demo/2_register_did_owner.js deleted file mode 100644 index 025874d..0000000 --- a/demo/2_register_did_owner.js +++ /dev/null @@ -1,47 +0,0 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); -const { - HcsDid, - DidMethodOperation, - MessageEnvelope, - HcsDidMessage, - HcsDidDidOwnerEvent, - HcsDidTransaction, -} = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR, MAX_TRANSACTION_FEE } = require("./config"); - -async function main() { - /** - * Client setup - */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); - const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); - - /** - * Build DID instance - */ - const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey }); - - /** - * Build create DIDOwner message - */ - const event = new HcsDidDidOwnerEvent(did.getIdentifier(), did.getIdentifier(), privateKey.publicKey); - const message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), event); - const envelope = new MessageEnvelope(message); - - /** - * Send DIDOwner message to Hashgraph - */ - const transaction = new HcsDidTransaction(envelope, did.getTopicId()); - - transaction - .signMessage((msg) => privateKey.sign(msg)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(MAX_TRANSACTION_FEE)) - .onMessageConfirmed((msg) => { - // console.log(msg); - console.log("Message published"); - }) - .execute(client); -} - -main(); diff --git a/demo/2_register_service_endpoint.js b/demo/2_register_service_endpoint.js new file mode 100644 index 0000000..8a101c6 --- /dev/null +++ b/demo/2_register_service_endpoint.js @@ -0,0 +1,24 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + + /** + * Build create Service message + */ + did.addService({ id: did.getIdentifier(), type: "LinkedDomains", serviceEndpoint: "https://test.meeco.me/vcs" }); +} + +main(); diff --git a/demo/4_read_did_messages.js b/demo/3_read_did_messages.js similarity index 100% rename from demo/4_read_did_messages.js rename to demo/3_read_did_messages.js diff --git a/demo/3_register_service_endpoint.js b/demo/3_register_service_endpoint.js deleted file mode 100644 index 6bdcf6f..0000000 --- a/demo/3_register_service_endpoint.js +++ /dev/null @@ -1,51 +0,0 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); -const { - HcsDid, - DidMethodOperation, - MessageEnvelope, - HcsDidMessage, - HcsDidTransaction, - HcsDidServiceEvent, -} = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR, MAX_TRANSACTION_FEE } = require("./config"); - -async function main() { - /** - * Client setup - */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); - const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); - - /** - * Build DID instance - */ - const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey }); - - /** - * Build create Service message - */ - const event = new HcsDidServiceEvent( - did.getIdentifier(), - "VerifiableCredentialService", - "https://test.meeco.me/vcs" - ); - const message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), event); - const envelope = new MessageEnvelope(message); - - /** - * Send DIDOwner message to Hashgraph - */ - const transaction = new HcsDidTransaction(envelope, did.getTopicId()); - - transaction - .signMessage((msg) => privateKey.sign(msg)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(MAX_TRANSACTION_FEE)) - .onMessageConfirmed((msg) => { - // console.log(msg); - console.log("Message published"); - }) - .execute(client); -} - -main(); diff --git a/demo/5_resolve_did.js b/demo/4_resolve_did.js similarity index 100% rename from demo/5_resolve_did.js rename to demo/4_resolve_did.js diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts index df26512..c40a72f 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -2,17 +2,19 @@ import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; +export type ServiceTypes = "LinkedDomains" | "DIDCommMessaging"; + export class HcsDidServiceEvent extends HcsDidEvent { protected readonly name = HcsDidEventName.SERVICE; protected id: string; - protected type: string; + protected type: ServiceTypes; protected serviceEndpoint: string; /** * TODO: are there any restrictions on type? */ - constructor(id: string, type: string, serviceEndpoint: string) { + constructor(id: string, type: ServiceTypes, serviceEndpoint: string) { super(); this.id = id; diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index e4c43e1..4001243 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -5,14 +5,18 @@ import { Hashing, HcsDidDidOwnerEvent, HcsDidMessage, + HcsDidServiceEvent, HcsDidTransaction, MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; +import { HcsDidEvent } from "./event/hcs-did-event"; +import { ServiceTypes } from "./event/hcs-did-service-event"; import { HcsDidResolver } from "./hcs-did-resolver"; export class HcsDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; + public static TRANSACTION_FEE = new Hbar(2); protected client: Client; protected privateKey: PrivateKey; @@ -60,7 +64,7 @@ export class HcsDid { * Create topic */ const topicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(new Hbar(2)) + .setMaxTransactionFee(HcsDid.TRANSACTION_FEE) .setAdminKey(this.privateKey.publicKey); const txId = await topicCreateTransaction.execute(this.client); @@ -74,27 +78,7 @@ export class HcsDid { * Set ownership */ const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); - const message = new HcsDidMessage(DidMethodOperation.CREATE, this.identifier, event); - const envelope = new MessageEnvelope(message); - - const transaction = new HcsDidTransaction(envelope, this.topicId); - - // Expect some subscribtion errors because it takes time for Topic to be accessible - - await new Promise((resolve, reject) => { - transaction - .signMessage((msg) => this.privateKey.sign(msg)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(new Hbar(2))) - .onMessageConfirmed((msg) => { - console.log("Submitted"); - resolve(msg); - }) - .onError((err) => { - console.log(err); - reject(err); - }) - .execute(this.client); - }); + await this.submitTransaciton(DidMethodOperation.CREATE, event); return this; } @@ -225,4 +209,62 @@ export class HcsDid { private publicKeyToIdString(publicKey: PublicKey): string { return Hashing.multibase.encode(publicKey.toBytes()); } + + /** + * Meta-information about DID + */ + + /** + * Add a Service meta-information to DID + * @param args + * @returns this + */ + async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args) { + throw new Error("Service args are missing"); + } + + if (!args.id || !args.type || !args.serviceEndpoint) { + throw new Error("Service args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidServiceEvent(args.id, args.type, args.serviceEndpoint); + await this.submitTransaciton(DidMethodOperation.CREATE, event); + + return this; + } + + /** + * Submit Message Transaciton to Hashgraph + */ + private async submitTransaciton(didMethodOperation: DidMethodOperation, event: HcsDidEvent) { + const message = new HcsDidMessage(didMethodOperation, this.getIdentifier(), event); + const envelope = new MessageEnvelope(message); + + const transaction = new HcsDidTransaction(envelope, this.getTopicId()); + new Promise((resolve, reject) => { + transaction + .signMessage((msg) => this.privateKey.sign(msg)) + .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) + .onMessageConfirmed((msg) => { + console.log("Message Published"); + console.log( + `Explor on dragonglass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` + ); + resolve(msg); + }) + .execute(this.client); + }); + } } diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 145d258..d56dc8c 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -199,4 +199,89 @@ describe("HcsDid", function () { }); }).timeout(60000); }); + + describe("#add-meta-information", async () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.addService({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addService({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("throws error if Service arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addService(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Service args are missing"); + } + }); + + it("publish a new Service message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + await ( + await did.register() + ).addService({ + id: did.getIdentifier(), + type: "LinkedDomains", + serviceEndpoint: "https://test.meeco.me/vcs", + }); + + /** + * wait for 9s so didowner and service event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const messages = []; + + new TopicMessageQuery() + .setTopicId(did.getTopicId()) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 3000)); + + // DIDOwner and Service event + assert.equal(messages.length, 2); + }).timeout(60000); + }); }); From d6b76a8cc818001dccf4d38d1a8b595423706585 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 16:06:03 +1100 Subject: [PATCH 038/133] added add verification method event message --- .../hcs-did-verification-method-event.ts | 10 +- src/identity/hcs/did/hcs-did.ts | 60 ++++++++++-- test/did/hcs-did.js | 95 ++++++++++++++++++- 3 files changed, 153 insertions(+), 12 deletions(-) diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts index fe4ffe5..76f7e28 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts @@ -3,23 +3,23 @@ import { DidDocumentBase, Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; +export type VerificationMethodSupportedKeyType = "Ed25519VerificationKey2018"; export class HcsDidVerificationMethodEvent extends HcsDidEvent { - public static KEY_TYPE = "Ed25519VerificationKey2018"; - protected readonly name = HcsDidEventName.VERIFICATION_METHOD; protected id: string; - protected type = HcsDidVerificationMethodEvent.KEY_TYPE; + protected type: VerificationMethodSupportedKeyType; protected controller: string; protected publicKey: PublicKey; /** * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? */ - constructor(id: string, controller: string, publicKey: PublicKey) { + constructor(id: string, type: VerificationMethodSupportedKeyType, controller: string, publicKey: PublicKey) { super(); this.id = id; + this.type = type; this.controller = controller; this.publicKey = publicKey; } @@ -61,7 +61,7 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { static fromJsonTree(tree: any): HcsDidVerificationMethodEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidVerificationMethodEvent(tree.id, tree.controller, publicKey); + return new HcsDidVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); } // TODO: apply verification method event diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 4001243..a0ad52a 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -12,6 +12,10 @@ import { import { DidSyntax } from "../../did-syntax"; import { HcsDidEvent } from "./event/hcs-did-event"; import { ServiceTypes } from "./event/hcs-did-service-event"; +import { + HcsDidVerificationMethodEvent, + VerificationMethodSupportedKeyType, +} from "./event/hcs-did-verification-method-event"; import { HcsDidResolver } from "./hcs-did-resolver"; export class HcsDid { @@ -78,7 +82,7 @@ export class HcsDid { * Set ownership */ const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); - await this.submitTransaciton(DidMethodOperation.CREATE, event); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -160,7 +164,7 @@ export class HcsDid { DidSyntax.DID_METHOD_SEPARATOR + methodNetwork + DidSyntax.DID_METHOD_SEPARATOR + - this.publicKeyToIdString(publicKey) + + HcsDid.publicKeyToIdString(publicKey) + DidSyntax.DID_TOPIC_SEPARATOR + this.topicId.toString(); @@ -206,10 +210,14 @@ export class HcsDid { } } - private publicKeyToIdString(publicKey: PublicKey): string { + public static publicKeyToIdString(publicKey: PublicKey): string { return Hashing.multibase.encode(publicKey.toBytes()); } + public static stringToPublicKey(idString: string): PublicKey { + return PublicKey.fromBytes(Hashing.multibase.decode(idString)); + } + /** * Meta-information about DID */ @@ -240,7 +248,43 @@ export class HcsDid { * Build create Service message */ const event = new HcsDidServiceEvent(args.id, args.type, args.serviceEndpoint); - await this.submitTransaciton(DidMethodOperation.CREATE, event); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + + return this; + } + + /** + * Add a Verification Method meta-information to DID + * @param args + * @returns this + */ + async addVerificaitonMethod(args: { + id: string; + type: VerificationMethodSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args) { + throw new Error("Verification Method args are missing"); + } + + if (!args.id || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Method args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -248,14 +292,18 @@ export class HcsDid { /** * Submit Message Transaciton to Hashgraph */ - private async submitTransaciton(didMethodOperation: DidMethodOperation, event: HcsDidEvent) { + private async submitTransaciton( + didMethodOperation: DidMethodOperation, + event: HcsDidEvent, + privateKey: PrivateKey + ) { const message = new HcsDidMessage(didMethodOperation, this.getIdentifier(), event); const envelope = new MessageEnvelope(message); const transaction = new HcsDidTransaction(envelope, this.getTopicId()); new Promise((resolve, reject) => { transaction - .signMessage((msg) => this.privateKey.sign(msg)) + .signMessage((msg) => privateKey.sign(msg)) .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) .onMessageConfirmed((msg) => { console.log("Message Published"); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index d56dc8c..4d8c801 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -200,7 +200,7 @@ describe("HcsDid", function () { }).timeout(60000); }); - describe("#add-meta-information", async () => { + describe("Add Service meta-information", async () => { let client; before(async () => { @@ -284,4 +284,97 @@ describe("HcsDid", function () { assert.equal(messages.length, 2); }).timeout(60000); }); + + describe("Add VerificationMethod meta-information", async () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.verificationMethod({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addVerificaitonMethod({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("throws error if Verification Method arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addVerificaitonMethod(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Verification Method args are missing"); + } + }); + + it("publish a new VerificationMethod message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await ( + await did.register() + ).addVerificaitonMethod({ + id: "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + /** + * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`${did.getIdentifier()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const messages = []; + + new TopicMessageQuery() + .setTopicId(did.getTopicId()) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 3000)); + + // DIDOwner and VerificationMethod event + assert.equal(messages.length, 2); + }).timeout(60000); + }); }); From a6acce8a26b07e7060e209febf4d5637c8aff49c Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 4 Feb 2022 16:45:36 +1100 Subject: [PATCH 039/133] added add verification relationship event --- ...hcs-did-verification-relationship-event.ts | 23 ++++- src/identity/hcs/did/hcs-did.ts | 48 ++++++++++ test/did/hcs-did.js | 96 ++++++++++++++++++- 3 files changed, 161 insertions(+), 6 deletions(-) diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts index e2d5d5a..22dbbfd 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -10,13 +10,13 @@ export type VerificationRelationshipType = | "capabilityInvocation" | "capabilityDelegation"; -export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { - public static KEY_TYPE = "Ed25519VerificationKey2018"; +export type VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; +export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { protected readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; protected id: string; - protected type = HcsDidVerificationRelationshipEvent.KEY_TYPE; + protected type: VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; protected relationshipType: VerificationRelationshipType; protected controller: string; protected publicKey: PublicKey; @@ -24,10 +24,17 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { /** * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? */ - constructor(id: string, relationshipType: VerificationRelationshipType, controller: string, publicKey: PublicKey) { + constructor( + id: string, + relationshipType: VerificationRelationshipType, + type: VerificationRelationshipSupportedKeyType, + controller: string, + publicKey: PublicKey + ) { super(); this.id = id; + this.type = type; this.relationshipType = relationshipType; this.controller = controller; this.publicKey = publicKey; @@ -75,7 +82,13 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { static fromJsonTree(tree: any): HcsDidVerificationRelationshipEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidVerificationRelationshipEvent(tree.id, tree.relationshipType, tree.controller, publicKey); + return new HcsDidVerificationRelationshipEvent( + tree.id, + tree.relationshipType, + tree.type, + tree.controller, + publicKey + ); } // TODO: apply verification method event diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index a0ad52a..e7ffe50 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -16,6 +16,11 @@ import { HcsDidVerificationMethodEvent, VerificationMethodSupportedKeyType, } from "./event/hcs-did-verification-method-event"; +import { + HcsDidVerificationRelationshipEvent, + VerificationRelationshipSupportedKeyType, + VerificationRelationshipType, +} from "./event/hcs-did-verification-relationship-event"; import { HcsDidResolver } from "./hcs-did-resolver"; export class HcsDid { @@ -289,6 +294,49 @@ export class HcsDid { return this; } + /** + * Add a Verification Relationship to DID + * @param args + * @returns this + */ + async addVerificaitonRelationship(args: { + id: string; + relationshipType: VerificationRelationshipType; + type: VerificationRelationshipSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args) { + throw new Error("Verification Relationship args are missing"); + } + + if (!args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Relationship args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidVerificationRelationshipEvent( + args.id, + args.relationshipType, + args.type, + args.controller, + args.publicKey + ); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + + return this; + } + /** * Submit Message Transaciton to Hashgraph */ diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 4d8c801..57804f4 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -344,7 +344,101 @@ describe("HcsDid", function () { await ( await did.register() ).addVerificaitonMethod({ - id: "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0", + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + /** + * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`${did.getIdentifier()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const messages = []; + + new TopicMessageQuery() + .setTopicId(did.getTopicId()) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 3000)); + + // DIDOwner and VerificationMethod event + assert.equal(messages.length, 2); + }).timeout(60000); + }); + + describe("Add VerificationMethod Relationship meta-information", async () => { + let client; + + before(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.verificationMethod({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addVerificaitonMethod({}); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Client configuration is missing"); + } + }); + + it("throws error if Verification Relationship arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addVerificaitonRelationship(); + } catch (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "Verification Relationship args are missing"); + } + }); + + it("publish a new VerificationRelationship message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#delegate-key1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await ( + await did.register() + ).addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, From bf2ffa65254c827c5c23dae79329fb0201573f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 4 Feb 2022 09:30:11 +0100 Subject: [PATCH 040/133] Move some code around; Fix a few tests; Disable no longer relevant tests; Minor cleanup --- src/identity/hcs/did/hcs-did.ts | 212 +++++++++++++++++--------------- test/did/hcs-did-message.js | 39 ++---- test/did/hcs-did.js | 99 ++++++--------- test/utils/hashing.js | 5 +- 4 files changed, 159 insertions(+), 196 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index e7ffe50..22fa3f4 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -42,7 +42,7 @@ export class HcsDid { this.client = args.client; if (!this.identifier && !this.privateKey) { - throw new Error("identifier and privateKey cannot be empty"); + throw new Error("identifier and privateKey cannot both be empty"); } if (this.identifier) { @@ -56,7 +56,7 @@ export class HcsDid { * Public API */ - async register() { + public async register() { if (this.identifier) { throw new Error("DID is already registered"); } @@ -92,7 +92,7 @@ export class HcsDid { return this; } - async resolve() { + public async resolve() { if (!this.identifier) { throw new Error("DID is not registered"); } @@ -128,101 +128,6 @@ export class HcsDid { }); } - /** - * Attribute getters - */ - - public getIdentifier() { - return this.identifier; - } - - public getClient() { - return this.client; - } - - public getPrivateKey() { - return this.privateKey; - } - - public getTopicId() { - return this.topicId; - } - - public getNetwork() { - return this.network; - } - - public getMethod() { - return HcsDid.DID_METHOD; - } - - /** - * Private - */ - - private buildIdentifier(publicKey: PublicKey): string { - const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); - - let ret: string; - ret = - DidSyntax.DID_PREFIX + - DidSyntax.DID_METHOD_SEPARATOR + - methodNetwork + - DidSyntax.DID_METHOD_SEPARATOR + - HcsDid.publicKeyToIdString(publicKey) + - DidSyntax.DID_TOPIC_SEPARATOR + - this.topicId.toString(); - - return ret; - } - - private parseIdentifier(identifier: string): [string, TopicId] { - const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); - - if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); - } - - const topicId = TopicId.fromString(topicIdPart); - - const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); - - if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); - } - - const methodName = didParts.shift(); - if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error("DID string is invalid: invalid method name: " + methodName); - } - - try { - const networkName = didParts.shift(); - - if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { - throw new Error("Invalid Hedera network."); - } - - const didIdString = didParts.shift(); - - if (didIdString.length < 32 || didParts.shift()) { - throw new Error("DID string is invalid."); - } - - return [networkName, topicId]; - } catch (e) { - throw new Error("DID string is invalid. " + e.message); - } - } - - public static publicKeyToIdString(publicKey: PublicKey): string { - return Hashing.multibase.encode(publicKey.toBytes()); - } - - public static stringToPublicKey(idString: string): PublicKey { - return PublicKey.fromBytes(Hashing.multibase.decode(idString)); - } - /** * Meta-information about DID */ @@ -232,7 +137,7 @@ export class HcsDid { * @param args * @returns this */ - async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + public async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { if (!this.privateKey) { throw new Error("privateKey is missing"); } @@ -263,7 +168,7 @@ export class HcsDid { * @param args * @returns this */ - async addVerificaitonMethod(args: { + public async addVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; @@ -299,7 +204,7 @@ export class HcsDid { * @param args * @returns this */ - async addVerificaitonRelationship(args: { + public async addVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; @@ -337,6 +242,105 @@ export class HcsDid { return this; } + /** + * Attribute getters + */ + + public getIdentifier() { + return this.identifier; + } + + public getClient() { + return this.client; + } + + public getPrivateKey() { + return this.privateKey; + } + + public getTopicId() { + return this.topicId; + } + + public getNetwork() { + return this.network; + } + + public getMethod() { + return HcsDid.DID_METHOD; + } + + /** + * Static methods + */ + + public static publicKeyToIdString(publicKey: PublicKey): string { + return Hashing.multibase.encode(publicKey.toBytes()); + } + + public static stringToPublicKey(idString: string): PublicKey { + return PublicKey.fromBytes(Hashing.multibase.decode(idString)); + } + + /** + * Private + */ + + private buildIdentifier(publicKey: PublicKey): string { + const methodNetwork = [this.getMethod().toString(), this.network].join(DidSyntax.DID_METHOD_SEPARATOR); + + let ret: string; + ret = + DidSyntax.DID_PREFIX + + DidSyntax.DID_METHOD_SEPARATOR + + methodNetwork + + DidSyntax.DID_METHOD_SEPARATOR + + HcsDid.publicKeyToIdString(publicKey) + + DidSyntax.DID_TOPIC_SEPARATOR + + this.topicId.toString(); + + return ret; + } + + private parseIdentifier(identifier: string): [string, TopicId] { + const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); + + if (!topicIdPart) { + throw new Error("DID string is invalid: topic ID is missing"); + } + + const topicId = TopicId.fromString(topicIdPart); + + const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); + + if (didParts.shift() !== DidSyntax.DID_PREFIX) { + throw new Error("DID string is invalid: invalid prefix."); + } + + const methodName = didParts.shift(); + if (DidSyntax.Method.HEDERA_HCS !== methodName) { + throw new Error("DID string is invalid: invalid method name: " + methodName); + } + + try { + const networkName = didParts.shift(); + + if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { + throw new Error("Invalid Hedera network."); + } + + const didIdString = didParts.shift(); + + if (didIdString.length < 32 || didParts.shift()) { + throw new Error("DID string is invalid."); + } + + return [networkName, topicId]; + } catch (e) { + throw new Error("DID string is invalid. " + e.message); + } + } + /** * Submit Message Transaciton to Hashgraph */ @@ -347,12 +351,16 @@ export class HcsDid { ) { const message = new HcsDidMessage(didMethodOperation, this.getIdentifier(), event); const envelope = new MessageEnvelope(message); - const transaction = new HcsDidTransaction(envelope, this.getTopicId()); + new Promise((resolve, reject) => { transaction .signMessage((msg) => privateKey.sign(msg)) .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) + .onError((err) => { + console.error(err); + reject(err); + }) .onMessageConfirmed((msg) => { console.log("Message Published"); console.log( diff --git a/test/did/hcs-did-message.js b/test/did/hcs-did-message.js index 5899e63..a3c5b40 100644 --- a/test/did/hcs-did-message.js +++ b/test/did/hcs-did-message.js @@ -1,5 +1,5 @@ const { encrypt, decrypt } = require("../aes-encryption-util"); -const { FileId, TopicId } = require("@hashgraph/sdk"); +const { TopicId, PrivateKey } = require("@hashgraph/sdk"); const { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } = require("../../dist"); const { assert } = require("chai"); @@ -8,18 +8,15 @@ const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); -describe("HcsDidMessage", function () { +xdescribe("HcsDidMessage", function () { it("Test Valid Message", async function () { - const privateKey = HcsDid.generateDidRootKey(); - + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); const didJson = doc.toJSON(); const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); - const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - assert.isTrue(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); @@ -27,79 +24,65 @@ describe("HcsDidMessage", function () { it("Test Encrypted Message", async function () { const secret = "Secret encryption password"; - - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); const didJson = doc.toJSON(); - const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter((m) => encrypt(m, secret))); const encryptedSignedMsg = MessageEnvelope.fromJson( ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), HcsDidMessage ); - assert.exists(encryptedSignedMsg); assert.throw(() => { encryptedSignedMsg.open(); }); - const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); - assert.exists(decryptedMsg); assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); }); it("Test Invalid Did", async function () { - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => privateKey.sign(msg) ); const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - - const differentDid = new HcsDid(network, HcsDid.generateDidRootKey().publicKey, DID_TOPIC_ID1); + const differentDid = new HcsDid(network, PrivateKey.generate().publicKey, DID_TOPIC_ID1); msg.did = differentDid.toDid(); - assert.isFalse(msg.isValid()); }); it("Test Invalid Topic", async function () { - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => privateKey.sign(msg) ); const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - assert.isTrue(msg.isValid(DID_TOPIC_ID1)); assert.isFalse(msg.isValid(DID_TOPIC_ID2)); }); it("Test Missing Data", async function () { - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); const operation = DidMethodOperation.CREATE; - const didJson = doc.toJSON(); const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => privateKey.sign(msg) ); - const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); assert.isFalse(msg.isValid()); - msg = new HcsDidMessage(operation, validMsg.getDid(), null); assert.isFalse(msg.isValid()); assert.notExists(msg.getDidDocument()); @@ -108,16 +91,14 @@ describe("HcsDidMessage", function () { }); it("Test Invalid Signature", async function () { - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - HcsDid.generateDidRootKey().sign(msg) + PrivateKey.generate().sign(msg) ); const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - assert.isFalse(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); }); }); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index 57804f4..ccc25a7 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -5,6 +5,8 @@ const { HcsDid, Hashing } = require("../../dist"); const { assert } = require("chai"); const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; +const MINUTE_TIMEOUT_LIMIT = 60000; +const READ_MESSAGES_TIMEOUT = 30000; describe("HcsDid", function () { describe("#constructor", () => { @@ -122,23 +124,10 @@ describe("HcsDid", function () { assert.equal(did.getClient(), client); assert.equal(did.getNetwork(), "testnet"); - const messages = []; - - new TopicMessageQuery() - .setTopicId(did.getTopicId()) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * Will have to change, let's just wait for 3s and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, 3000)); + const messages = await readtTopicMessages(did.getTopicId(), client); assert.equal(messages.length, 1); - }).timeout(60000); + }).timeout(MINUTE_TIMEOUT_LIMIT); }); describe("#resolve", () => { @@ -197,7 +186,7 @@ describe("HcsDid", function () { controller: did.getIdentifier(), publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), }); - }).timeout(60000); + }).timeout(MINUTE_TIMEOUT_LIMIT); }); describe("Add Service meta-information", async () => { @@ -265,24 +254,11 @@ describe("HcsDid", function () { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const messages = []; - - new TopicMessageQuery() - .setTopicId(did.getTopicId()) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * wait for 3s and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, 3000)); + const messages = await readtTopicMessages(did.getTopicId(), client); // DIDOwner and Service event assert.equal(messages.length, 2); - }).timeout(60000); + }).timeout(MINUTE_TIMEOUT_LIMIT); }); describe("Add VerificationMethod meta-information", async () => { @@ -301,7 +277,7 @@ describe("HcsDid", function () { const did = new HcsDid({ identifier }); try { - await did.verificationMethod({}); + await did.addVerificaitonMethod({}); } catch (err) { assert.instanceOf(err, Error); assert.equal(err.message, "privateKey is missing"); @@ -358,24 +334,11 @@ describe("HcsDid", function () { console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const messages = []; - - new TopicMessageQuery() - .setTopicId(did.getTopicId()) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * wait for 3s and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, 3000)); + const messages = await readtTopicMessages(did.getTopicId(), client); // DIDOwner and VerificationMethod event assert.equal(messages.length, 2); - }).timeout(60000); + }).timeout(MINUTE_TIMEOUT_LIMIT); }); describe("Add VerificationMethod Relationship meta-information", async () => { @@ -394,7 +357,7 @@ describe("HcsDid", function () { const did = new HcsDid({ identifier }); try { - await did.verificationMethod({}); + await did.addVerificaitonMethod({}); } catch (err) { assert.instanceOf(err, Error); assert.equal(err.message, "privateKey is missing"); @@ -452,23 +415,33 @@ describe("HcsDid", function () { console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const messages = []; - - new TopicMessageQuery() - .setTopicId(did.getTopicId()) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * wait for 3s and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, 3000)); + const messages = await readtTopicMessages(did.getTopicId(), client); // DIDOwner and VerificationMethod event assert.equal(messages.length, 2); - }).timeout(60000); + }).timeout(MINUTE_TIMEOUT_LIMIT); }); }); + +/** + * Test Helpers + */ + +async function readtTopicMessages(topicId, client) { + const messages = []; + + new TopicMessageQuery() + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, (msg) => { + messages.push(msg); + }); + + /** + * wait for 3s and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, READ_MESSAGES_TIMEOUT)); + + return messages; +} diff --git a/test/utils/hashing.js b/test/utils/hashing.js index 285195b..adc4ef3 100644 --- a/test/utils/hashing.js +++ b/test/utils/hashing.js @@ -1,9 +1,10 @@ -const { HcsDid, Hashing } = require("../../dist"); +const { Hashing } = require("../../dist"); const { expect } = require("chai"); +const { PrivateKey } = require("@hashgraph/sdk"); describe("Util Multibase & Multicodec", function () { it("Test Valid Multibase base58btc with ed25519 pub key encode", async function () { - const privateKey = HcsDid.generateDidRootKey(); + const privateKey = PrivateKey.generate(); const publickeybytes = privateKey.publicKey.toBytes(); const base58btcEncodedString = Hashing.multibase.encode(publickeybytes); From 87eff89c572458071568f90d6c5560e93186c5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 4 Feb 2022 13:55:19 +0100 Subject: [PATCH 041/133] Fix submitTransaction to return Promise other function can await for --- src/identity/hcs/did/hcs-did.ts | 4 ++-- test/did/hcs-did.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 22fa3f4..495a46e 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -348,12 +348,12 @@ export class HcsDid { didMethodOperation: DidMethodOperation, event: HcsDidEvent, privateKey: PrivateKey - ) { + ): Promise> { const message = new HcsDidMessage(didMethodOperation, this.getIdentifier(), event); const envelope = new MessageEnvelope(message); const transaction = new HcsDidTransaction(envelope, this.getTopicId()); - new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { transaction .signMessage((msg) => privateKey.sign(msg)) .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js index ccc25a7..af668dd 100644 --- a/test/did/hcs-did.js +++ b/test/did/hcs-did.js @@ -6,7 +6,7 @@ const { assert } = require("chai"); const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; const MINUTE_TIMEOUT_LIMIT = 60000; -const READ_MESSAGES_TIMEOUT = 30000; +const READ_MESSAGES_TIMEOUT = 5000; describe("HcsDid", function () { describe("#constructor", () => { @@ -439,7 +439,7 @@ async function readtTopicMessages(topicId, client) { }); /** - * wait for 3s and assume all messages were read + * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read */ await new Promise((resolve) => setTimeout(resolve, READ_MESSAGES_TIMEOUT)); From 98d97e4bb1d9ade612e5755d610d550d5e88cca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 4 Feb 2022 14:40:15 +0100 Subject: [PATCH 042/133] Cleanup of unused code; Change HcsDidResolver API --- demo/3_read_did_messages.js | 39 +++-- src/identity/hcs/did/hcs-did-resolver.ts | 55 +------ src/identity/hcs/did/hcs-did.ts | 51 ++----- src/identity/hcs/message-envelope.ts | 2 +- src/identity/hcs/message-resolver.ts | 185 ----------------------- src/index.ts | 2 - 6 files changed, 41 insertions(+), 293 deletions(-) delete mode 100644 src/identity/hcs/message-resolver.ts diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 06c1ae3..75267f1 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -16,31 +16,26 @@ async function main() { /** * Read DID resolver setup */ - const resolver = new HcsDidResolver(did.getTopicId()).setTimeout(3000).whenFinished((result) => { - const didResult = result.get(did.getIdentifier()); - - didResult.forEach((msg) => { + new HcsDidResolver(did.getTopicId()) + .setTimeout(3000) + .whenFinished((messages) => { + messages.forEach((msg) => { + console.log("\n"); + console.log("==================================================="); + console.log("\n"); + console.log("Message:"); + console.log(msg.toJsonTree()); + console.log("\n"); + console.log("Event:"); + console.log(msg.event.toJsonTree()); + }); console.log("\n"); console.log("==================================================="); + console.log("DragaonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); console.log("\n"); - console.log("Message:"); - console.log(msg.toJsonTree()); - console.log("\n"); - console.log("Event:"); - console.log(msg.event.toJsonTree()); - }); - console.log("\n"); - console.log("==================================================="); - console.log("DragaonGlass Explorer:"); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - console.log("\n"); - }); - - /** - * Read DID information - */ - resolver.addDid(did.getIdentifier()); - resolver.execute(client); + }) + .execute(client); } main(); diff --git a/src/identity/hcs/did/hcs-did-resolver.ts b/src/identity/hcs/did/hcs-did-resolver.ts index 3a31616..105aff4 100644 --- a/src/identity/hcs/did/hcs-did-resolver.ts +++ b/src/identity/hcs/did/hcs-did-resolver.ts @@ -4,7 +4,6 @@ import { Validator } from "../../.."; import { Sleep } from "../../../utils/sleep"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; -import { MessageResolver } from "../message-resolver"; import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; @@ -18,10 +17,10 @@ export class HcsDidResolver { public static DEFAULT_TIMEOUT: Long = Long.fromInt(30000); protected topicId: TopicId; - protected results: Map; + protected messages: HcsDidMessage[] = []; private lastMessageArrivalTime: Long; - private resultsHandler: (input: Map) => void; + private resultsHandler: (input: HcsDidMessage[]) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; private listener: MessageListener; @@ -34,38 +33,11 @@ export class HcsDidResolver { */ constructor(topicId: TopicId) { this.topicId = topicId; - this.results = new Map(); - this.noMoreMessagesTimeout = MessageResolver.DEFAULT_TIMEOUT; + this.noMoreMessagesTimeout = HcsDidResolver.DEFAULT_TIMEOUT; this.lastMessageArrivalTime = Long.fromInt(Date.now()); } - /** - * Adds a DID to resolve. - * - * @param did The DID string. - * @return This resolver instance. - */ - public addDid(did: string): HcsDidResolver { - if (did != null) { - this.results.set(did, []); - } - return this; - } - - /** - * Adds multiple DIDs to resolve. - * - * @param dids The set of DID strings. - * @return This resolver instance. - */ - public addDids(dids: string[]): HcsDidResolver { - if (dids) { - dids.forEach((d) => this.addDid(d)); - } - return this; - } - public execute(client: Client): void { new Validator().checkValidationErrors("Resolver not executed: ", (v) => { return this.validate(v); @@ -120,7 +92,7 @@ export class HcsDidResolver { return; } - this.resultsHandler(this.results); + this.resultsHandler(this.messages); if (this.listener) { this.listener.unsubscribe(); @@ -134,7 +106,7 @@ export class HcsDidResolver { * @param handler The results handler. * @return This resolver instance. */ - public whenFinished(handler: (input: Map) => void): HcsDidResolver { + public whenFinished(handler: (input: HcsDidMessage[]) => void): HcsDidResolver { this.resultsHandler = handler; return this; } @@ -168,30 +140,17 @@ export class HcsDidResolver { * @param validator The errors validator. */ protected validate(validator: Validator): void { - validator.require(this.results.size > 0, "Nothing to resolve."); validator.require(!!this.topicId, "Consensus topic ID not defined."); validator.require(!!this.resultsHandler, "Results handler 'whenFinished' not defined."); } protected matchesSearchCriteria(message: HcsDidMessage): boolean { - return this.results.has(message.getDid()); + return true; } protected processMessage(envelope: MessageEnvelope): void { const message: HcsDidMessage = envelope.open(); - // // Also skip messages that are older than the once collected or if we already have a DELETE message - // const existing: MessageEnvelope = this.results.get(message.getDid()); - - // const chackOperation = - // existing != null && - // (TimestampUtils.lessThan(envelope.getConsensusTimestamp(), existing.getConsensusTimestamp()) || - // (DidMethodOperation.DELETE == existing.open().getOperation() && - // DidMethodOperation.DELETE != message.getOperation())); - // if (chackOperation) { - // return; - // } - // // Preserve created and updated timestamps // message.setUpdated(envelope.getConsensusTimestamp()); // if (DidMethodOperation.CREATE == message.getOperation()) { @@ -201,7 +160,7 @@ export class HcsDidResolver { // } // Add valid message to the results - this.results.get(message.getDid()).push(message); + this.messages.push(message); } protected supplyMessageListener(): MessageListener { diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 495a46e..c3b8eba 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -62,7 +62,7 @@ export class HcsDid { } if (!this.privateKey) { - throw new Error("privateKey is missingi i"); + throw new Error("privateKey is missing"); } if (!this.client) { @@ -101,30 +101,23 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - return await new Promise((resolve, reject) => { - /** - * This API will have to change... - */ - const resolver = new HcsDidResolver(this.topicId) + return new Promise((resolve, reject) => { + new HcsDidResolver(this.topicId) .setTimeout(3000) - .whenFinished((result) => { - this.messages = result.get(this.identifier); - - let document = new DidDocumentBase(this.identifier); - - this.messages.forEach((msg) => { - document = msg.getEvent().process(document); - }); - - resolve(document); + .whenFinished((messages) => { + this.messages = messages; + resolve( + this.messages.reduce( + (doc, msg) => msg.getEvent().process(doc), + new DidDocumentBase(this.identifier) + ) + ); }) .onError((err) => { console.log(err); reject(err); - }); - - resolver.addDid(this.identifier); - resolver.execute(this.client); + }) + .execute(this.client); }); } @@ -146,11 +139,7 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - if (!args) { - throw new Error("Service args are missing"); - } - - if (!args.id || !args.type || !args.serviceEndpoint) { + if (!args || !args.id || !args.type || !args.serviceEndpoint) { throw new Error("Service args are missing"); } @@ -182,11 +171,7 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - if (!args) { - throw new Error("Verification Method args are missing"); - } - - if (!args.id || !args.type || !args.controller || !args.publicKey) { + if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { throw new Error("Verification Method args are missing"); } @@ -219,11 +204,7 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - if (!args) { - throw new Error("Verification Relationship args are missing"); - } - - if (!args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { + if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { throw new Error("Verification Relationship args are missing"); } diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 41fdede..30f475d 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -3,7 +3,7 @@ import { Base64 } from "js-base64"; import Long from "long"; import { ArraysUtils } from "../../utils/arrays-utils"; import { JsonClass } from "./json-class"; -import { Decrypter, Encrypter, Message } from "./message"; +import { Message } from "./message"; import { MessageMode } from "./message-mode"; import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; diff --git a/src/identity/hcs/message-resolver.ts b/src/identity/hcs/message-resolver.ts deleted file mode 100644 index eb9adbe..0000000 --- a/src/identity/hcs/message-resolver.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { Client, Timestamp, TopicId } from "@hashgraph/sdk"; -import Long from "long"; -import { Sleep } from "../../utils/sleep"; -import { Validator } from "../../utils/validator"; -import { Decrypter, Message } from "./message"; -import { MessageEnvelope } from "./message-envelope"; -import { MessageListener } from "./message-listener"; - -export abstract class MessageResolver { - /** - * Default time to wait before finishing resolution and after the last message was received. - */ - public static DEFAULT_TIMEOUT: Long = Long.fromInt(30000); - - protected topicId: TopicId; - protected results: Map>; - - private lastMessageArrivalTime: Long; - private resultsHandler: (input: Map>) => void; - private errorHandler: (input: Error) => void; - private decrypter: Decrypter; - private existingSignatures: string[]; - private listener: MessageListener; - private noMoreMessagesTimeout: Long; - - /** - * Instantiates a message resolver. - * - * @param topicId Consensus topic ID. - */ - constructor(topicId: TopicId) { - this.topicId = topicId; - this.results = new Map(); - - this.noMoreMessagesTimeout = MessageResolver.DEFAULT_TIMEOUT; - this.lastMessageArrivalTime = Long.fromInt(Date.now()); - } - - /** - * Checks if the message matches preliminary search criteria. - * - * @param message The message read from the topic. - * @return True if the message matches search criteria, false otherwise. - */ - protected abstract matchesSearchCriteria(message: T): boolean; - - /** - * Applies custom filters on the message and if successfully verified, adds it to the results map. - * - * @param envelope Message inside an envelope in PLAIN mode. - */ - protected abstract processMessage(envelope: MessageEnvelope): void; - - /** - * Supplies message listener for messages of specified type. - * - * @return The {@link MessageListener} instance. - */ - protected abstract supplyMessageListener(): MessageListener; - - /** - * Resolves queries defined in implementing classes against a mirror node. - * - * @param client The mirror node client. - */ - public execute(client: Client): void { - new Validator().checkValidationErrors("Resolver not executed: ", (v) => { - return this.validate(v); - }); - - this.existingSignatures = []; - - this.listener = this.supplyMessageListener(); - - this.listener - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .setIgnoreErrors(false) - .onError(this.errorHandler) - .subscribe(client, (msg) => { - return this.handleMessage(msg); - }); - - this.lastMessageArrivalTime = Long.fromInt(Date.now()); - this.waitOrFinish(); - } - - /** - * Handles incoming DID messages from DID Topic on a mirror node. - * - * @param envelope The parsed message envelope in a PLAIN mode. - */ - private handleMessage(envelope: MessageEnvelope): void { - this.lastMessageArrivalTime = Long.fromInt(Date.now()); - - if (!this.matchesSearchCriteria(envelope.open())) { - return; - } - - if (this.existingSignatures.indexOf(envelope.getSignature()) != -1) { - return; - } - - this.existingSignatures.push(envelope.getSignature()); - this.processMessage(envelope); - } - - /** - * Waits for a new message from the topic for the configured amount of time. - */ - protected async waitOrFinish(): Promise { - const timeDiff = Long.fromInt(Date.now()).sub(this.lastMessageArrivalTime); - - if (timeDiff.lt(this.noMoreMessagesTimeout)) { - await Sleep(this.noMoreMessagesTimeout.sub(timeDiff).toNumber()); - await this.waitOrFinish(); - return; - } - - this.resultsHandler(this.results); - - if (this.listener) { - this.listener.unsubscribe(); - } - } - - /** - * Defines a handler for resolution results. - * This will be called when the resolution process is finished. - * - * @param handler The results handler. - * @return This resolver instance. - */ - public whenFinished(handler: (input: Map>) => void): MessageResolver { - this.resultsHandler = handler; - return this; - } - - /** - * Defines a handler for errors when they happen during resolution. - * - * @param handler The error handler. - * @return This resolver instance. - */ - public onError(handler: (input: Error) => void): MessageResolver { - this.errorHandler = handler; - return this; - } - - /** - * Defines a maximum time in milliseconds to wait for new messages from the topic. - * Default is 30 seconds. - * - * @param timeout The timeout in milliseconds to wait for new messages from the topic. - * @return This resolver instance. - */ - public setTimeout(timeout: Long | number): MessageResolver { - this.noMoreMessagesTimeout = Long.fromValue(timeout); - return this; - } - - /** - * Defines decryption function that decrypts submitted the message after consensus was reached. - * Decryption function must accept a byte array of encrypted message and an Instant that is its consensus timestamp, - * If decrypter is not specified, encrypted messages will be ignored. - * - * @param decrypter The decrypter to use. - * @return This resolver instance. - */ - public onDecrypt(decrypter: Decrypter): MessageResolver { - this.decrypter = decrypter; - return this; - } - - /** - * Runs validation logic of the resolver's configuration. - * - * @param validator The errors validator. - */ - protected validate(validator: Validator): void { - validator.require(this.results.size > 0, "Nothing to resolve."); - validator.require(!!this.topicId, "Consensus topic ID not defined."); - validator.require(!!this.resultsHandler, "Results handler 'whenFinished' not defined."); - } -} diff --git a/src/index.ts b/src/index.ts index ab275b9..0c2abbd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,6 @@ import { Message } from "./identity/hcs/message"; import { MessageEnvelope } from "./identity/hcs/message-envelope"; import { MessageListener } from "./identity/hcs/message-listener"; import { MessageMode } from "./identity/hcs/message-mode"; -import { MessageResolver } from "./identity/hcs/message-resolver"; import { MessageTransaction } from "./identity/hcs/message-transaction"; import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; import { HederaDid } from "./identity/hedera-did"; @@ -50,7 +49,6 @@ export { MessageEnvelope, MessageListener, MessageMode, - MessageResolver, MessageTransaction, SerializableMirrorConsensusResponse, TimestampUtils, From 0a7685325f7f1e41690a9db0e63e30e7e147c1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 4 Feb 2022 17:39:43 +0100 Subject: [PATCH 043/133] Resolve other item CREATE events --- src/identity/did-document-base.ts | 155 ++++++++++++++---- src/identity/did-document-json-properties.ts | 3 + .../hcs/did/event/hcs-did-did-owner-event.ts | 14 +- src/identity/hcs/did/event/hcs-did-event.ts | 8 +- .../hcs/did/event/hcs-did-service-event.ts | 12 +- .../hcs-did-verification-method-event.ts | 9 +- ...hcs-did-verification-relationship-event.ts | 9 +- src/identity/hcs/did/hcs-did.ts | 7 +- 8 files changed, 135 insertions(+), 82 deletions(-) diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-base.ts index beab3e1..52f4224 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-base.ts @@ -1,18 +1,32 @@ -import { HcsDidServiceEvent } from ".."; +import { DidMethodOperation, HcsDidMessage } from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; +import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; export class DidDocumentBase { private id: string; private context: string; - private services: HcsDidServiceEvent[]; - private owners: any[]; - constructor(did: string) { + private keyId = 0; + private serviceId = 0; + + private owners: Map = new Map(); + private services: Map = new Map(); + private verificationMethods: Map = new Map(); + + private relationships = { + authentication: [], + assertionMethod: [], + keyAgreement: [], + capabilityInvocation: [], + capabilityDelegation: [], + }; + + constructor(did: string, messages: HcsDidMessage[]) { this.id = did; this.context = DidSyntax.DID_DOCUMENT_CONTEXT; - this.services = []; - this.owners = []; + + this.processMessages(messages); } public getContext(): string { @@ -23,41 +37,45 @@ export class DidDocumentBase { return this.id; } - public getServices(): HcsDidServiceEvent[] { - return this.services; - } - - public addService(service: HcsDidServiceEvent): void { - this.services.push(service); - } - - public addOwner(owner): void { - if (this.owners.includes((o) => o.id === owner.id)) { - return; - } - - this.owners.push(owner); - } - - public getOwners(): any[] { - return this.owners; - } - public toJsonTree(): any { let rootObject = {}; rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = this.owners.map((owner) => owner.id); - rootObject[DidDocumentJsonProperties.AUTHENTICATION] = this.owners.map((owner) => owner.id); - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = this.owners; + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [ + ...Array.from(this.owners.values()), + ...Array.from(this.verificationMethods.values()), + ]; + + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [ + ...Array.from(this.owners.keys()), + ...this.relationships[DidDocumentJsonProperties.ASSERTION_METHOD], + ]; - if (this.getServices().length > 0) { - rootObject[DidDocumentJsonProperties.SERVICE] = []; - this.getServices().forEach((service) => { - rootObject[DidDocumentJsonProperties.SERVICE].push(service.toJsonTree().Service); - }); + rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ + ...Array.from(this.owners.keys()), + ...this.relationships[DidDocumentJsonProperties.AUTHENTICATION], + ]; + + if (this.relationships[DidDocumentJsonProperties.KEY_AGREEMENT].length > 0) { + rootObject[DidDocumentJsonProperties.KEY_AGREEMENT] = [ + ...this.relationships[DidDocumentJsonProperties.KEY_AGREEMENT], + ]; + } + if (this.relationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION].length > 0) { + rootObject[DidDocumentJsonProperties.CAPABILITY_INVOCATION] = [ + ...this.relationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION], + ]; + } + if (this.relationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION].length > 0) { + rootObject[DidDocumentJsonProperties.CAPABILITY_DELEGATION] = [ + ...this.relationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION], + ]; + } + + if (this.services.size > 0) { + rootObject[DidDocumentJsonProperties.SERVICE] = [...Array.from(this.services.values())]; } return rootObject; @@ -66,4 +84,73 @@ export class DidDocumentBase { public toJSON(): string { return JSON.stringify(this.toJsonTree()); } + + private processMessages(messages: HcsDidMessage[]) { + messages.forEach((msg) => { + switch (msg.getOperation()) { + case DidMethodOperation.CREATE: + this.processCreateMessage(msg); + return; + default: + /** + * TODO: for debugging - later we should probably try to ignore such messages + */ + throw new Error("Not supported operation detected!"); + } + }); + } + + private processCreateMessage(message: HcsDidMessage) { + const event = message.getEvent(); + + switch (event.name) { + case HcsDidEventName.DID_OWNER: + this.owners.set(event.getId() + "#did-root-key", { + id: event.getId() + "#did-root-key", + type: (event as any).getType(), + controller: (event as any).getController(), + publicKeyMultibase: (event as any).getPublicKeyMultibase(), + }); + return; + case HcsDidEventName.SERVICE: + const serviceIdPostfix = `#service-${++this.serviceId}`; + + this.services.set(event.getId() + serviceIdPostfix, { + id: event.getId() + serviceIdPostfix, + type: (event as any).getType(), + serviceEndpoint: (event as any).getServiceEndpoint(), + }); + return; + case HcsDidEventName.VERIFICATION_METHOD: + const methodPostfix = `#key-${++this.keyId}`; + + this.verificationMethods.set(event.getId() + methodPostfix, { + id: event.getId() + methodPostfix, + type: (event as any).getType(), + controller: (event as any).getController(), + publicKeyMultibase: (event as any).getPublicKeyMultibase(), + }); + return; + case HcsDidEventName.VERIFICATION_RELATIONSHIP: + const type = (event as any).getRelationshipType(); + + if (this.relationships[type]) { + const relationshipPostfix = `#key-${++this.keyId}`; + + this.relationships[type].push(event.getId() + relationshipPostfix); + this.verificationMethods.set(event.getId() + relationshipPostfix, { + id: event.getId() + relationshipPostfix, + type: (event as any).getType(), + controller: (event as any).getController(), + publicKeyMultibase: (event as any).getPublicKeyMultibase(), + }); + } + return; + default: + /** + * TODO: for debugging - later we should probably try to ignore such messages + */ + throw new Error("Not supported event detected!"); + } + } } diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index afbf6bc..4ff8670 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -4,6 +4,9 @@ export module DidDocumentJsonProperties { export const AUTHENTICATION = "authentication"; export const VERIFICATION_METHOD = "verificationMethod"; export const ASSERTION_METHOD = "assertionMethod"; + export const KEY_AGREEMENT = "keyAgreement"; + export const CAPABILITY_INVOCATION = "capabilityInvocation"; + export const CAPABILITY_DELEGATION = "capabilityDelegation"; export const SERVICE = "service"; export const CREATED = "created"; export const UPDATED = "updated"; diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts index 7631ffa..372c466 100644 --- a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts +++ b/src/identity/hcs/did/event/hcs-did-did-owner-event.ts @@ -1,13 +1,12 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../.."; -import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; export class HcsDidDidOwnerEvent extends HcsDidEvent { public static KEY_TYPE = "Ed25519VerificationKey2018"; - protected readonly name = HcsDidEventName.DID_OWNER; + public readonly name = HcsDidEventName.DID_OWNER; protected id: string; protected type = HcsDidDidOwnerEvent.KEY_TYPE; @@ -64,15 +63,4 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidDidOwnerEvent(tree.id, tree.controller, publicKey); } - - process(didDoc: DidDocumentBase): DidDocumentBase { - didDoc.addOwner({ - id: this.getId() + "#did-root-key", - type: this.getType(), - controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), - }); - - return didDoc; - } } diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index b269952..fff0674 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -1,17 +1,17 @@ -import { DidDocumentBase, Hashing } from "../../../.."; +import { Hashing } from "../../../.."; import { HcsDidEventName } from "./hcs-did-event-name"; export abstract class HcsDidEvent { - protected abstract readonly name: HcsDidEventName; + public abstract readonly name: HcsDidEventName; constructor() {} + abstract getId(): string; + abstract toJsonTree(): any; abstract toJSON(): string; - abstract process(didDoc: DidDocumentBase): DidDocumentBase; - public getBase64() { return Hashing.base64.encode(this.toJSON()); } diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/hcs-did-service-event.ts index c40a72f..1b59b59 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/hcs-did-service-event.ts @@ -1,11 +1,10 @@ -import { DidDocumentBase } from "../../../did-document-base"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; export type ServiceTypes = "LinkedDomains" | "DIDCommMessaging"; export class HcsDidServiceEvent extends HcsDidEvent { - protected readonly name = HcsDidEventName.SERVICE; + public readonly name = HcsDidEventName.SERVICE; protected id: string; protected type: ServiceTypes; @@ -51,13 +50,4 @@ export class HcsDidServiceEvent extends HcsDidEvent { static fromJsonTree(tree: any): HcsDidServiceEvent { return new HcsDidServiceEvent(tree.id, tree.type, tree.serviceEndpoint); } - - // TODO: apply service event - process(didDoc: DidDocumentBase): DidDocumentBase { - // add relevent service json properties to didDoc - if (didDoc.getServices().find((service) => service.getId() === this.getId())) return didDoc; - - didDoc.addService(this); - return didDoc; - } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts index 76f7e28..18df779 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-method-event.ts @@ -1,11 +1,11 @@ import { PublicKey } from "@hashgraph/sdk"; -import { DidDocumentBase, Hashing } from "../../../.."; +import { Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; export type VerificationMethodSupportedKeyType = "Ed25519VerificationKey2018"; export class HcsDidVerificationMethodEvent extends HcsDidEvent { - protected readonly name = HcsDidEventName.VERIFICATION_METHOD; + public readonly name = HcsDidEventName.VERIFICATION_METHOD; protected id: string; protected type: VerificationMethodSupportedKeyType; @@ -63,9 +63,4 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); } - - // TODO: apply verification method event - process(didDoc: DidDocumentBase): DidDocumentBase { - throw new Error("Method not implemented."); - } } diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts index 22dbbfd..b929291 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { DidDocumentBase, Hashing } from "../../../.."; +import { Hashing } from "../../../.."; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -13,7 +13,7 @@ export type VerificationRelationshipType = export type VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { - protected readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; protected id: string; protected type: VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; @@ -90,9 +90,4 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { publicKey ); } - - // TODO: apply verification method event - process(didDoc: DidDocumentBase): DidDocumentBase { - throw new Error("Method not implemented."); - } } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index c3b8eba..5735f54 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -106,12 +106,7 @@ export class HcsDid { .setTimeout(3000) .whenFinished((messages) => { this.messages = messages; - resolve( - this.messages.reduce( - (doc, msg) => msg.getEvent().process(doc), - new DidDocumentBase(this.identifier) - ) - ); + resolve(new DidDocumentBase(this.identifier, this.messages)); }) .onError((err) => { console.log(err); From a1c35f100928eea8b433c7d430b07fd1b52f9017 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 7 Feb 2022 14:53:21 +1100 Subject: [PATCH 044/133] updating, revoking and deleting event message write to hedera --- demo/5_delete_did_document.js | 24 ++ .../hcs/did/event/hcs-did-delete-event.ts | 31 +++ .../hcs/did/event/hcs-did-event-name.ts | 1 + .../hcs/did/event/hcs-did-event-parser.ts | 2 + src/identity/hcs/did/hcs-did.ts | 257 ++++++++++++++---- 5 files changed, 258 insertions(+), 57 deletions(-) create mode 100644 demo/5_delete_did_document.js create mode 100644 src/identity/hcs/did/event/hcs-did-delete-event.ts diff --git a/demo/5_delete_did_document.js b/demo/5_delete_did_document.js new file mode 100644 index 0000000..5981c3b --- /dev/null +++ b/demo/5_delete_did_document.js @@ -0,0 +1,24 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Build DID instance + */ + const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + + /** + * Build create Service message + */ + did.delete(); +} + +main(); diff --git a/src/identity/hcs/did/event/hcs-did-delete-event.ts b/src/identity/hcs/did/event/hcs-did-delete-event.ts new file mode 100644 index 0000000..0671a7d --- /dev/null +++ b/src/identity/hcs/did/event/hcs-did-delete-event.ts @@ -0,0 +1,31 @@ +import { HcsDidEvent } from "./hcs-did-event"; +import { HcsDidEventName } from "./hcs-did-event-name"; + +export class HcsDidDeleteEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.DELETE; + + /** + * TODO: are there any restrictions on type? + */ + constructor() { + super(); + } + + getId(): string { + throw new Error("Method not implemented."); + } + + public toJsonTree() { + return { + [this.name]: {}, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidDeleteEvent { + return new HcsDidDeleteEvent(); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-event-name.ts b/src/identity/hcs/did/event/hcs-did-event-name.ts index 75f238e..2ccf986 100644 --- a/src/identity/hcs/did/event/hcs-did-event-name.ts +++ b/src/identity/hcs/did/event/hcs-did-event-name.ts @@ -3,4 +3,5 @@ export enum HcsDidEventName { VERIFICATION_METHOD = "VerificationMethod", VERIFICATION_RELATIONSHIP = "VerificationRelationship", SERVICE = "Service", + DELETE = "Delete", } diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 34f8d94..037b3d2 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -1,4 +1,5 @@ import { Hashing } from "../../../.."; +import { HcsDidDeleteEvent } from "./hcs-did-delete-event"; import { HcsDidDidOwnerEvent } from "./hcs-did-did-owner-event"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; @@ -11,6 +12,7 @@ const EVENT_NAME_TO_CLASS = { [HcsDidEventName.SERVICE]: HcsDidServiceEvent, [HcsDidEventName.VERIFICATION_METHOD]: HcsDidVerificationMethodEvent, [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidVerificationRelationshipEvent, + [HcsDidEventName.DELETE]: HcsDidDeleteEvent, }; export class HcsDidEventParser { diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 5735f54..293fdd9 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -10,6 +10,7 @@ import { MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; +import { HcsDidDeleteEvent } from "./event/hcs-did-delete-event"; import { HcsDidEvent } from "./event/hcs-did-event"; import { ServiceTypes } from "./event/hcs-did-service-event"; import { @@ -116,6 +117,23 @@ export class HcsDid { }); } + public async delete() { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + /** + * TODO: how to send empty message? we have only one listner that is event listner. you can not listen to different type of messages. + * I suggest we send DELETE event + */ + await this.submitTransaciton(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); + return this; + } + /** * Meta-information about DID */ @@ -126,25 +144,25 @@ export class HcsDid { * @returns this */ public async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - if (!args || !args.id || !args.type || !args.serviceEndpoint) { - throw new Error("Service args are missing"); - } + return await this.AddUpdateRevokeService(args, DidMethodOperation.CREATE); + } - /** - * Build create Service message - */ - const event = new HcsDidServiceEvent(args.id, args.type, args.serviceEndpoint); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + /** + * Update a Service meta-information to DID + * @param args + * @returns this + */ + public async updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + return await this.AddUpdateRevokeService(args, DidMethodOperation.UPDATE); + } - return this; + /** + * Revoke a Service meta-information to DID + * @param args + * @returns this + */ + public async revokeService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + return await this.AddUpdateRevokeService(args, DidMethodOperation.REVOKE); } /** @@ -158,25 +176,35 @@ export class HcsDid { controller: string; publicKey: PublicKey; }) { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Method args are missing"); - } + return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.CREATE); + } - /** - * Build create Service message - */ - const event = new HcsDidVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + /** + * Update a Verification Method meta-information to DID + * @param args + * @returns this + */ + public async updateVerificaitonMethod(args: { + id: string; + type: VerificationMethodSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.UPDATE); + } - return this; + /** + * Revoke a Verification Method meta-information to DID + * @param args + * @returns this + */ + public async revokeVerificaitonMethod(args: { + id: string; + type: VerificationMethodSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.REVOKE); } /** @@ -191,31 +219,37 @@ export class HcsDid { controller: string; publicKey: PublicKey; }) { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Relationship args are missing"); - } + return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.CREATE); + } - /** - * Build create Service message - */ - const event = new HcsDidVerificationRelationshipEvent( - args.id, - args.relationshipType, - args.type, - args.controller, - args.publicKey - ); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + /** + * Update a Verification Relationship to DID + * @param args + * @returns this + */ + public async updateVerificaitonRelationship(args: { + id: string; + relationshipType: VerificationRelationshipType; + type: VerificationRelationshipSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.UPDATE); + } - return this; + /** + * Revoke a Verification Relationship to DID + * @param args + * @returns this + */ + public async revokeVerificaitonRelationship(args: { + id: string; + relationshipType: VerificationRelationshipType; + type: VerificationRelationshipSupportedKeyType; + controller: string; + publicKey: PublicKey; + }) { + return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.REVOKE); } /** @@ -317,8 +351,117 @@ export class HcsDid { } } + /** + * + * @param args + * @param didMethodOperation + * @returns this + */ + private async AddUpdateRevokeService( + args: { id: string; type: ServiceTypes; serviceEndpoint: string }, + didMethodOperation: DidMethodOperation + ) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args || !args.id || !args.type || !args.serviceEndpoint) { + throw new Error("Service args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidServiceEvent(args.id, args.type, args.serviceEndpoint); + await this.submitTransaciton(didMethodOperation, event, this.privateKey); + + return this; + } + + /** + * + * @param args + * @param didMethodOperation + * @returns this + */ + private async AddUpdateRevokeVerificationMethod( + args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey }, + didMethodOperation: DidMethodOperation + ) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Method args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); + await this.submitTransaciton(didMethodOperation, event, this.privateKey); + + return this; + } + + /** + * Add Update Revoke Verification Relationship Event Message Submission + * @param args + * @param didMethodOperation + * @returns this + */ + private async AddUpdateRevokeVerificationRelationship( + args: { + id: string; + relationshipType: VerificationRelationshipType; + type: VerificationRelationshipSupportedKeyType; + controller: string; + publicKey: PublicKey; + }, + didMethodOperation: DidMethodOperation + ) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Relationship args are missing"); + } + + /** + * Build create Service message + */ + const event = new HcsDidVerificationRelationshipEvent( + args.id, + args.relationshipType, + args.type, + args.controller, + args.publicKey + ); + await this.submitTransaciton(didMethodOperation, event, this.privateKey); + + return this; + } + /** * Submit Message Transaciton to Hashgraph + * @param didMethodOperation + * @param event + * @param privateKey + * @returns this */ private async submitTransaciton( didMethodOperation: DidMethodOperation, From 5f7c15ccf309e69749d8d9eabef571e311efd085 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 7 Feb 2022 16:03:47 +1100 Subject: [PATCH 045/133] renaming and fixing tests --- ...cument-base.ts => did-document-builder.ts} | 2 +- ...r.ts => hcs-did-event-message-resolver.ts} | 12 +- src/identity/hcs/did/hcs-did.ts | 8 +- src/identity/hedera-did.ts | 10 - src/index.ts | 10 +- test/did-document-base.js | 142 -------------- test/did-document-builder.js | 8 + test/did/hcs-did-message.js | 184 +++++++++--------- 8 files changed, 113 insertions(+), 263 deletions(-) rename src/identity/{did-document-base.ts => did-document-builder.ts} (99%) rename src/identity/hcs/did/{hcs-did-resolver.ts => hcs-did-event-message-resolver.ts} (93%) delete mode 100644 src/identity/hedera-did.ts delete mode 100644 test/did-document-base.js create mode 100644 test/did-document-builder.js diff --git a/src/identity/did-document-base.ts b/src/identity/did-document-builder.ts similarity index 99% rename from src/identity/did-document-base.ts rename to src/identity/did-document-builder.ts index 52f4224..5100a70 100644 --- a/src/identity/did-document-base.ts +++ b/src/identity/did-document-builder.ts @@ -3,7 +3,7 @@ import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; -export class DidDocumentBase { +export class DidDocumentBuilder { private id: string; private context: string; diff --git a/src/identity/hcs/did/hcs-did-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts similarity index 93% rename from src/identity/hcs/did/hcs-did-resolver.ts rename to src/identity/hcs/did/hcs-did-event-message-resolver.ts index 105aff4..7a029c7 100644 --- a/src/identity/hcs/did/hcs-did-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -8,9 +8,9 @@ import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; /** - * Resolves the DID from Hedera network. + * Resolves the DID Events from Hedera network. */ -export class HcsDidResolver { +export class HcsDidEventMessageResolver { /** * Default time to wait before finishing resolution and after the last message was received. */ @@ -34,7 +34,7 @@ export class HcsDidResolver { constructor(topicId: TopicId) { this.topicId = topicId; - this.noMoreMessagesTimeout = HcsDidResolver.DEFAULT_TIMEOUT; + this.noMoreMessagesTimeout = HcsDidEventMessageResolver.DEFAULT_TIMEOUT; this.lastMessageArrivalTime = Long.fromInt(Date.now()); } @@ -106,7 +106,7 @@ export class HcsDidResolver { * @param handler The results handler. * @return This resolver instance. */ - public whenFinished(handler: (input: HcsDidMessage[]) => void): HcsDidResolver { + public whenFinished(handler: (input: HcsDidMessage[]) => void): HcsDidEventMessageResolver { this.resultsHandler = handler; return this; } @@ -117,7 +117,7 @@ export class HcsDidResolver { * @param handler The error handler. * @return This resolver instance. */ - public onError(handler: (input: Error) => void): HcsDidResolver { + public onError(handler: (input: Error) => void): HcsDidEventMessageResolver { this.errorHandler = handler; return this; } @@ -129,7 +129,7 @@ export class HcsDidResolver { * @param timeout The timeout in milliseconds to wait for new messages from the topic. * @return This resolver instance. */ - public setTimeout(timeout: Long | number): HcsDidResolver { + public setTimeout(timeout: Long | number): HcsDidEventMessageResolver { this.noMoreMessagesTimeout = Long.fromValue(timeout); return this; } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 293fdd9..2de00b5 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -1,6 +1,6 @@ import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; import { - DidDocumentBase, + DidDocumentBuilder, DidMethodOperation, Hashing, HcsDidDidOwnerEvent, @@ -22,7 +22,7 @@ import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType, } from "./event/hcs-did-verification-relationship-event"; -import { HcsDidResolver } from "./hcs-did-resolver"; +import { HcsDidEventMessageResolver } from "./hcs-did-event-message-resolver"; export class HcsDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; @@ -103,11 +103,11 @@ export class HcsDid { } return new Promise((resolve, reject) => { - new HcsDidResolver(this.topicId) + new HcsDidEventMessageResolver(this.topicId) .setTimeout(3000) .whenFinished((messages) => { this.messages = messages; - resolve(new DidDocumentBase(this.identifier, this.messages)); + resolve(new DidDocumentBuilder(this.identifier, this.messages)); }) .onError((err) => { console.log(err); diff --git a/src/identity/hedera-did.ts b/src/identity/hedera-did.ts deleted file mode 100644 index 8608a05..0000000 --- a/src/identity/hedera-did.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { DidDocumentBase } from "./did-document-base"; -import { DidSyntax } from "./did-syntax"; - -export interface HederaDid { - // fromString(string): HederaDid; - toDid(): string; - generateDidDocument(): DidDocumentBase; - getNetwork(): string; - getMethod(): DidSyntax.Method; -} diff --git a/src/index.ts b/src/index.ts index 0c2abbd..997f478 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { DidDocumentBase } from "./identity/did-document-base"; +import { DidDocumentBuilder } from "./identity/did-document-builder"; import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; @@ -9,7 +9,7 @@ import { HcsDidVerificationMethodEvent } from "./identity/hcs/did/event/hcs-did- import { HcsDidVerificationRelationshipEvent } from "./identity/hcs/did/event/hcs-did-verification-relationship-event"; import { HcsDid } from "./identity/hcs/did/hcs-did"; import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; -import { HcsDidResolver } from "./identity/hcs/did/hcs-did-resolver"; +import { HcsDidEventMessageResolver } from "./identity/hcs/did/hcs-did-event-message-resolver"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; import { JsonClass } from "./identity/hcs/json-class"; @@ -19,7 +19,6 @@ import { MessageListener } from "./identity/hcs/message-listener"; import { MessageMode } from "./identity/hcs/message-mode"; import { MessageTransaction } from "./identity/hcs/message-transaction"; import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; -import { HederaDid } from "./identity/hedera-did"; import { ArraysUtils } from "./utils/arrays-utils"; import { Ed25519PubCodec } from "./utils/ed25519PubCodec"; import { Hashing } from "./utils/hashing"; @@ -28,7 +27,7 @@ import { Validator } from "./utils/validator"; export { ArraysUtils, - DidDocumentBase, + DidDocumentBuilder, DidDocumentJsonProperties, DidMethodOperation, DidParser, @@ -36,14 +35,13 @@ export { Hashing, HcsDid, HcsDidMessage, - HcsDidResolver, + HcsDidEventMessageResolver, HcsDidTopicListener, HcsDidTransaction, HcsDidDidOwnerEvent, HcsDidServiceEvent, HcsDidVerificationMethodEvent, HcsDidVerificationRelationshipEvent, - HederaDid, JsonClass, Message, MessageEnvelope, diff --git a/test/did-document-base.js b/test/did-document-base.js deleted file mode 100644 index 61c1a79..0000000 --- a/test/did-document-base.js +++ /dev/null @@ -1,142 +0,0 @@ -const { HcsDid, DidDocumentBase, DidDocumentJsonProperties, DidSyntax, HcsDidRootKey, Hashing } = require("../dist"); -const { TopicId } = require("@hashgraph/sdk"); -const { expect, assert } = require("chai"); - -const network = "testnet"; -const DID_TOPIC_ID = TopicId.fromString("0.0.2"); - -describe("DidDocumentBase", function () { - it("Test Serialization", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const root = JSON.parse(didJson); - - expect(root).to.have.keys([ - DidDocumentJsonProperties.CONTEXT, - DidDocumentJsonProperties.ID, - DidDocumentJsonProperties.VERIFICATION_METHOD, - DidDocumentJsonProperties.AUTHENTICATION, - ]); - assert.equal(root[DidDocumentJsonProperties.CONTEXT], DidSyntax.DID_DOCUMENT_CONTEXT); - assert.equal(root[DidDocumentJsonProperties.ID], did.toDid()); - - const didRootKey = root[DidDocumentJsonProperties.VERIFICATION_METHOD][0]; - assert.equal(didRootKey["type"], HcsDidRootKey.DID_ROOT_KEY_TYPE); - assert.equal(didRootKey[DidDocumentJsonProperties.ID], did.toDid() + HcsDidRootKey.DID_ROOT_KEY_NAME); - assert.equal(didRootKey["controller"], did.toDid()); - assert.equal(didRootKey["publicKeyMultibase"], Hashing.multibase.encode(privateKey.publicKey.toBytes())); - }); - - it("Test Deserialization", async function () { - const privateKey = HcsDid.generateDidRootKey(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID); - const doc = did.generateDidDocument(); - - const didJson = doc.toJSON(); - - const parsedDoc = DidDocumentBase.fromJson(didJson); - assert.equal(parsedDoc.getId(), doc.getId()); - - const didRootKey = parsedDoc.getDidRootKey(); - assert.exists(didRootKey); - assert.equal(didRootKey.getPublicKeyMultibase(), doc.getDidRootKey().getPublicKeyMultibase()); - assert.equal(didRootKey.getController(), doc.getDidRootKey().getController()); - assert.equal(didRootKey.getId(), doc.getDidRootKey().getId()); - assert.equal(didRootKey.getType(), doc.getDidRootKey().getType()); - }); - - it("Test Invalid Deserialization", async function () { - const didJson = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "verificationMethod":"invalidPublicKey",' + - ' "service": [' + - " {" + - ' "id":"did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - assert.throw(() => { - DidDocumentBase.fromJson(didJson); - }); - }); - - it("Test Incomplete Json Deserialization", async function () { - const didJsonMissingPublicKeys = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]" + - "}"; - - const didJsonMissingRootKey = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "publicKey": [' + - " {" + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#key-1",' + - ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - " }" + - " ]," + - ' "service": [' + - " {" + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - const didJsonMissingPublicKeyId = - "{" + - ' "@context": "https://www.w3.org/ns/did/v1",' + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345",' + - ' "authentication": [' + - ' "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#did-root-key"' + - " ]," + - ' "publicKey": [' + - " {" + - ' "type": "Ed25519VerificationKey2018",' + - ' "publicKeyMultibase": "z6MkH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"' + - " }" + - " ]," + - ' "service": [' + - " {" + - ' "id": "did:hedera:mainnet:z6Mk7Prd74ry1Uct87nZqL3ny7aR7Cg46JamVbJgk8azVgUm_1.5.23462345#vcs",' + - ' "type": "VerifiableCredentialService",' + - ' "serviceEndpoint": "https://example.com/vc/"' + - " }" + - " ]" + - "}"; - - let doc = DidDocumentBase.fromJson(didJsonMissingPublicKeys); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingRootKey); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - - doc = DidDocumentBase.fromJson(didJsonMissingPublicKeyId); - assert.exists(doc); - assert.notExists(doc.getDidRootKey()); - }); -}); diff --git a/test/did-document-builder.js b/test/did-document-builder.js new file mode 100644 index 0000000..80c0208 --- /dev/null +++ b/test/did-document-builder.js @@ -0,0 +1,8 @@ +const { HcsDid, DidDocumentBuilder, DidDocumentJsonProperties, DidSyntax, Hashing } = require("../dist"); +const { TopicId } = require("@hashgraph/sdk"); +const { expect, assert } = require("chai"); + +const network = "testnet"; +const DID_TOPIC_ID = TopicId.fromString("0.0.2"); + +describe("DidDocumentBuilder", function () {}); diff --git a/test/did/hcs-did-message.js b/test/did/hcs-did-message.js index a3c5b40..9068c74 100644 --- a/test/did/hcs-did-message.js +++ b/test/did/hcs-did-message.js @@ -1,5 +1,5 @@ const { encrypt, decrypt } = require("../aes-encryption-util"); -const { TopicId, PrivateKey } = require("@hashgraph/sdk"); +const { TopicId, PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } = require("../../dist"); const { assert } = require("chai"); @@ -8,97 +8,93 @@ const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); -xdescribe("HcsDidMessage", function () { - it("Test Valid Message", async function () { - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); - const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - assert.isTrue(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); - assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); - assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); - }); - - it("Test Encrypted Message", async function () { - const secret = "Secret encryption password"; - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter((m) => encrypt(m, secret))); - const encryptedSignedMsg = MessageEnvelope.fromJson( - ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), - HcsDidMessage - ); - assert.exists(encryptedSignedMsg); - assert.throw(() => { - encryptedSignedMsg.open(); - }); - const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); - assert.exists(decryptedMsg); - assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); - assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); - }); - - it("Test Invalid Did", async function () { - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - privateKey.sign(msg) - ); - const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - const differentDid = new HcsDid(network, PrivateKey.generate().publicKey, DID_TOPIC_ID1); - msg.did = differentDid.toDid(); - assert.isFalse(msg.isValid()); - }); - - it("Test Invalid Topic", async function () { - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - privateKey.sign(msg) - ); - const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - assert.isTrue(msg.isValid(DID_TOPIC_ID1)); - assert.isFalse(msg.isValid(DID_TOPIC_ID2)); - }); - - it("Test Missing Data", async function () { - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const operation = DidMethodOperation.CREATE; - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - privateKey.sign(msg) - ); - const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); - assert.isFalse(msg.isValid()); - msg = new HcsDidMessage(operation, validMsg.getDid(), null); - assert.isFalse(msg.isValid()); - assert.notExists(msg.getDidDocument()); - assert.exists(msg.getDid()); - assert.equal(operation, msg.getOperation()); - }); - - it("Test Invalid Signature", async function () { - const privateKey = PrivateKey.generate(); - const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - const doc = did.generateDidDocument(); - const didJson = doc.toJSON(); - const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - PrivateKey.generate().sign(msg) - ); - const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - assert.isFalse(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); - }); +describe("HcsDidMessage", function () { + // it("Test Valid Message", async function () { + // const client = Client.forTestnet(); + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid({privateKey: privateKey, client: client}); + // const doc = did.generateDidDocument(); + // const didJson = doc.toJSON(); + // const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); + // const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); + // const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); + // assert.isTrue(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); + // assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); + // assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); + // }); + // it("Test Encrypted Message", async function () { + // const secret = "Secret encryption password"; + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + // const doc = did.generateDidDocument(); + // const didJson = doc.toJSON(); + // const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); + // const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter((m) => encrypt(m, secret))); + // const encryptedSignedMsg = MessageEnvelope.fromJson( + // ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), + // HcsDidMessage + // ); + // assert.exists(encryptedSignedMsg); + // assert.throw(() => { + // encryptedSignedMsg.open(); + // }); + // const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); + // assert.exists(decryptedMsg); + // assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); + // assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); + // }); + // it("Test Invalid Did", async function () { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + // const doc = did.generateDidDocument(); + // const didJson = doc.toJSON(); + // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + // privateKey.sign(msg) + // ); + // const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + // const differentDid = new HcsDid(network, PrivateKey.generate().publicKey, DID_TOPIC_ID1); + // msg.did = differentDid.toDid(); + // assert.isFalse(msg.isValid()); + // }); + // it("Test Invalid Topic", async function () { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + // const doc = did.generateDidDocument(); + // const didJson = doc.toJSON(); + // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + // privateKey.sign(msg) + // ); + // const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + // assert.isTrue(msg.isValid(DID_TOPIC_ID1)); + // assert.isFalse(msg.isValid(DID_TOPIC_ID2)); + // }); + // it("Test Missing Data", async function () { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + // const doc = did.generateDidDocument(); + // const operation = DidMethodOperation.CREATE; + // const didJson = doc.toJSON(); + // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + // privateKey.sign(msg) + // ); + // const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); + // let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); + // assert.isFalse(msg.isValid()); + // msg = new HcsDidMessage(operation, validMsg.getDid(), null); + // assert.isFalse(msg.isValid()); + // assert.notExists(msg.getDidDocument()); + // assert.exists(msg.getDid()); + // assert.equal(operation, msg.getOperation()); + // }); + // it("Test Invalid Signature", async function () { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); + // const doc = did.generateDidDocument(); + // const didJson = doc.toJSON(); + // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => + // PrivateKey.generate().sign(msg) + // ); + // const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); + // assert.isFalse(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); + // }); }); From bd311e92184a3246573f0cd7573fae547250d4df Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 7 Feb 2022 17:54:15 +1100 Subject: [PATCH 046/133] changing it to jest test from mocha --- jest.config.js | 5 + jest.setup.js | 1 + package-lock.json | 13578 +++++++++++----- package.json | 95 +- test/aes-encryption-util.js | 22 - test/did-document-builder.js | 8 - test/did/hcs-did.js | 447 - .../did/hcs-did-message.test.ts} | 32 +- test/src/did/hcs-did.test.ts | 457 + .../{utils/hashing.js => src/hashing.test.ts} | 13 +- test/variables.js | 34 - 11 files changed, 10090 insertions(+), 4602 deletions(-) create mode 100644 jest.config.js create mode 100644 jest.setup.js delete mode 100644 test/aes-encryption-util.js delete mode 100644 test/did-document-builder.js delete mode 100644 test/did/hcs-did.js rename test/{did/hcs-did-message.js => src/did/hcs-did-message.test.ts} (85%) create mode 100644 test/src/did/hcs-did.test.ts rename test/{utils/hashing.js => src/hashing.test.ts} (55%) delete mode 100644 test/variables.js diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..24f6759 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: "ts-jest", + testEnviroment: "node", + setupFilesAfterEnv: ["./jest.setup.js"], +}; diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 0000000..09ffd35 --- /dev/null +++ b/jest.setup.js @@ -0,0 +1 @@ +jest.setTimeout(60000); diff --git a/package-lock.json b/package-lock.json index 5613bc8..ddf4569 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,4055 +1,9569 @@ { - "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "@hashgraph/sdk": "^2.0.20", - "js-base64": "^3.6.1", - "moment": "^2.29.1", - "multiformats": "^9.6.2", - "varint": "^6.0.0" - }, - "devDependencies": { - "@types/node": "^16.7.7", - "chai": "^4.3.4", - "mocha": "^9.0.1", - "nodemon": "^2.0.7", - "prettier": "2.5.1", - "typescript": "^4.3.2" - }, - "engines": { - "node": ">=16.13.1", - "npm": ">=8.1.2" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", - "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", - "dependencies": { - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@hashgraph/cryptography": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", - "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", - "dependencies": { - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "expo-crypto": "^9.2.0", - "expo-random": "^11.2.0", - "fastestsmallesttextencoderdecoder": "^1.0.22", - "js-base64": "^3.6.1", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@hashgraph/proto": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", - "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", - "dependencies": { - "protobufjs": "^6.11.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@hashgraph/sdk": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", - "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", - "dependencies": { - "@grpc/grpc-js": "^1.3.4", - "@hashgraph/cryptography": "^1.0.20", - "@hashgraph/proto": "1.1.9", - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "js-base64": "^3.6.1", - "long": "^4.0.0", - "protobufjs": "^6.11.2", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/crypto-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", - "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" - }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/node": { - "version": "16.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", - "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" - }, - "node_modules/@types/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "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-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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==", - "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/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/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/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/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/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/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "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-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "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/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/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/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/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": 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/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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-crypto": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", - "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" - }, - "node_modules/expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", - "dependencies": { - "base64-js": "^1.3.0" - } - }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "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/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "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-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "dependencies": { - "ini": "1.3.7" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "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==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "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-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "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/js-base64": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", - "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "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" - }, - "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/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.23", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/multiformats": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", - "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" - }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/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, - "bin": { - "semver": "bin/semver.js" - } - }, - "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, - "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/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "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/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.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" + "name": "@hashgraph/did-sdk-js", + "version": "0.1.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@hashgraph/did-sdk-js", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@hashgraph/sdk": "^2.0.20", + "js-base64": "^3.6.1", + "moment": "^2.29.1", + "multiformats": "^9.6.2", + "varint": "^6.0.0" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "@types/node": "^16.7.7", + "jest": "^27.5.0", + "nodemon": "^2.0.7", + "prettier": "2.5.1", + "ts-jest": "^27.1.3", + "typescript": "^4.3.2" + }, + "engines": { + "node": ">=16.13.1", + "npm": ">=8.1.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "dev": 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, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/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, + "engines": { + "node": ">=0.10.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, + "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, + "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, + "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, + "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, + "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, + "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, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": 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.16.7", + "@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, + "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, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "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, + "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, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "dev": 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, + "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, + "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, + "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, + "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 + }, + "node_modules/@babel/highlight/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/@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, + "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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": 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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.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, + "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-typescript": { + "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.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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, + "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.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@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.0", + "@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, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@grpc/grpc-js": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", + "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "dependencies": { + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@hashgraph/cryptography": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", + "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", + "dependencies": { + "@types/crypto-js": "^4.0.2", + "@types/utf8": "^3.0.0", + "bignumber.js": "^9.0.1", + "crypto-js": "^4.0.0", + "expo-crypto": "^9.2.0", + "expo-random": "^11.2.0", + "fastestsmallesttextencoderdecoder": "^1.0.22", + "js-base64": "^3.6.1", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hashgraph/proto": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", + "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", + "dependencies": { + "protobufjs": "^6.11.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hashgraph/sdk": { + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", + "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", + "dependencies": { + "@grpc/grpc-js": "^1.3.4", + "@hashgraph/cryptography": "^1.0.20", + "@hashgraph/proto": "1.1.9", + "@types/crypto-js": "^4.0.2", + "@types/utf8": "^3.0.0", + "bignumber.js": "^9.0.1", + "crypto-js": "^4.0.0", + "js-base64": "^3.6.1", + "long": "^4.0.0", + "protobufjs": "^6.11.2", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", + "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.0", + "jest-util": "^27.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", + "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.0", + "@jest/reporters": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.0", + "jest-config": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-resolve-dependencies": "^27.5.0", + "jest-runner": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "jest-watcher": "^27.5.0", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", + "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", + "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.0", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", + "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/types": "^27.5.0", + "expect": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", + "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", + "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", + "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", + "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-runtime": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", + "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.0", + "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.9", + "jest-haste-map": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-util": "^27.5.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", + "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", + "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "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" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "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", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "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" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", + "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "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", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "node_modules/@types/node": { + "version": "16.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", + "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" + }, + "node_modules/@types/prettier": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": 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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "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-escapes/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/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/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/babel-jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", + "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "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": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", + "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", + "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.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==", + "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/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/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/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/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "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/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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 + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/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/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001308", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001308.tgz", + "integrity": "sha512-cUXbmSTlfG54vdGeA7guriSSAmzyxMWoHNN/DzQWbaLkDlcxrTu0Ox+dA4f8J8/SDXes00oC6iTx+watQYoVfA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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/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/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/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "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 + }, + "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/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/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/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": 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/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "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/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", + "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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/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/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", + "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expo-crypto": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", + "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" + }, + "node_modules/expo-random": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", + "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", + "dependencies": { + "base64-js": "^1.3.0" + } + }, + "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 + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "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-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "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", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "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-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "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/istanbul-lib-coverage": { + "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": "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.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": { + "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", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "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", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.0", + "import-local": "^3.0.2", + "jest-cli": "^27.5.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", + "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", + "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", + "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", + "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.0", + "@jest/types": "^27.5.0", + "babel-jest": "^27.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.0", + "jest-environment-jsdom": "^27.5.0", + "jest-environment-node": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-jasmine2": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-runner": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/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/jest-diff": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", + "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", + "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", + "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", + "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", + "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", + "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", + "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.0", + "jest-serializer": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", + "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/source-map": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", + "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", + "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", + "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", + "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", + "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", + "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", + "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-snapshot": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", + "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.0", + "@jest/environment": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.0", + "jest-environment-jsdom": "^27.5.0", + "jest-environment-node": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-leak-detector": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", + "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/globals": "^27.5.0", + "@jest/source-map": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-mock": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "slash": "^3.0.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.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", + "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "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.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", + "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@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.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-util": "^27.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.0", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/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/jest-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", + "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/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/jest-validate": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", + "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.0", + "leven": "^3.1.0", + "pretty-format": "^27.5.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", + "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-base64": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", + "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" + }, + "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 + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": 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, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "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, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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.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/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "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", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "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.5" + } + }, + "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/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "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/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "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" + }, + "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/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/multiformats": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", + "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/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/nodemon/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "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/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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, + "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/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/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", + "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/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/prompts": { + "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", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "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/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.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/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "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/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "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/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/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "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-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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/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", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-jest": { + "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.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@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" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/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/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", + "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/undefsafe/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/undefsafe/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/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/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/v8-to-istanbul": { + "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", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "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.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } } - ] - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/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, - "bin": { - "semver": "bin/semver.js" - } - }, - "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, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": "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/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/undefsafe/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/undefsafe/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/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/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "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/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, - "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/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@grpc/grpc-js": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", - "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", - "requires": { - "@types/node": ">=12.12.47" - } - }, - "@hashgraph/cryptography": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", - "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", - "requires": { - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "expo-crypto": "^9.2.0", - "expo-random": "^11.2.0", - "fastestsmallesttextencoderdecoder": "^1.0.22", - "js-base64": "^3.6.1", - "tweetnacl": "^1.0.3" - } - }, - "@hashgraph/proto": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", - "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", - "requires": { - "protobufjs": "^6.11.2" - } - }, - "@hashgraph/sdk": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", - "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", - "requires": { - "@grpc/grpc-js": "^1.3.4", - "@hashgraph/cryptography": "^1.0.20", - "@hashgraph/proto": "1.1.9", - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "js-base64": "^3.6.1", - "long": "^4.0.0", - "protobufjs": "^6.11.2", - "utf8": "^3.0.0" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/crypto-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", - "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/node": { - "version": "16.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", - "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" - }, - "@types/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { + "dependencies": { + "@ampproject/remapping": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "dev": 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, + "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 + }, + "@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@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 + } + } + }, + "@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@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, + "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 + } + } + }, + "@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, + "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, + "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, + "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, + "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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": 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.16.7", + "@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 + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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, + "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 + }, + "@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 + }, + "@babel/helpers": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "dev": 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, + "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, + "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, + "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, + "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 + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": 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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "dev": true + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": 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, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "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, + "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, + "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, + "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, + "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, + "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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "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.16.7" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@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.0", + "@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, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@grpc/grpc-js": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", + "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "requires": { + "@types/node": ">=12.12.47" + } + }, + "@hashgraph/cryptography": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", + "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", + "requires": { + "@types/crypto-js": "^4.0.2", + "@types/utf8": "^3.0.0", + "bignumber.js": "^9.0.1", + "crypto-js": "^4.0.0", + "expo-crypto": "^9.2.0", + "expo-random": "^11.2.0", + "fastestsmallesttextencoderdecoder": "^1.0.22", + "js-base64": "^3.6.1", + "tweetnacl": "^1.0.3" + } + }, + "@hashgraph/proto": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", + "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", + "requires": { + "protobufjs": "^6.11.2" + } + }, + "@hashgraph/sdk": { + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", + "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", + "requires": { + "@grpc/grpc-js": "^1.3.4", + "@hashgraph/cryptography": "^1.0.20", + "@hashgraph/proto": "1.1.9", + "@types/crypto-js": "^4.0.2", + "@types/utf8": "^3.0.0", + "bignumber.js": "^9.0.1", + "crypto-js": "^4.0.0", + "js-base64": "^3.6.1", + "long": "^4.0.0", + "protobufjs": "^6.11.2", + "utf8": "^3.0.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "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, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", + "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.0", + "jest-util": "^27.5.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", + "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", + "dev": true, + "requires": { + "@jest/console": "^27.5.0", + "@jest/reporters": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.0", + "jest-config": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-resolve-dependencies": "^27.5.0", + "jest-runner": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "jest-watcher": "^27.5.0", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", + "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0" + } + }, + "@jest/fake-timers": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", + "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.0", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0" + } + }, + "@jest/globals": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", + "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/types": "^27.5.0", + "expect": "^27.5.0" + } + }, + "@jest/reporters": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", + "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", + "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", + "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", + "dev": true, + "requires": { + "@jest/console": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", + "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-runtime": "^27.5.0" + } + }, + "@jest/transform": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", + "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.0", + "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.9", + "jest-haste-map": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-util": "^27.5.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", + "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", + "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "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" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/babel__core": { + "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", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "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" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/crypto-js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", + "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "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", + "pretty-format": "^27.0.0" + } + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "@types/node": { + "version": "16.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", + "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" + }, + "@types/prettier": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": 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 + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "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" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "babel-jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", + "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", + "dev": true, + "requires": { + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "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": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", + "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", + "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.0", + "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==", + "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==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "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 + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "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" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001308", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001308.tgz", + "integrity": "sha512-cUXbmSTlfG54vdGeA7guriSSAmzyxMWoHNN/DzQWbaLkDlcxrTu0Ox+dA4f8J8/SDXes00oC6iTx+watQYoVfA==", + "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" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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 + }, + "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" + } + }, + "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 + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "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, + "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 + } + } + }, + "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" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "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 + } + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "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 + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "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 + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", + "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": 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 + }, + "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" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": 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 + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expect": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", + "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0" + } + }, + "expo-crypto": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", + "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" + }, + "expo-random": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", + "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", + "requires": { + "base64-js": "^1.3.0" + } + }, + "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 + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "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 + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "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 + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "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-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "import-local": { + "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", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "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-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "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-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "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 + }, + "istanbul-lib-coverage": { + "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": "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.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "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 + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.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" + } + } + } + }, + "istanbul-lib-source-maps": { + "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", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "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", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", + "dev": true, + "requires": { + "@jest/core": "^27.5.0", + "import-local": "^3.0.2", + "jest-cli": "^27.5.0" + } + }, + "jest-changed-files": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", + "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", + "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", + "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", + "dev": true, + "requires": { + "@jest/core": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", + "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.0", + "@jest/types": "^27.5.0", + "babel-jest": "^27.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.0", + "jest-environment-jsdom": "^27.5.0", + "jest-environment-node": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-jasmine2": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-runner": "^27.5.0", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.0", + "slash": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "jest-diff": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", + "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + } + }, + "jest-docblock": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", + "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", + "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0" + } + }, + "jest-environment-jsdom": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", + "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", + "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "jest-mock": "^27.5.0", + "jest-util": "^27.5.0" + } + }, + "jest-get-type": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", + "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", + "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "@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.9", + "jest-regex-util": "^27.5.0", + "jest-serializer": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", + "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/source-map": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "pretty-format": "^27.5.0", + "throat": "^6.0.1" + } + }, + "jest-leak-detector": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", + "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", + "dev": true, + "requires": { + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + } + }, + "jest-matcher-utils": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", + "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + } + }, + "jest-message-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", + "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", + "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", + "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==", + "dev": true + }, + "jest-resolve": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", + "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.0", + "jest-validate": "^27.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", + "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-snapshot": "^27.5.0" + } + }, + "jest-runner": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", + "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.0", + "@jest/environment": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.0", + "jest-environment-jsdom": "^27.5.0", + "jest-environment-node": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-leak-detector": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-runtime": "^27.5.0", + "jest-util": "^27.5.0", + "jest-worker": "^27.5.0", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", + "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.0", + "@jest/fake-timers": "^27.5.0", + "@jest/globals": "^27.5.0", + "@jest/source-map": "^27.5.0", + "@jest/test-result": "^27.5.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-mock": "^27.5.0", + "jest-regex-util": "^27.5.0", + "jest-resolve": "^27.5.0", + "jest-snapshot": "^27.5.0", + "jest-util": "^27.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-serializer": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", + "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", + "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.0", + "@jest/types": "^27.5.0", + "@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.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.0", + "jest-get-type": "^27.5.0", + "jest-haste-map": "^27.5.0", + "jest-matcher-utils": "^27.5.0", + "jest-message-util": "^27.5.0", + "jest-util": "^27.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.0", + "semver": "^7.3.2" + }, + "dependencies": { + "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" + } + } + } + }, + "jest-util": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", + "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "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 + } + } + }, + "jest-validate": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", + "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "dev": true, + "requires": { + "@jest/types": "^27.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.0", + "leven": "^3.1.0", + "pretty-format": "^27.5.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", + "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.0", + "@jest/types": "^27.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "js-base64": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", + "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" + }, + "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 + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "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, + "requires": { + "minimist": "^1.2.5" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "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 + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "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, + "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 + } + } + }, + "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 + }, + "makeerror": { + "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.5" + } + }, + "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 + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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 + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "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" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "multiformats": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", + "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "nodemon": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "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" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": 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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": 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" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "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" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "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 + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.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 + } + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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 + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pirates": { + "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", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "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, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "pretty-format": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", + "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "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 + } + } + }, + "prompts": { + "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", + "sisteransi": "^1.0.5" + } + }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, + "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 + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "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 + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "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" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "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 + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "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" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "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 + } + } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "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.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "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-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "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==" - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } }, - "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" - } - } - } - }, - "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" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "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" - } + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "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 }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "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-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.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 - }, - "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 - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "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 - } - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": 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 - }, - "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" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "expo-crypto": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", - "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" - }, - "expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", - "requires": { - "base64-js": "^1.3.0" - } - }, - "fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "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 - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "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-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "requires": { - "ini": "1.3.7" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "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 - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "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": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "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-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "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 - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "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 - }, - "js-base64": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", - "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "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" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "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, - "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 - } - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "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" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.23", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "multiformats": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", - "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" - }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, - "nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", - "dev": true, - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "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" - } + "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" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.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" + } + } + } }, - "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, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.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 - } - } - }, - "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 - }, - "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 - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "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" - } - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.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 - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "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 - } - } - }, - "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, - "requires": { - "randombytes": "^2.1.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "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": "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" - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true - }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.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 }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "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" - } - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "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" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, - "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 - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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 + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "ts-jest": { + "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.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "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" + } + } + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", + "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", + "dev": true + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "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 + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "v8-to-istanbul": { + "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", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "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 + } + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "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.12" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "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" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "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 + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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 + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } - } } diff --git a/package.json b/package.json index 0f3ae1e..1286277 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,50 @@ { - "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", - "engines": { - "npm": ">=8.1.2", - "node": ">=16.13.1" - }, - "description": "Support for the Hedera Hashgraph DID Method and Verifiable Credentials on the Hedera JavaScript/TypeScript SDK", - "main": "dist/index.js", - "module": "dist/index.js", - "files": [ - "dist/**/*" - ], - "types": "dist/index.d.ts", - "scripts": { - "prepare": "npm run build", - "prepublish": "npm run build", - "build": "tsc", - "build:dev": "tsc --sourceMap -w", - "start": "node dist/index.js", - "start:dev": "nodemon --inspect dist/index.js", - "test": "mocha test/**/*.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/hashgraph/did-sdk-js.git" - }, - "author": "Hedera Hashgraph, LLC", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/hashgraph/did-sdk-js/issues" - }, - "homepage": "https://github.com/hashgraph/did-sdk-js#readme", - "devDependencies": { - "@types/node": "^16.7.7", - "chai": "^4.3.4", - "mocha": "^9.0.1", - "nodemon": "^2.0.7", - "prettier": "2.5.1", - "typescript": "^4.3.2" - }, - "dependencies": { - "@hashgraph/sdk": "^2.0.20", - "js-base64": "^3.6.1", - "moment": "^2.29.1", - "multiformats": "^9.6.2", - "varint": "^6.0.0" - } + "name": "@hashgraph/did-sdk-js", + "version": "0.1.1", + "engines": { + "npm": ">=8.1.2", + "node": ">=16.13.1" + }, + "description": "Support for the Hedera Hashgraph DID Method and Verifiable Credentials on the Hedera JavaScript/TypeScript SDK", + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist/**/*" + ], + "types": "dist/index.d.ts", + "scripts": { + "prepare": "npm run build", + "prepublish": "npm run build", + "build": "tsc", + "build:dev": "tsc --sourceMap -w", + "start": "node dist/index.js", + "start:dev": "nodemon --inspect dist/index.js", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/hashgraph/did-sdk-js.git" + }, + "author": "Hedera Hashgraph, LLC", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/hashgraph/did-sdk-js/issues" + }, + "homepage": "https://github.com/hashgraph/did-sdk-js#readme", + "devDependencies": { + "@types/jest": "^27.4.0", + "@types/node": "^16.7.7", + "jest": "^27.5.0", + "nodemon": "^2.0.7", + "prettier": "2.5.1", + "ts-jest": "^27.1.3", + "typescript": "^4.3.2" + }, + "dependencies": { + "@hashgraph/sdk": "^2.0.20", + "js-base64": "^3.6.1", + "moment": "^2.29.1", + "multiformats": "^9.6.2", + "varint": "^6.0.0" + } } diff --git a/test/aes-encryption-util.js b/test/aes-encryption-util.js deleted file mode 100644 index e40b4e3..0000000 --- a/test/aes-encryption-util.js +++ /dev/null @@ -1,22 +0,0 @@ -const crypto = require("crypto"); - -const encrypt = function (plainText, key, outputEncoding = "base64") { - const cipher = crypto.createCipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(plainText, "utf8"), cipher.final()]).toString(outputEncoding); -}; - -const decrypt = function (cipherText, key, outputEncoding = "utf8") { - const cipher = crypto.createDecipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(cipherText, "base64"), cipher.final()]).toString(outputEncoding); -}; - -exports.encrypt = encrypt; -exports.decrypt = decrypt; diff --git a/test/did-document-builder.js b/test/did-document-builder.js deleted file mode 100644 index 80c0208..0000000 --- a/test/did-document-builder.js +++ /dev/null @@ -1,8 +0,0 @@ -const { HcsDid, DidDocumentBuilder, DidDocumentJsonProperties, DidSyntax, Hashing } = require("../dist"); -const { TopicId } = require("@hashgraph/sdk"); -const { expect, assert } = require("chai"); - -const network = "testnet"; -const DID_TOPIC_ID = TopicId.fromString("0.0.2"); - -describe("DidDocumentBuilder", function () {}); diff --git a/test/did/hcs-did.js b/test/did/hcs-did.js deleted file mode 100644 index af668dd..0000000 --- a/test/did/hcs-did.js +++ /dev/null @@ -1,447 +0,0 @@ -const { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } = require("@hashgraph/sdk"); -const { OPERATOR_KEY, OPERATOR_ID, NETWORK } = require("../variables"); -const { HcsDid, Hashing } = require("../../dist"); - -const { assert } = require("chai"); - -const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; -const MINUTE_TIMEOUT_LIMIT = 60000; -const READ_MESSAGES_TIMEOUT = 5000; - -describe("HcsDid", function () { - describe("#constructor", () => { - it("throws error because of missing identifier and privateKey", () => { - assert.throw(() => { - new HcsDid({}); - }); - }); - - it("successfuly builds HcsDid with private key only", () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - assert.equal(did.getIdentifier(), null); - assert.equal(did.getPrivateKey(), privateKey); - assert.equal(did.getClient(), null); - assert.equal(did.getTopicId(), null); - assert.equal(did.getNetwork(), null); - }); - - it("successfuly builds HcsDid with identifier only", () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - assert.equal(did.getIdentifier(), identifier); - assert.equal(did.getPrivateKey(), null); - assert.equal(did.getClient(), null); - assert.equal(did.getTopicId(), "0.0.29613327"); - assert.equal(did.getNetwork(), "testnet"); - }); - - it("throws error if passed identifer is invalid", () => { - [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ].forEach((identifier) => { - assert.throw(() => { - new HcsDid({ identifier }); - }); - }); - }); - - it("accepts client parameter", () => { - const client = Client.forTestnet(); - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier, client }); - - assert.equal(did.getIdentifier(), identifier); - assert.equal(did.getPrivateKey(), null); - assert.equal(did.getClient(), client); - assert.equal(did.getTopicId(), "0.0.29613327"); - assert.equal(did.getNetwork(), "testnet"); - }); - }); - - describe("#register", async () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if DID is already registered", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.register(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "DID is already registered"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.register(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("creates new DID by registering a topic and submitting first message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - const result = await did.register(); - - assert.equal(result, did); - assert.match(did.getTopicId().toString(), TOPIC_REGEXP); - assert.equal( - did.getIdentifier(), - `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did - .getTopicId() - .toString()}` - ); - assert.equal(did.getPrivateKey(), privateKey); - assert.equal(did.getClient(), client); - assert.equal(did.getNetwork(), "testnet"); - - const messages = await readtTopicMessages(did.getTopicId(), client); - - assert.equal(messages.length, 1); - }).timeout(MINUTE_TIMEOUT_LIMIT); - }); - - describe("#resolve", () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error about unregistered DID", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.resolve(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "DID is not registered"); - } - }); - - it("throws error about missing Client parameter", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.resolve(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("successfuly resolves just registered DID", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - await did.register(); - - const didDocument = (await did.resolve()).toJsonTree(); - - assert.equal(didDocument["@context"], "https://www.w3.org/ns/did/v1"); - assert.equal(didDocument["id"], did.getIdentifier()); - assert.equal(didDocument["assertionMethod"].length, 1); - assert.equal(didDocument["assertionMethod"][0], `${did.getIdentifier()}#did-root-key`); - assert.equal(didDocument["authentication"].length, 1); - assert.equal(didDocument["authentication"][0], `${did.getIdentifier()}#did-root-key`); - assert.equal(didDocument["verificationMethod"].length, 1); - assert.deepEqual(didDocument["verificationMethod"][0], { - id: `${did.getIdentifier()}#did-root-key`, - type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), - }); - }).timeout(MINUTE_TIMEOUT_LIMIT); - }); - - describe("Add Service meta-information", async () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if privatekey is missing", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.addService({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "privateKey is missing"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.addService({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("throws error if Service arguments are missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.addService(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Service args are missing"); - } - }); - - it("publish a new Service message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - await ( - await did.register() - ).addService({ - id: did.getIdentifier(), - type: "LinkedDomains", - serviceEndpoint: "https://test.meeco.me/vcs", - }); - - /** - * wait for 9s so didowner and service event to be propogated to mirror node - */ - await new Promise((resolve) => setTimeout(resolve, 9000)); - - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - const messages = await readtTopicMessages(did.getTopicId(), client); - - // DIDOwner and Service event - assert.equal(messages.length, 2); - }).timeout(MINUTE_TIMEOUT_LIMIT); - }); - - describe("Add VerificationMethod meta-information", async () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if privatekey is missing", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.addVerificaitonMethod({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "privateKey is missing"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.addVerificaitonMethod({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("throws error if Verification Method arguments are missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.addVerificaitonMethod(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Verification Method args are missing"); - } - }); - - it("publish a new VerificationMethod message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - //new verificaiton DID and publickey - const newVerificaitonDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - - await ( - await did.register() - ).addVerificaitonMethod({ - id: newVerificaitonDid, - type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, - }); - - /** - * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node - */ - await new Promise((resolve) => setTimeout(resolve, 9000)); - - console.log(`${did.getIdentifier()}`); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - const messages = await readtTopicMessages(did.getTopicId(), client); - - // DIDOwner and VerificationMethod event - assert.equal(messages.length, 2); - }).timeout(MINUTE_TIMEOUT_LIMIT); - }); - - describe("Add VerificationMethod Relationship meta-information", async () => { - let client; - - before(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if privatekey is missing", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.addVerificaitonMethod({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "privateKey is missing"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.addVerificaitonMethod({}); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Client configuration is missing"); - } - }); - - it("throws error if Verification Relationship arguments are missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.addVerificaitonRelationship(); - } catch (err) { - assert.instanceOf(err, Error); - assert.equal(err.message, "Verification Relationship args are missing"); - } - }); - - it("publish a new VerificationRelationship message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - //new verificaiton DID and publickey - const newVerificaitonDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#delegate-key1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - - await ( - await did.register() - ).addVerificaitonRelationship({ - id: newVerificaitonDid, - relationshipType: "authentication", - type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, - }); - - /** - * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node - */ - await new Promise((resolve) => setTimeout(resolve, 9000)); - - console.log(`${did.getIdentifier()}`); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - const messages = await readtTopicMessages(did.getTopicId(), client); - - // DIDOwner and VerificationMethod event - assert.equal(messages.length, 2); - }).timeout(MINUTE_TIMEOUT_LIMIT); - }); -}); - -/** - * Test Helpers - */ - -async function readtTopicMessages(topicId, client) { - const messages = []; - - new TopicMessageQuery() - .setTopicId(topicId) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, (msg) => { - messages.push(msg); - }); - - /** - * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, READ_MESSAGES_TIMEOUT)); - - return messages; -} diff --git a/test/did/hcs-did-message.js b/test/src/did/hcs-did-message.test.ts similarity index 85% rename from test/did/hcs-did-message.js rename to test/src/did/hcs-did-message.test.ts index 9068c74..51334de 100644 --- a/test/did/hcs-did-message.js +++ b/test/src/did/hcs-did-message.test.ts @@ -1,14 +1,36 @@ -const { encrypt, decrypt } = require("../aes-encryption-util"); -const { TopicId, PrivateKey, Client } = require("@hashgraph/sdk"); -const { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } = require("../../dist"); - -const { assert } = require("chai"); +import crypto from "crypto"; +import { TopicId, PrivateKey, Client } from "@hashgraph/sdk"; +import { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } from "../../../dist"; const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); +const encrypt = (plainText, key) => { + const cipher = crypto.createCipheriv( + "aes-128-ecb", + crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), + null + ); + return Buffer.concat([cipher.update(plainText, "utf8"), cipher.final()]).toString("base64"); +}; + +const decrypt = (cipherText, key) => { + const cipher = crypto.createDecipheriv( + "aes-128-ecb", + crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), + null + ); + return Buffer.concat([cipher.update(cipherText, "base64"), cipher.final()]).toString("utf8"); +}; + +exports.encrypt = encrypt; +exports.decrypt = decrypt; + describe("HcsDidMessage", function () { + it("test", () => { + expect(true).toBeTruthy(); + }); // it("Test Valid Message", async function () { // const client = Client.forTestnet(); // const privateKey = PrivateKey.generate(); diff --git a/test/src/did/hcs-did.test.ts b/test/src/did/hcs-did.test.ts new file mode 100644 index 0000000..3a24e63 --- /dev/null +++ b/test/src/did/hcs-did.test.ts @@ -0,0 +1,457 @@ +import { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; + +import { HcsDid, Hashing } from "../../../dist"; + +const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; +const OPERATOR_ID = "0.0.12710106"; +const OPERATOR_KEY = "302e020100300506032b657004220420bc45334a1313725653d3513fcc67edb15f76985f537ca567e2177b0be9906d49"; +// testnet, previewnet, mainnet +const NETWORK = "testnet"; + +// hedera, kabuto (note kabuto not available on previewnet) +const MIRROR_PROVIDER = "hedera"; + +describe("HcsDid", function () { + describe("#constructor", () => { + it("throws error because of missing identifier and privateKey", () => { + expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); + }); + + it("successfuly builds HcsDid with private key only", () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + expect(did.getIdentifier()).toEqual(undefined); + expect(did.getPrivateKey()).toEqual(privateKey); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId()).toEqual(undefined); + expect(did.getNetwork()).toEqual(undefined); + }); + + it("successfuly builds HcsDid with identifier only", () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + + it("throws error if passed identifer is invalid", () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((identifier) => { + expect(() => { + new HcsDid({ identifier }); + }).toThrowError(); + }); + }); + + it("accepts client parameter", () => { + const client = Client.forTestnet(); + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, client }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(client); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + }); + + describe("#register", () => { + let client; + + beforeAll(() => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if DID is already registered", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.register(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("DID is already registered"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.register(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("creates new DID by registering a topic and submitting first message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + const result = await did.register(); + + expect(result).toEqual(did); + + expect(did.getTopicId().toString()).toMatch(TOPIC_REGEXP); + expect(did.getIdentifier()).toEqual( + `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did + .getTopicId() + .toString()}` + ); + expect(did.getPrivateKey()).toEqual(privateKey); + expect(did.getClient()).toEqual(client); + expect(did.getNetwork()).toEqual("testnet"); + + /** + * TODO: FIX ME + */ + // const messages = await readtTopicMessages(did.getTopicId(), client); + + // expect(messages.length).toEqual(1); + }); + }); + + describe("#resolve", () => { + let client; + + beforeAll(() => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error about unregistered DID", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.resolve(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("DID is not registered"); + } + }); + + it("throws error about missing Client parameter", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.resolve(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("successfuly resolves just registered DID", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + + const newLocal: any = await did.resolve(); + const didDocument = newLocal.toJsonTree(); + + expect(didDocument["@context"]).toEqual("https://www.w3.org/ns/did/v1"); + expect(didDocument["id"]).toEqual(did.getIdentifier()); + expect(didDocument["assertionMethod"].length).toEqual(1); + expect(didDocument["assertionMethod"][0]).toEqual(`${did.getIdentifier()}#did-root-key`); + expect(didDocument["authentication"].length).toEqual(1); + expect(didDocument["authentication"][0]).toEqual(`${did.getIdentifier()}#did-root-key`); + expect(didDocument["verificationMethod"].length).toEqual(1); + expect(didDocument["verificationMethod"][0]).toStrictEqual({ + id: `${did.getIdentifier()}#did-root-key`, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + }); + }); + }); + + describe("Add Service meta-information", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("throws error if Service arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("Service args are missing"); + } + }); + + it("publish a new Service message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + await ( + await did.register() + ).addService({ + id: did.getIdentifier(), + type: "LinkedDomains", + serviceEndpoint: "https://test.meeco.me/vcs", + }); + + /** + * wait for 9s so didowner and service event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const messages = await readtTopicMessages(did.getTopicId(), client); + + // DIDOwner and Service event + expect(messages.length).toEqual(2); + }); + }); + + // describe("Add VerificationMethod meta-information", async () => { + // let client; + + // before(async () => { + // const operatorId = AccountId.fromString(OPERATOR_ID); + // const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + // client = Client.forTestnet(); + // client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + // client.setOperator(operatorId, operatorKey); + // }); + + // it("throws error if privatekey is missing", async () => { + // const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + // const did = new HcsDid({ identifier }); + + // try { + // await did.addVerificaitonMethod({}); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "privateKey is missing"); + // } + // }); + + // it("throws error if client configuration is missing", async () => { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid({ privateKey }); + + // try { + // await did.addVerificaitonMethod({}); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "Client configuration is missing"); + // } + // }); + + // it("throws error if Verification Method arguments are missing", async () => { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid({ privateKey, client }); + + // try { + // await did.addVerificaitonMethod(); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "Verification Method args are missing"); + // } + // }); + + // it("publish a new VerificationMethod message", async () => { + // const privateKey = PrivateKey.fromString(OPERATOR_KEY); + // const did = new HcsDid({ privateKey, client }); + + // //new verificaiton DID and publickey + // const newVerificaitonDid = + // "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0"; + // const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + // await ( + // await did.register() + // ).addVerificaitonMethod({ + // id: newVerificaitonDid, + // type: "Ed25519VerificationKey2018", + // controller: did.getIdentifier(), + // publicKey, + // }); + + // /** + // * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + // */ + // await new Promise((resolve) => setTimeout(resolve, 9000)); + + // console.log(`${did.getIdentifier()}`); + // console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + // const messages = await readtTopicMessages(did.getTopicId(), client); + + // // DIDOwner and VerificationMethod event + // assert.equal(messages.length, 2); + // }).timeout(MINUTE_TIMEOUT_LIMIT); + // }); + + // describe("Add VerificationMethod Relationship meta-information", async () => { + // let client; + + // before(async () => { + // const operatorId = AccountId.fromString(OPERATOR_ID); + // const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + // client = Client.forTestnet(); + // client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); + // client.setOperator(operatorId, operatorKey); + // }); + + // it("throws error if privatekey is missing", async () => { + // const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + // const did = new HcsDid({ identifier }); + + // try { + // await did.addVerificaitonMethod({}); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "privateKey is missing"); + // } + // }); + + // it("throws error if client configuration is missing", async () => { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid({ privateKey }); + + // try { + // await did.addVerificaitonMethod({}); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "Client configuration is missing"); + // } + // }); + + // it("throws error if Verification Relationship arguments are missing", async () => { + // const privateKey = PrivateKey.generate(); + // const did = new HcsDid({ privateKey, client }); + + // try { + // await did.addVerificaitonRelationship(); + // } catch (err) { + // assert.instanceOf(err, Error); + // assert.equal(err.message, "Verification Relationship args are missing"); + // } + // }); + + // it("publish a new VerificationRelationship message", async () => { + // const privateKey = PrivateKey.fromString(OPERATOR_KEY); + // const did = new HcsDid({ privateKey, client }); + + // //new verificaiton DID and publickey + // const newVerificaitonDid = + // "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#delegate-key1"; + // const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + // await ( + // await did.register() + // ).addVerificaitonRelationship({ + // id: newVerificaitonDid, + // relationshipType: "authentication", + // type: "Ed25519VerificationKey2018", + // controller: did.getIdentifier(), + // publicKey, + // }); + + // /** + // * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + // */ + // await new Promise((resolve) => setTimeout(resolve, 9000)); + + // console.log(`${did.getIdentifier()}`); + // console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + // const messages = await readtTopicMessages(did.getTopicId(), client); + + // // DIDOwner and VerificationMethod event + // assert.equal(messages.length, 2); + // }).timeout(MINUTE_TIMEOUT_LIMIT); + // }); +}); + +/** + * Test Helpers + */ + +async function readtTopicMessages(topicId, client) { + const messages = []; + + new TopicMessageQuery() + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, null, (msg) => { + messages.push(msg); + }); + + /** + * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, 60000)); + + return messages; +} diff --git a/test/utils/hashing.js b/test/src/hashing.test.ts similarity index 55% rename from test/utils/hashing.js rename to test/src/hashing.test.ts index adc4ef3..cd9dfef 100644 --- a/test/utils/hashing.js +++ b/test/src/hashing.test.ts @@ -1,9 +1,8 @@ -const { Hashing } = require("../../dist"); -const { expect } = require("chai"); -const { PrivateKey } = require("@hashgraph/sdk"); +import { Hashing } from "../../dist"; +import { PrivateKey } from "@hashgraph/sdk"; -describe("Util Multibase & Multicodec", function () { - it("Test Valid Multibase base58btc with ed25519 pub key encode", async function () { +describe("Util Multibase & Multicodec", () => { + it("Test Valid Multibase base58btc with ed25519 pub key encode", async () => { const privateKey = PrivateKey.generate(); const publickeybytes = privateKey.publicKey.toBytes(); @@ -11,7 +10,7 @@ describe("Util Multibase & Multicodec", function () { const decodedPublicKeyBytes = Hashing.multibase.decode(base58btcEncodedString); // z is for base58btc & 6Mk is for ed25519 pub key - expect(base58btcEncodedString.startsWith("z6Mk")).to.be.true; - expect(decodedPublicKeyBytes).to.deep.equal(publickeybytes); + expect(base58btcEncodedString.startsWith("z6Mk")).toBeTruthy(); + expect(decodedPublicKeyBytes).toStrictEqual(publickeybytes); }); }); diff --git a/test/variables.js b/test/variables.js deleted file mode 100644 index 4d31d36..0000000 --- a/test/variables.js +++ /dev/null @@ -1,34 +0,0 @@ -const OPERATOR_ID = process.env.OPERATOR_ID; -const OPERATOR_KEY = process.env.OPERATOR_KEY; -// testnet, previewnet, mainnet -const NETWORK = process.env.NETWORK || "testnet"; - -// hedera, kabuto (note kabuto not available on previewnet) -const MIRROR_PROVIDER = process.env.MIRROR_PROVIDER || "hedera"; - -if (!OPERATOR_ID || !/^\d+\.\d+\.\d+$/.test(OPERATOR_ID)) { - console.error("Missing or invalid OPERATOR_ID"); - process.exit(1); -} - -if (!OPERATOR_KEY) { - console.error("Missing required OPERATOR_KEY"); - process.exit(1); -} - -if (!NETWORK || !/^(mainnet|previewnet|testnet)$/.test(NETWORK)) { - console.error("Missing or invalid NETWORK"); - process.exit(1); -} - -if (!MIRROR_PROVIDER || !/^(hedera|kabuto)$/.test(MIRROR_PROVIDER)) { - console.error("Missing or invalid MIRROR_PROVIDER"); - process.exit(1); -} - -module.exports = { - OPERATOR_ID, - OPERATOR_KEY, - NETWORK, - MIRROR_PROVIDER, -}; From 5ad1792c9d0d05a78e315f94c344aff820b9c362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 7 Feb 2022 08:53:17 +0100 Subject: [PATCH 047/133] Fix jest configuration --- jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index 24f6759..db1e6ea 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,5 @@ module.exports = { preset: "ts-jest", - testEnviroment: "node", + testEnvironment: "node", setupFilesAfterEnv: ["./jest.setup.js"], }; From 91d7e8e13283a766b7ed8084c7ca97976d56298b Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Mon, 7 Feb 2022 18:43:27 +1100 Subject: [PATCH 048/133] fix demo --- demo/3_read_did_messages.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 75267f1..58c132b 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,5 +1,5 @@ const { Client } = require("@hashgraph/sdk"); -const { HcsDid, HcsDidResolver } = require("../dist"); +const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); const { TEST_DID_STR } = require("./config"); async function main() { @@ -16,7 +16,7 @@ async function main() { /** * Read DID resolver setup */ - new HcsDidResolver(did.getTopicId()) + new HcsDidEventMessageResolver(did.getTopicId()) .setTimeout(3000) .whenFinished((messages) => { messages.forEach((msg) => { From e37ee683f1695dc04880c056e48507e362b0cd6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 7 Feb 2022 11:42:35 +0100 Subject: [PATCH 049/133] Drop MessageMode; Code style fixes; Renamings --- ...id-document-builder.ts => did-document.ts} | 24 +++++----- src/identity/hcs/did/hcs-did.ts | 46 +++++++++---------- src/identity/hcs/message-envelope.ts | 9 ---- src/identity/hcs/message-listener.ts | 3 +- src/identity/hcs/message-mode.ts | 3 -- src/index.ts | 8 ++-- 6 files changed, 39 insertions(+), 54 deletions(-) rename src/identity/{did-document-builder.ts => did-document.ts} (83%) delete mode 100644 src/identity/hcs/message-mode.ts diff --git a/src/identity/did-document-builder.ts b/src/identity/did-document.ts similarity index 83% rename from src/identity/did-document-builder.ts rename to src/identity/did-document.ts index 5100a70..79b3cf3 100644 --- a/src/identity/did-document-builder.ts +++ b/src/identity/did-document.ts @@ -3,7 +3,7 @@ import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; -export class DidDocumentBuilder { +export class DidDocument { private id: string; private context: string; @@ -14,7 +14,7 @@ export class DidDocumentBuilder { private services: Map = new Map(); private verificationMethods: Map = new Map(); - private relationships = { + private verificationRelationships = { authentication: [], assertionMethod: [], keyAgreement: [], @@ -50,27 +50,27 @@ export class DidDocumentBuilder { rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [ ...Array.from(this.owners.keys()), - ...this.relationships[DidDocumentJsonProperties.ASSERTION_METHOD], + ...this.verificationRelationships[DidDocumentJsonProperties.ASSERTION_METHOD], ]; rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ ...Array.from(this.owners.keys()), - ...this.relationships[DidDocumentJsonProperties.AUTHENTICATION], + ...this.verificationRelationships[DidDocumentJsonProperties.AUTHENTICATION], ]; - if (this.relationships[DidDocumentJsonProperties.KEY_AGREEMENT].length > 0) { + if (this.verificationRelationships[DidDocumentJsonProperties.KEY_AGREEMENT].length > 0) { rootObject[DidDocumentJsonProperties.KEY_AGREEMENT] = [ - ...this.relationships[DidDocumentJsonProperties.KEY_AGREEMENT], + ...this.verificationRelationships[DidDocumentJsonProperties.KEY_AGREEMENT], ]; } - if (this.relationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION].length > 0) { + if (this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION].length > 0) { rootObject[DidDocumentJsonProperties.CAPABILITY_INVOCATION] = [ - ...this.relationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION], + ...this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION], ]; } - if (this.relationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION].length > 0) { + if (this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION].length > 0) { rootObject[DidDocumentJsonProperties.CAPABILITY_DELEGATION] = [ - ...this.relationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION], + ...this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION], ]; } @@ -134,10 +134,10 @@ export class DidDocumentBuilder { case HcsDidEventName.VERIFICATION_RELATIONSHIP: const type = (event as any).getRelationshipType(); - if (this.relationships[type]) { + if (this.verificationRelationships[type]) { const relationshipPostfix = `#key-${++this.keyId}`; - this.relationships[type].push(event.getId() + relationshipPostfix); + this.verificationRelationships[type].push(event.getId() + relationshipPostfix); this.verificationMethods.set(event.getId() + relationshipPostfix, { id: event.getId() + relationshipPostfix, type: (event as any).getType(), diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 2de00b5..72f78e1 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -1,6 +1,6 @@ import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; import { - DidDocumentBuilder, + DidDocument, DidMethodOperation, Hashing, HcsDidDidOwnerEvent, @@ -107,7 +107,7 @@ export class HcsDid { .setTimeout(3000) .whenFinished((messages) => { this.messages = messages; - resolve(new DidDocumentBuilder(this.identifier, this.messages)); + resolve(new DidDocument(this.identifier, this.messages)); }) .onError((err) => { console.log(err); @@ -143,8 +143,8 @@ export class HcsDid { * @param args * @returns this */ - public async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return await this.AddUpdateRevokeService(args, DidMethodOperation.CREATE); + public addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + return this.addUpdateRevokeService(args, DidMethodOperation.CREATE); } /** @@ -152,8 +152,8 @@ export class HcsDid { * @param args * @returns this */ - public async updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return await this.AddUpdateRevokeService(args, DidMethodOperation.UPDATE); + public updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + return this.addUpdateRevokeService(args, DidMethodOperation.UPDATE); } /** @@ -161,8 +161,8 @@ export class HcsDid { * @param args * @returns this */ - public async revokeService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return await this.AddUpdateRevokeService(args, DidMethodOperation.REVOKE); + public revokeService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + return this.addUpdateRevokeService(args, DidMethodOperation.REVOKE); } /** @@ -170,13 +170,13 @@ export class HcsDid { * @param args * @returns this */ - public async addVerificaitonMethod(args: { + public addVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.CREATE); + return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.CREATE); } /** @@ -184,13 +184,13 @@ export class HcsDid { * @param args * @returns this */ - public async updateVerificaitonMethod(args: { + public updateVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.UPDATE); + return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.UPDATE); } /** @@ -198,13 +198,13 @@ export class HcsDid { * @param args * @returns this */ - public async revokeVerificaitonMethod(args: { + public revokeVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationMethod(args, DidMethodOperation.REVOKE); + return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.REVOKE); } /** @@ -212,14 +212,14 @@ export class HcsDid { * @param args * @returns this */ - public async addVerificaitonRelationship(args: { + public addVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.CREATE); + return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.CREATE); } /** @@ -227,14 +227,14 @@ export class HcsDid { * @param args * @returns this */ - public async updateVerificaitonRelationship(args: { + public updateVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.UPDATE); + return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.UPDATE); } /** @@ -242,14 +242,14 @@ export class HcsDid { * @param args * @returns this */ - public async revokeVerificaitonRelationship(args: { + public revokeVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return await this.AddUpdateRevokeVerificationRelationship(args, DidMethodOperation.REVOKE); + return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.REVOKE); } /** @@ -357,7 +357,7 @@ export class HcsDid { * @param didMethodOperation * @returns this */ - private async AddUpdateRevokeService( + private async addUpdateRevokeService( args: { id: string; type: ServiceTypes; serviceEndpoint: string }, didMethodOperation: DidMethodOperation ) { @@ -388,7 +388,7 @@ export class HcsDid { * @param didMethodOperation * @returns this */ - private async AddUpdateRevokeVerificationMethod( + private async addUpdateRevokeVerificationMethod( args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey }, didMethodOperation: DidMethodOperation ) { @@ -419,7 +419,7 @@ export class HcsDid { * @param didMethodOperation * @returns this */ - private async AddUpdateRevokeVerificationRelationship( + private async addUpdateRevokeVerificationRelationship( args: { id: string; relationshipType: VerificationRelationshipType; diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 30f475d..b943827 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -4,7 +4,6 @@ import Long from "long"; import { ArraysUtils } from "../../utils/arrays-utils"; import { JsonClass } from "./json-class"; import { Message } from "./message"; -import { MessageMode } from "./message-mode"; import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; export type PublicKeyProvider = (evn: MessageEnvelope) => PublicKey; @@ -19,7 +18,6 @@ export class MessageEnvelope { private static serialVersionUID = Long.fromInt(1); - protected mode: MessageMode; protected message: T; protected signature: string; @@ -46,7 +44,6 @@ export class MessageEnvelope { const [message] = args; this.message = message; - this.mode = MessageMode.PLAIN; } else { throw new Error("Wrong arguments passed to constructor"); } @@ -76,7 +73,6 @@ export class MessageEnvelope { public toJsonTree(): any { const result: any = {}; - result.mode = this.mode; if (this.message) { result[MessageEnvelope.MESSAGE_KEY] = this.message.toJsonTree(); } @@ -126,7 +122,6 @@ export class MessageEnvelope { public static fromJson(json: string, messageClass: JsonClass): MessageEnvelope { const result = new MessageEnvelope(); const root = JSON.parse(json); - result.mode = root.mode; result.signature = root[MessageEnvelope.SIGNATURE_KEY]; if (root.hasOwnProperty(MessageEnvelope.MESSAGE_KEY)) { result.message = messageClass.fromJsonTree(root[MessageEnvelope.MESSAGE_KEY]); @@ -193,10 +188,6 @@ export class MessageEnvelope { return !this.mirrorResponse ? null : this.mirrorResponse.consensusTimestamp; } - public getMode(): MessageMode { - return this.mode; - } - public getMirrorResponse(): SerializableMirrorConsensusResponse { return this.mirrorResponse; } diff --git a/src/identity/hcs/message-listener.ts b/src/identity/hcs/message-listener.ts index 97a79a2..1e8013f 100644 --- a/src/identity/hcs/message-listener.ts +++ b/src/identity/hcs/message-listener.ts @@ -1,9 +1,8 @@ import { Client, Timestamp, TopicId, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; import SubscriptionHandle from "@hashgraph/sdk/lib/topic/SubscriptionHandle"; import Long from "long"; -import { Decrypter, Message } from "./message"; +import { Message } from "./message"; import { MessageEnvelope } from "./message-envelope"; -import { MessageMode } from "./message-mode"; /** * A listener of confirmed messages from a HCS identity topic. diff --git a/src/identity/hcs/message-mode.ts b/src/identity/hcs/message-mode.ts deleted file mode 100644 index 8e7087d..0000000 --- a/src/identity/hcs/message-mode.ts +++ /dev/null @@ -1,3 +0,0 @@ -export enum MessageMode { - PLAIN = "plain", -} diff --git a/src/index.ts b/src/index.ts index 997f478..a253088 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { DidDocumentBuilder } from "./identity/did-document-builder"; +import { DidDocument } from "./identity/did-document"; import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; @@ -8,15 +8,14 @@ import { HcsDidServiceEvent } from "./identity/hcs/did/event/hcs-did-service-eve import { HcsDidVerificationMethodEvent } from "./identity/hcs/did/event/hcs-did-verification-method-event"; import { HcsDidVerificationRelationshipEvent } from "./identity/hcs/did/event/hcs-did-verification-relationship-event"; import { HcsDid } from "./identity/hcs/did/hcs-did"; -import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; import { HcsDidEventMessageResolver } from "./identity/hcs/did/hcs-did-event-message-resolver"; +import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; import { JsonClass } from "./identity/hcs/json-class"; import { Message } from "./identity/hcs/message"; import { MessageEnvelope } from "./identity/hcs/message-envelope"; import { MessageListener } from "./identity/hcs/message-listener"; -import { MessageMode } from "./identity/hcs/message-mode"; import { MessageTransaction } from "./identity/hcs/message-transaction"; import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; import { ArraysUtils } from "./utils/arrays-utils"; @@ -27,7 +26,7 @@ import { Validator } from "./utils/validator"; export { ArraysUtils, - DidDocumentBuilder, + DidDocument, DidDocumentJsonProperties, DidMethodOperation, DidParser, @@ -46,7 +45,6 @@ export { Message, MessageEnvelope, MessageListener, - MessageMode, MessageTransaction, SerializableMirrorConsensusResponse, TimestampUtils, From cd10888f54f3cd1ed01fb36361beb96d31d79897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 7 Feb 2022 15:28:16 +0100 Subject: [PATCH 050/133] Service or Key ID is set by user. Fixing some tests. Adding ID validation logic --- demo/2_register_service_endpoint.js | 6 ++- src/identity/did-document.ts | 62 +++++++++++++++-------- src/identity/hcs/did/hcs-did.ts | 34 ++++++++++++- test/src/did/hcs-did.test.ts | 76 ++++++++++++++++------------- 4 files changed, 121 insertions(+), 57 deletions(-) diff --git a/demo/2_register_service_endpoint.js b/demo/2_register_service_endpoint.js index 8a101c6..0122f3d 100644 --- a/demo/2_register_service_endpoint.js +++ b/demo/2_register_service_endpoint.js @@ -18,7 +18,11 @@ async function main() { /** * Build create Service message */ - did.addService({ id: did.getIdentifier(), type: "LinkedDomains", serviceEndpoint: "https://test.meeco.me/vcs" }); + did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://test.meeco.me/vcs", + }); } main(); diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 79b3cf3..c85d50a 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -7,9 +7,6 @@ export class DidDocument { private id: string; private context: string; - private keyId = 0; - private serviceId = 0; - private owners: Map = new Map(); private services: Map = new Map(); private verificationMethods: Map = new Map(); @@ -105,27 +102,40 @@ export class DidDocument { switch (event.name) { case HcsDidEventName.DID_OWNER: - this.owners.set(event.getId() + "#did-root-key", { - id: event.getId() + "#did-root-key", + if (this.owners.has(event.getId())) { + console.warn(`Duplicate create DIDOwner event ID: ${event.getId()}. Event will be ignored...`); + return; + } + + this.owners.set(event.getId(), { + id: event.getId(), type: (event as any).getType(), controller: (event as any).getController(), publicKeyMultibase: (event as any).getPublicKeyMultibase(), }); return; case HcsDidEventName.SERVICE: - const serviceIdPostfix = `#service-${++this.serviceId}`; + if (this.services.has(event.getId())) { + console.warn(`Duplicate create Service event ID: ${event.getId()}. Event will be ignored...`); + return; + } - this.services.set(event.getId() + serviceIdPostfix, { - id: event.getId() + serviceIdPostfix, + this.services.set(event.getId(), { + id: event.getId(), type: (event as any).getType(), serviceEndpoint: (event as any).getServiceEndpoint(), }); return; case HcsDidEventName.VERIFICATION_METHOD: - const methodPostfix = `#key-${++this.keyId}`; + if (this.verificationMethods.has(event.getId())) { + console.warn( + `Duplicate create VerificationMethod event ID: ${event.getId()}. Event will be ignored...` + ); + return; + } - this.verificationMethods.set(event.getId() + methodPostfix, { - id: event.getId() + methodPostfix, + this.verificationMethods.set(event.getId(), { + id: event.getId(), type: (event as any).getType(), controller: (event as any).getController(), publicKeyMultibase: (event as any).getPublicKeyMultibase(), @@ -135,15 +145,27 @@ export class DidDocument { const type = (event as any).getRelationshipType(); if (this.verificationRelationships[type]) { - const relationshipPostfix = `#key-${++this.keyId}`; - - this.verificationRelationships[type].push(event.getId() + relationshipPostfix); - this.verificationMethods.set(event.getId() + relationshipPostfix, { - id: event.getId() + relationshipPostfix, - type: (event as any).getType(), - controller: (event as any).getController(), - publicKeyMultibase: (event as any).getPublicKeyMultibase(), - }); + if (this.verificationRelationships[type].includes(event.getId())) { + console.warn( + `Duplicate create VerificationRelationship event ID: ${event.getId()}. Event will be ignored...` + ); + return; + } + + this.verificationRelationships[type].push(event.getId()); + + if (!this.verificationMethods.has(event.getId())) { + this.verificationMethods.set(event.getId(), { + id: event.getId(), + type: (event as any).getType(), + controller: (event as any).getController(), + publicKeyMultibase: (event as any).getPublicKeyMultibase(), + }); + } + } else { + console.warn( + `Create verificationRelationship event with type ${type} is not supported. Event will be ignored...` + ); } return; default: diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 72f78e1..153bcc6 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -87,7 +87,11 @@ export class HcsDid { /** * Set ownership */ - const event = new HcsDidDidOwnerEvent(this.identifier, this.identifier, this.privateKey.publicKey); + const event = new HcsDidDidOwnerEvent( + this.identifier + "#did-root-key", + this.identifier, + this.privateKey.publicKey + ); await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); return this; @@ -351,6 +355,22 @@ export class HcsDid { } } + private isEventIdValid(eventId: string) { + const [identifer, id] = eventId.split("#"); + + if (!identifer || !id) { + return false; + } + + this.parseIdentifier(identifer); + + if (!/^(key|service)\-[0-9]{1,}$/.test(id)) { + return false; + } + + return true; + } + /** * * @param args @@ -373,6 +393,10 @@ export class HcsDid { throw new Error("Service args are missing"); } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + /** * Build create Service message */ @@ -404,6 +428,10 @@ export class HcsDid { throw new Error("Verification Method args are missing"); } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + /** * Build create Service message */ @@ -441,6 +469,10 @@ export class HcsDid { throw new Error("Verification Relationship args are missing"); } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + /** * Build create Service message */ diff --git a/test/src/did/hcs-did.test.ts b/test/src/did/hcs-did.test.ts index 3a24e63..e89845c 100644 --- a/test/src/did/hcs-did.test.ts +++ b/test/src/did/hcs-did.test.ts @@ -1,6 +1,5 @@ -import { AccountId, PrivateKey, Client, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; - -import { HcsDid, Hashing } from "../../../dist"; +import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; +import { Hashing, HcsDid } from "../../../dist"; const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; const OPERATOR_ID = "0.0.12710106"; @@ -126,12 +125,9 @@ describe("HcsDid", function () { expect(did.getClient()).toEqual(client); expect(did.getNetwork()).toEqual("testnet"); - /** - * TODO: FIX ME - */ - // const messages = await readtTopicMessages(did.getTopicId(), client); + const messages = await readtTopicMessages(did.getTopicId(), client); - // expect(messages.length).toEqual(1); + expect(messages.length).toEqual(1); }); }); @@ -180,18 +176,19 @@ describe("HcsDid", function () { const newLocal: any = await did.resolve(); const didDocument = newLocal.toJsonTree(); - expect(didDocument["@context"]).toEqual("https://www.w3.org/ns/did/v1"); - expect(didDocument["id"]).toEqual(did.getIdentifier()); - expect(didDocument["assertionMethod"].length).toEqual(1); - expect(didDocument["assertionMethod"][0]).toEqual(`${did.getIdentifier()}#did-root-key`); - expect(didDocument["authentication"].length).toEqual(1); - expect(didDocument["authentication"][0]).toEqual(`${did.getIdentifier()}#did-root-key`); - expect(didDocument["verificationMethod"].length).toEqual(1); - expect(didDocument["verificationMethod"][0]).toStrictEqual({ - id: `${did.getIdentifier()}#did-root-key`, - type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], }); }); }); @@ -215,7 +212,6 @@ describe("HcsDid", function () { await did.addService(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); } }); @@ -228,7 +224,6 @@ describe("HcsDid", function () { await did.addService(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); } }); @@ -241,30 +236,41 @@ describe("HcsDid", function () { await did.addService(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Service args are missing"); } }); + it("thorws error if event id is not valid", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + try { + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#invalid-1", + type: "LinkedDomains", + serviceEndpoint: "https://test.meeco.me/vcs", + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + }); + it("publish a new Service message", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - await ( - await did.register() - ).addService({ - id: did.getIdentifier(), + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", type: "LinkedDomains", serviceEndpoint: "https://test.meeco.me/vcs", }); - /** - * wait for 9s so didowner and service event to be propogated to mirror node - */ - await new Promise((resolve) => setTimeout(resolve, 9000)); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const messages = await readtTopicMessages(did.getTopicId(), client); + const messages = await readtTopicMessages(did.getTopicId(), client, 15000); // DIDOwner and Service event expect(messages.length).toEqual(2); @@ -437,7 +443,7 @@ describe("HcsDid", function () { * Test Helpers */ -async function readtTopicMessages(topicId, client) { +async function readtTopicMessages(topicId, client, timeout = null) { const messages = []; new TopicMessageQuery() @@ -451,7 +457,7 @@ async function readtTopicMessages(topicId, client) { /** * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read */ - await new Promise((resolve) => setTimeout(resolve, 60000)); + await new Promise((resolve) => setTimeout(resolve, timeout || 6000)); return messages; } From c4d020f48dc425cb2da88355afe304e5bf6e2c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 7 Feb 2022 16:21:01 +0100 Subject: [PATCH 051/133] Update and revoke logic for Services, VerificationMethods and VerificationRelationships --- src/identity/did-document.ts | 184 ++++++++++++++++++++++++++++++++--- 1 file changed, 168 insertions(+), 16 deletions(-) diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index c85d50a..a2b1807 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -1,4 +1,11 @@ -import { DidMethodOperation, HcsDidMessage } from ".."; +import { + DidMethodOperation, + HcsDidDidOwnerEvent, + HcsDidMessage, + HcsDidServiceEvent, + HcsDidVerificationMethodEvent, + HcsDidVerificationRelationshipEvent, +} from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; @@ -11,7 +18,7 @@ export class DidDocument { private services: Map = new Map(); private verificationMethods: Map = new Map(); - private verificationRelationships = { + private verificationRelationships: { [key: string]: string[] } = { authentication: [], assertionMethod: [], keyAgreement: [], @@ -82,12 +89,17 @@ export class DidDocument { return JSON.stringify(this.toJsonTree()); } - private processMessages(messages: HcsDidMessage[]) { + private processMessages(messages: HcsDidMessage[]): void { messages.forEach((msg) => { switch (msg.getOperation()) { case DidMethodOperation.CREATE: this.processCreateMessage(msg); return; + case DidMethodOperation.UPDATE: + this.processUpdateMessage(msg); + return; + case DidMethodOperation.REVOKE: + this.processRevokeMessage(msg); default: /** * TODO: for debugging - later we should probably try to ignore such messages @@ -97,7 +109,7 @@ export class DidDocument { }); } - private processCreateMessage(message: HcsDidMessage) { + private processCreateMessage(message: HcsDidMessage): void { const event = message.getEvent(); switch (event.name) { @@ -109,9 +121,9 @@ export class DidDocument { this.owners.set(event.getId(), { id: event.getId(), - type: (event as any).getType(), - controller: (event as any).getController(), - publicKeyMultibase: (event as any).getPublicKeyMultibase(), + type: (event as HcsDidDidOwnerEvent).getType(), + controller: (event as HcsDidDidOwnerEvent).getController(), + publicKeyMultibase: (event as HcsDidDidOwnerEvent).getPublicKeyMultibase(), }); return; case HcsDidEventName.SERVICE: @@ -122,8 +134,8 @@ export class DidDocument { this.services.set(event.getId(), { id: event.getId(), - type: (event as any).getType(), - serviceEndpoint: (event as any).getServiceEndpoint(), + type: (event as HcsDidServiceEvent).getType(), + serviceEndpoint: (event as HcsDidServiceEvent).getServiceEndpoint(), }); return; case HcsDidEventName.VERIFICATION_METHOD: @@ -136,13 +148,13 @@ export class DidDocument { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as any).getType(), - controller: (event as any).getController(), - publicKeyMultibase: (event as any).getPublicKeyMultibase(), + type: (event as HcsDidVerificationMethodEvent).getType(), + controller: (event as HcsDidVerificationMethodEvent).getController(), + publicKeyMultibase: (event as HcsDidVerificationMethodEvent).getPublicKeyMultibase(), }); return; case HcsDidEventName.VERIFICATION_RELATIONSHIP: - const type = (event as any).getRelationshipType(); + const type = (event as HcsDidVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { if (this.verificationRelationships[type].includes(event.getId())) { @@ -157,9 +169,9 @@ export class DidDocument { if (!this.verificationMethods.has(event.getId())) { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as any).getType(), - controller: (event as any).getController(), - publicKeyMultibase: (event as any).getPublicKeyMultibase(), + type: (event as HcsDidVerificationRelationshipEvent).getType(), + controller: (event as HcsDidVerificationRelationshipEvent).getController(), + publicKeyMultibase: (event as HcsDidVerificationRelationshipEvent).getPublicKeyMultibase(), }); } } else { @@ -175,4 +187,144 @@ export class DidDocument { throw new Error("Not supported event detected!"); } } + + private processUpdateMessage(message: HcsDidMessage): void { + const event = message.getEvent(); + + switch (event.name) { + case HcsDidEventName.DID_OWNER: + /** + * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. + */ + console.warn(`Update DidOwner event is not supported. Event will be ignored...`); + return; + case HcsDidEventName.SERVICE: + if (!this.services.has(event.getId())) { + console.warn( + `Update Service event: service with ID ${event.getId()} was not found in the document. Event will be ignored...` + ); + return; + } + this.services.set(event.getId(), { + id: event.getId(), + type: (event as HcsDidServiceEvent).getType(), + serviceEndpoint: (event as HcsDidServiceEvent).getServiceEndpoint(), + }); + return; + case HcsDidEventName.VERIFICATION_METHOD: + if (!this.verificationMethods.has(event.getId())) { + console.warn( + `Update VerificationMethod event: verificationMethod with ID: ${event.getId()} was not found in the document. Event will be ignored...` + ); + return; + } + + this.verificationMethods.set(event.getId(), { + id: event.getId(), + type: (event as HcsDidVerificationMethodEvent).getType(), + controller: (event as HcsDidVerificationMethodEvent).getController(), + publicKeyMultibase: (event as HcsDidVerificationMethodEvent).getPublicKeyMultibase(), + }); + return; + case HcsDidEventName.VERIFICATION_RELATIONSHIP: + const type = (event as any).getRelationshipType(); + + if (this.verificationRelationships[type]) { + if (!this.verificationRelationships[type].includes(event.getId())) { + console.warn( + `Update VerificationRelationship event: veritificationRelationship with ID: ${event.getId()} was not found in the document. Event will be ignored...` + ); + return; + } + + this.verificationMethods.set(event.getId(), { + id: event.getId(), + type: (event as any).getType(), + controller: (event as any).getController(), + publicKeyMultibase: (event as any).getPublicKeyMultibase(), + }); + } else { + console.warn( + `Update verificationRelationship event with type ${type} is not supported. Event will be ignored...` + ); + } + return; + default: + /** + * TODO: for debugging - later we should probably try to ignore such messages + */ + throw new Error("Not supported event detected!"); + } + } + + private processRevokeMessage(message: HcsDidMessage): void { + const event = message.getEvent(); + + switch (event.name) { + case HcsDidEventName.DID_OWNER: + /** + * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. + */ + console.warn(`Revoke DidOwner event is not supported. Event will be ignored...`); + return; + case HcsDidEventName.SERVICE: + if (!this.services.has(event.getId())) { + console.warn(`Revoke Service event: service event ID: ${event.getId()}. Event will be ignored...`); + return; + } + + this.services.delete(event.getId()); + return; + case HcsDidEventName.VERIFICATION_METHOD: + if (!this.verificationMethods.has(event.getId())) { + console.warn( + `Revoke VerificationMethod event: verificationMethod with ID: ${event.getId()}. Event will be ignored...` + ); + return; + } + + this.verificationMethods.delete(event.getId()); + + Object.keys(this.verificationRelationships).forEach((relName) => { + this.verificationRelationships[relName] = this.verificationRelationships[relName].filter( + (id) => id !== event.getId() + ); + }); + + return; + case HcsDidEventName.VERIFICATION_RELATIONSHIP: + const type = (event as any).getRelationshipType(); + + if (this.verificationRelationships[type]) { + if (this.verificationRelationships[type].includes(event.getId())) { + console.warn( + `Revoke VerificationRelationship event: verificationRelationship with ID: ${event.getId()}. Event will be ignored...` + ); + return; + } + + this.verificationRelationships[type] = this.verificationRelationships[type].filter( + (id) => id !== event.getId() + ); + + const canRemoveVerificationMethod = Object.values(this.verificationRelationships).every( + (rel) => !rel.includes(event.getId()) + ); + + if (canRemoveVerificationMethod) { + this.verificationMethods.delete(event.getId()); + } + } else { + console.warn( + `Revoke verificationRelationship event with type ${type} is not supported. Event will be ignored...` + ); + } + return; + default: + /** + * TODO: for debugging - later we should probably try to ignore such messages + */ + throw new Error("Not supported event detected!"); + } + } } From 0a298ae93a50a03c9d256e10346580393d5c5c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 7 Feb 2022 17:02:49 +0100 Subject: [PATCH 052/133] Bug fixes; Success scenario tests for DidDocument --- src/identity/did-document.ts | 3 +- test/src/did-document.test.ts | 378 ++++++++++++++++++++++++++++++++++ test/src/did/hcs-did.test.ts | 2 +- 3 files changed, 381 insertions(+), 2 deletions(-) create mode 100644 test/src/did-document.test.ts diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index a2b1807..84c2f41 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -100,6 +100,7 @@ export class DidDocument { return; case DidMethodOperation.REVOKE: this.processRevokeMessage(msg); + return; default: /** * TODO: for debugging - later we should probably try to ignore such messages @@ -296,7 +297,7 @@ export class DidDocument { const type = (event as any).getRelationshipType(); if (this.verificationRelationships[type]) { - if (this.verificationRelationships[type].includes(event.getId())) { + if (!this.verificationRelationships[type].includes(event.getId())) { console.warn( `Revoke VerificationRelationship event: verificationRelationship with ID: ${event.getId()}. Event will be ignored...` ); diff --git a/test/src/did-document.test.ts b/test/src/did-document.test.ts new file mode 100644 index 0000000..4aba776 --- /dev/null +++ b/test/src/did-document.test.ts @@ -0,0 +1,378 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { + DidDocument, + DidMethodOperation, + Hashing, + HcsDidDidOwnerEvent, + HcsDidMessage, + HcsDidServiceEvent, + HcsDidVerificationMethodEvent, + HcsDidVerificationRelationshipEvent, +} from "../../dist"; + +describe("DidDocument", () => { + describe("#toJsonTree", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode( + privateKey.publicKey.toBytes() + )}_0.0.29613327`; + + it("returns empty document if not events were passed", () => { + const doc = new DidDocument(identifier, []); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], + }); + }); + + it("handles create DIDOwner event", () => { + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + id: identifier, + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + + it("successfuly handles add service, verificationMethod and verificationRelationship events", () => { + const key1 = PrivateKey.generate(); + const key2 = PrivateKey.generate(); + + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + key1.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key2.publicKey + ) + ), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://test.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + + it("successfuly handles update service, verificationMethod and verificationRelationship events", () => { + const key1 = PrivateKey.generate(); + const key2 = PrivateKey.generate(); + const key3 = PrivateKey.generate(); + + const key4 = PrivateKey.generate(); + const key5 = PrivateKey.generate(); + + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-2", "LinkedDomains", "https://test2.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + key1.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key2.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-3", + "authentication", + "Ed25519VerificationKey2018", + identifier, + key3.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.UPDATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://new.test.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.UPDATE, + identifier, + new HcsDidVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + key4.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.UPDATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key5.publicKey + ) + ), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://new.test.identity.com", + type: "LinkedDomains", + }, + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + + it("successfuly handles revoke service, verificationMethod and verificationRelationship events", () => { + const key1 = PrivateKey.generate(); + const key2 = PrivateKey.generate(); + const key3 = PrivateKey.generate(); + + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidServiceEvent(identifier + "#service-2", "LinkedDomains", "https://test2.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + key1.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key2.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-3", + "authentication", + "Ed25519VerificationKey2018", + identifier, + key3.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.REVOKE, + identifier, + new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + ), + new HcsDidMessage( + DidMethodOperation.REVOKE, + identifier, + new HcsDidVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + key1.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.REVOKE, + identifier, + new HcsDidVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key2.publicKey + ) + ), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + id: identifier, + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + }); +}); diff --git a/test/src/did/hcs-did.test.ts b/test/src/did/hcs-did.test.ts index e89845c..b01c3ce 100644 --- a/test/src/did/hcs-did.test.ts +++ b/test/src/did/hcs-did.test.ts @@ -10,7 +10,7 @@ const NETWORK = "testnet"; // hedera, kabuto (note kabuto not available on previewnet) const MIRROR_PROVIDER = "hedera"; -describe("HcsDid", function () { +describe("HcsDid", () => { describe("#constructor", () => { it("throws error because of missing identifier and privateKey", () => { expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); From 2b788ba19bfe514379cb8bc389b65f66be313f45 Mon Sep 17 00:00:00 2001 From: vijay Date: Tue, 8 Feb 2022 20:05:19 +1100 Subject: [PATCH 053/133] Task/multiple event classes (#11) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added support for multiple event classes * cast to relevent event object * added more tests * added more tests for update revoke events * fix test structure * updated revoke verification relationship logic to have relationship type * Fix parsing DID events Co-authored-by: Vijay Shiyani Co-authored-by: Linas IsÌŒganaitis --- package.json | 4 +- src/identity/did-document.ts | 62 +- .../hcs/did/event/hcs-did-delete-event.ts | 5 +- .../hcs/did/event/hcs-did-event-parser.ts | 47 +- .../hcs-did-create-did-owner-event.ts} | 14 +- .../hcs-did-create-service-event.ts} | 16 +- .../service/hcs-did-revoke-service-event.ts | 34 + .../service/hcs-did-update-service-event.ts | 49 ++ src/identity/hcs/did/event/service/types.ts | 1 + ...s-did-create-verification-method-event.ts} | 17 +- ...cs-did-revoke-verification-method-event.ts | 34 + ...cs-did-update-verification-method-event.ts | 63 ++ .../did/event/verification-method/types.ts | 1 + ...create-verification-relationship-event.ts} | 25 +- ...-revoke-verification-relationship-event.ts | 42 + ...-update-verification-relationship-event.ts | 82 ++ .../event/verification-relationship/types.ts | 8 + .../hcs/did/hcs-did-event-message-resolver.ts | 25 +- src/identity/hcs/did/hcs-did-message.ts | 4 +- src/identity/hcs/did/hcs-did.ts | 291 ++++--- src/index.ts | 16 +- test/integration/hcs-did.test.ts | 811 ++++++++++++++++++ test/src/did/hcs-did.test.ts | 463 ---------- test/{src => unit}/did-document.test.ts | 82 +- test/{src => unit}/hashing.test.ts | 0 .../{src/did => unit}/hcs-did-message.test.ts | 3 +- 26 files changed, 1436 insertions(+), 763 deletions(-) rename src/identity/hcs/did/event/{hcs-did-did-owner-event.ts => owner/hcs-did-create-did-owner-event.ts} (77%) rename src/identity/hcs/did/event/{hcs-did-service-event.ts => service/hcs-did-create-service-event.ts} (66%) create mode 100644 src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts create mode 100644 src/identity/hcs/did/event/service/hcs-did-update-service-event.ts create mode 100644 src/identity/hcs/did/event/service/types.ts rename src/identity/hcs/did/event/{hcs-did-verification-method-event.ts => verification-method/hcs-did-create-verification-method-event.ts} (70%) create mode 100644 src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts create mode 100644 src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts create mode 100644 src/identity/hcs/did/event/verification-method/types.ts rename src/identity/hcs/did/event/{hcs-did-verification-relationship-event.ts => verification-relationship/hcs-did-create-verification-relationship-event.ts} (72%) create mode 100644 src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts create mode 100644 src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts create mode 100644 src/identity/hcs/did/event/verification-relationship/types.ts create mode 100644 test/integration/hcs-did.test.ts delete mode 100644 test/src/did/hcs-did.test.ts rename test/{src => unit}/did-document.test.ts (81%) rename test/{src => unit}/hashing.test.ts (100%) rename test/{src/did => unit}/hcs-did-message.test.ts (97%) diff --git a/package.json b/package.json index 1286277..e0f8e9a 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "build:dev": "tsc --sourceMap -w", "start": "node dist/index.js", "start:dev": "nodemon --inspect dist/index.js", - "test": "jest" + "test": "jest", + "test:unit": "jest --testPathPattern=test/unit", + "test:integration": "jest --testPathPattern=test/integration" }, "repository": { "type": "git", diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 84c2f41..a0a3cd5 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -1,14 +1,12 @@ -import { - DidMethodOperation, - HcsDidDidOwnerEvent, - HcsDidMessage, - HcsDidServiceEvent, - HcsDidVerificationMethodEvent, - HcsDidVerificationRelationshipEvent, -} from ".."; +import { DidMethodOperation, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidMessage } from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; +import { HcsDidUpdateServiceEvent } from "./hcs/did/event/service/hcs-did-update-service-event"; +import { HcsDidCreateVerificationMethodEvent } from "./hcs/did/event/verification-method/hcs-did-create-verification-method-event"; +import { HcsDidUpdateVerificationMethodEvent } from "./hcs/did/event/verification-method/hcs-did-update-verification-method-event"; +import { HcsDidCreateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; +import { HcsDidUpdateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; export class DidDocument { private id: string; @@ -122,9 +120,9 @@ export class DidDocument { this.owners.set(event.getId(), { id: event.getId(), - type: (event as HcsDidDidOwnerEvent).getType(), - controller: (event as HcsDidDidOwnerEvent).getController(), - publicKeyMultibase: (event as HcsDidDidOwnerEvent).getPublicKeyMultibase(), + type: (event as HcsDidCreateDidOwnerEvent).getType(), + controller: (event as HcsDidCreateDidOwnerEvent).getController(), + publicKeyMultibase: (event as HcsDidCreateDidOwnerEvent).getPublicKeyMultibase(), }); return; case HcsDidEventName.SERVICE: @@ -135,8 +133,8 @@ export class DidDocument { this.services.set(event.getId(), { id: event.getId(), - type: (event as HcsDidServiceEvent).getType(), - serviceEndpoint: (event as HcsDidServiceEvent).getServiceEndpoint(), + type: (event as HcsDidCreateServiceEvent).getType(), + serviceEndpoint: (event as HcsDidCreateServiceEvent).getServiceEndpoint(), }); return; case HcsDidEventName.VERIFICATION_METHOD: @@ -149,13 +147,13 @@ export class DidDocument { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as HcsDidVerificationMethodEvent).getType(), - controller: (event as HcsDidVerificationMethodEvent).getController(), - publicKeyMultibase: (event as HcsDidVerificationMethodEvent).getPublicKeyMultibase(), + type: (event as HcsDidCreateVerificationMethodEvent).getType(), + controller: (event as HcsDidCreateVerificationMethodEvent).getController(), + publicKeyMultibase: (event as HcsDidCreateVerificationMethodEvent).getPublicKeyMultibase(), }); return; case HcsDidEventName.VERIFICATION_RELATIONSHIP: - const type = (event as HcsDidVerificationRelationshipEvent).getRelationshipType(); + const type = (event as HcsDidCreateVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { if (this.verificationRelationships[type].includes(event.getId())) { @@ -170,9 +168,11 @@ export class DidDocument { if (!this.verificationMethods.has(event.getId())) { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as HcsDidVerificationRelationshipEvent).getType(), - controller: (event as HcsDidVerificationRelationshipEvent).getController(), - publicKeyMultibase: (event as HcsDidVerificationRelationshipEvent).getPublicKeyMultibase(), + type: (event as HcsDidCreateVerificationRelationshipEvent).getType(), + controller: (event as HcsDidCreateVerificationRelationshipEvent).getController(), + publicKeyMultibase: ( + event as HcsDidCreateVerificationRelationshipEvent + ).getPublicKeyMultibase(), }); } } else { @@ -208,8 +208,8 @@ export class DidDocument { } this.services.set(event.getId(), { id: event.getId(), - type: (event as HcsDidServiceEvent).getType(), - serviceEndpoint: (event as HcsDidServiceEvent).getServiceEndpoint(), + type: (event as HcsDidUpdateServiceEvent).getType(), + serviceEndpoint: (event as HcsDidUpdateServiceEvent).getServiceEndpoint(), }); return; case HcsDidEventName.VERIFICATION_METHOD: @@ -222,13 +222,13 @@ export class DidDocument { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as HcsDidVerificationMethodEvent).getType(), - controller: (event as HcsDidVerificationMethodEvent).getController(), - publicKeyMultibase: (event as HcsDidVerificationMethodEvent).getPublicKeyMultibase(), + type: (event as HcsDidUpdateVerificationMethodEvent).getType(), + controller: (event as HcsDidUpdateVerificationMethodEvent).getController(), + publicKeyMultibase: (event as HcsDidUpdateVerificationMethodEvent).getPublicKeyMultibase(), }); return; case HcsDidEventName.VERIFICATION_RELATIONSHIP: - const type = (event as any).getRelationshipType(); + const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { if (!this.verificationRelationships[type].includes(event.getId())) { @@ -240,9 +240,11 @@ export class DidDocument { this.verificationMethods.set(event.getId(), { id: event.getId(), - type: (event as any).getType(), - controller: (event as any).getController(), - publicKeyMultibase: (event as any).getPublicKeyMultibase(), + type: (event as HcsDidUpdateVerificationRelationshipEvent).getType(), + controller: (event as HcsDidUpdateVerificationRelationshipEvent).getController(), + publicKeyMultibase: ( + event as HcsDidUpdateVerificationRelationshipEvent + ).getPublicKeyMultibase(), }); } else { console.warn( @@ -294,7 +296,7 @@ export class DidDocument { return; case HcsDidEventName.VERIFICATION_RELATIONSHIP: - const type = (event as any).getRelationshipType(); + const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { if (!this.verificationRelationships[type].includes(event.getId())) { diff --git a/src/identity/hcs/did/event/hcs-did-delete-event.ts b/src/identity/hcs/did/event/hcs-did-delete-event.ts index 0671a7d..ed0ae83 100644 --- a/src/identity/hcs/did/event/hcs-did-delete-event.ts +++ b/src/identity/hcs/did/event/hcs-did-delete-event.ts @@ -4,15 +4,12 @@ import { HcsDidEventName } from "./hcs-did-event-name"; export class HcsDidDeleteEvent extends HcsDidEvent { public readonly name = HcsDidEventName.DELETE; - /** - * TODO: are there any restrictions on type? - */ constructor() { super(); } getId(): string { - throw new Error("Method not implemented."); + return undefined; } public toJsonTree() { diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 037b3d2..b74bb20 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -1,29 +1,52 @@ import { Hashing } from "../../../.."; +import { DidMethodOperation } from "../../../did-method-operation"; import { HcsDidDeleteEvent } from "./hcs-did-delete-event"; -import { HcsDidDidOwnerEvent } from "./hcs-did-did-owner-event"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; -import { HcsDidServiceEvent } from "./hcs-did-service-event"; -import { HcsDidVerificationMethodEvent } from "./hcs-did-verification-method-event"; -import { HcsDidVerificationRelationshipEvent } from "./hcs-did-verification-relationship-event"; +import { HcsDidCreateDidOwnerEvent } from "./owner/hcs-did-create-did-owner-event"; +import { HcsDidCreateServiceEvent } from "./service/hcs-did-create-service-event"; +import { HcsDidRevokeServiceEvent } from "./service/hcs-did-revoke-service-event"; +import { HcsDidUpdateServiceEvent } from "./service/hcs-did-update-service-event"; +import { HcsDidCreateVerificationMethodEvent } from "./verification-method/hcs-did-create-verification-method-event"; +import { HcsDidRevokeVerificationMethodEvent } from "./verification-method/hcs-did-revoke-verification-method-event"; +import { HcsDidUpdateVerificationMethodEvent } from "./verification-method/hcs-did-update-verification-method-event"; +import { HcsDidCreateVerificationRelationshipEvent } from "./verification-relationship/hcs-did-create-verification-relationship-event"; +import { HcsDidRevokeVerificationRelationshipEvent } from "./verification-relationship/hcs-did-revoke-verification-relationship-event"; +import { HcsDidUpdateVerificationRelationshipEvent } from "./verification-relationship/hcs-did-update-verification-relationship-event"; const EVENT_NAME_TO_CLASS = { - [HcsDidEventName.DID_OWNER]: HcsDidDidOwnerEvent, - [HcsDidEventName.SERVICE]: HcsDidServiceEvent, - [HcsDidEventName.VERIFICATION_METHOD]: HcsDidVerificationMethodEvent, - [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidVerificationRelationshipEvent, - [HcsDidEventName.DELETE]: HcsDidDeleteEvent, + [DidMethodOperation.CREATE]: { + [HcsDidEventName.DID_OWNER]: HcsDidCreateDidOwnerEvent, + [HcsDidEventName.SERVICE]: HcsDidCreateServiceEvent, + [HcsDidEventName.VERIFICATION_METHOD]: HcsDidCreateVerificationMethodEvent, + [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidCreateVerificationRelationshipEvent, + }, + [DidMethodOperation.UPDATE]: { + [HcsDidEventName.SERVICE]: HcsDidUpdateServiceEvent, + [HcsDidEventName.VERIFICATION_METHOD]: HcsDidUpdateVerificationMethodEvent, + [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidUpdateVerificationRelationshipEvent, + }, + [DidMethodOperation.REVOKE]: { + [HcsDidEventName.SERVICE]: HcsDidRevokeServiceEvent, + [HcsDidEventName.VERIFICATION_METHOD]: HcsDidRevokeVerificationMethodEvent, + [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidRevokeVerificationRelationshipEvent, + }, + [DidMethodOperation.DELETE]: { + [HcsDidEventName.DELETE]: HcsDidDeleteEvent, + }, }; export class HcsDidEventParser { - static fromBase64(eventBase64: any): HcsDidEvent { + static fromBase64(operation: DidMethodOperation, eventBase64: any): HcsDidEvent { const tree = JSON.parse(Hashing.base64.decode(eventBase64)); - const eventName = Object.keys(EVENT_NAME_TO_CLASS).find((eventName) => !!tree[eventName]); + const eventsByOpration = EVENT_NAME_TO_CLASS[operation]; + const eventName = Object.keys(eventsByOpration).find((eventName) => !!tree[eventName]); if (!eventName) { + // return null; throw new Error("Invalid DID event"); } - return EVENT_NAME_TO_CLASS[eventName].fromJsonTree(tree[eventName]); + return eventsByOpration[eventName].fromJsonTree(tree[eventName]); } } diff --git a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts similarity index 77% rename from src/identity/hcs/did/event/hcs-did-did-owner-event.ts rename to src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 372c466..9df641a 100644 --- a/src/identity/hcs/did/event/hcs-did-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -1,15 +1,15 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; -import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { Hashing } from "../../../../.."; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; -export class HcsDidDidOwnerEvent extends HcsDidEvent { +export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { public static KEY_TYPE = "Ed25519VerificationKey2018"; public readonly name = HcsDidEventName.DID_OWNER; protected id: string; - protected type = HcsDidDidOwnerEvent.KEY_TYPE; + protected type = HcsDidCreateDidOwnerEvent.KEY_TYPE; protected controller: string; protected publicKey: PublicKey; @@ -59,8 +59,8 @@ export class HcsDidDidOwnerEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJsonTree(tree: any): HcsDidDidOwnerEvent { + static fromJsonTree(tree: any): HcsDidCreateDidOwnerEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidDidOwnerEvent(tree.id, tree.controller, publicKey); + return new HcsDidCreateDidOwnerEvent(tree.id, tree.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/hcs-did-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts similarity index 66% rename from src/identity/hcs/did/event/hcs-did-service-event.ts rename to src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index 1b59b59..d393c7d 100644 --- a/src/identity/hcs/did/event/hcs-did-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -1,18 +1,14 @@ -import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { ServiceTypes } from "./types"; -export type ServiceTypes = "LinkedDomains" | "DIDCommMessaging"; - -export class HcsDidServiceEvent extends HcsDidEvent { +export class HcsDidCreateServiceEvent extends HcsDidEvent { public readonly name = HcsDidEventName.SERVICE; protected id: string; protected type: ServiceTypes; protected serviceEndpoint: string; - /** - * TODO: are there any restrictions on type? - */ constructor(id: string, type: ServiceTypes, serviceEndpoint: string) { super(); @@ -47,7 +43,7 @@ export class HcsDidServiceEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJsonTree(tree: any): HcsDidServiceEvent { - return new HcsDidServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + static fromJsonTree(tree: any): HcsDidCreateServiceEvent { + return new HcsDidCreateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts new file mode 100644 index 0000000..6b39dda --- /dev/null +++ b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts @@ -0,0 +1,34 @@ +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; + +export class HcsDidRevokeServiceEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.SERVICE; + + protected id: string; + + constructor(id: string) { + super(); + + this.id = id; + } + + public getId() { + return this.id; + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidRevokeServiceEvent { + return new HcsDidRevokeServiceEvent(tree.id); + } +} diff --git a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts new file mode 100644 index 0000000..3f4b2bb --- /dev/null +++ b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts @@ -0,0 +1,49 @@ +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { ServiceTypes } from "./types"; + +export class HcsDidUpdateServiceEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.SERVICE; + + protected id: string; + protected type: ServiceTypes; + protected serviceEndpoint: string; + + constructor(id: string, type: ServiceTypes, serviceEndpoint: string) { + super(); + + this.id = id; + this.type = type; + this.serviceEndpoint = serviceEndpoint; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getServiceEndpoint() { + return this.serviceEndpoint; + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + type: this.getType(), + serviceEndpoint: this.getServiceEndpoint(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidUpdateServiceEvent { + return new HcsDidUpdateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + } +} diff --git a/src/identity/hcs/did/event/service/types.ts b/src/identity/hcs/did/event/service/types.ts new file mode 100644 index 0000000..c0b9a46 --- /dev/null +++ b/src/identity/hcs/did/event/service/types.ts @@ -0,0 +1 @@ +export type ServiceTypes = "LinkedDomains" | "DIDCommMessaging"; diff --git a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts similarity index 70% rename from src/identity/hcs/did/event/hcs-did-verification-method-event.ts rename to src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index 18df779..cd7b5a3 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -1,10 +1,10 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; -import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { Hashing } from "../../../../.."; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { VerificationMethodSupportedKeyType } from "./types"; -export type VerificationMethodSupportedKeyType = "Ed25519VerificationKey2018"; -export class HcsDidVerificationMethodEvent extends HcsDidEvent { +export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { public readonly name = HcsDidEventName.VERIFICATION_METHOD; protected id: string; @@ -12,9 +12,6 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { protected controller: string; protected publicKey: PublicKey; - /** - * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? - */ constructor(id: string, type: VerificationMethodSupportedKeyType, controller: string, publicKey: PublicKey) { super(); @@ -59,8 +56,8 @@ export class HcsDidVerificationMethodEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJsonTree(tree: any): HcsDidVerificationMethodEvent { + static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); + return new HcsDidCreateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts new file mode 100644 index 0000000..545104a --- /dev/null +++ b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts @@ -0,0 +1,34 @@ +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; + +export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.VERIFICATION_METHOD; + + protected id: string; + + constructor(id: string) { + super(); + + this.id = id; + } + + public getId() { + return this.id; + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidRevokeVerificationMethodEvent { + return new HcsDidRevokeVerificationMethodEvent(tree.id); + } +} diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts new file mode 100644 index 0000000..996befd --- /dev/null +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -0,0 +1,63 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../../.."; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { VerificationMethodSupportedKeyType } from "./types"; + +export class HcsDidUpdateVerificationMethodEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.VERIFICATION_METHOD; + + protected id: string; + protected type: VerificationMethodSupportedKeyType; + protected controller: string; + protected publicKey: PublicKey; + + constructor(id: string, type: VerificationMethodSupportedKeyType, controller: string, publicKey: PublicKey) { + super(); + + this.id = id; + this.type = type; + this.controller = controller; + this.publicKey = publicKey; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getController() { + return this.controller; + } + + public getPublicKey() { + return this.publicKey; + } + + public getPublicKeyMultibase() { + return Hashing.multibase.encode(this.getPublicKey().toBytes()); + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidUpdateVerificationMethodEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidUpdateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); + } +} diff --git a/src/identity/hcs/did/event/verification-method/types.ts b/src/identity/hcs/did/event/verification-method/types.ts new file mode 100644 index 0000000..e7462c5 --- /dev/null +++ b/src/identity/hcs/did/event/verification-method/types.ts @@ -0,0 +1 @@ +export type VerificationMethodSupportedKeyType = "Ed25519VerificationKey2018"; diff --git a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts similarity index 72% rename from src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts rename to src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index b929291..76b944b 100644 --- a/src/identity/hcs/did/event/hcs-did-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -1,18 +1,10 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../.."; -import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { Hashing } from "../../../../.."; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; -export type VerificationRelationshipType = - | "authentication" - | "assertionMethod" - | "keyAgreement" - | "capabilityInvocation" - | "capabilityDelegation"; - -export type VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; - -export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { +export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; protected id: string; @@ -21,9 +13,6 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { protected controller: string; protected publicKey: PublicKey; - /** - * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? - */ constructor( id: string, relationshipType: VerificationRelationshipType, @@ -80,9 +69,9 @@ export class HcsDidVerificationRelationshipEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJsonTree(tree: any): HcsDidVerificationRelationshipEvent { + static fromJsonTree(tree: any): HcsDidCreateVerificationRelationshipEvent { const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidVerificationRelationshipEvent( + return new HcsDidCreateVerificationRelationshipEvent( tree.id, tree.relationshipType, tree.type, diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts new file mode 100644 index 0000000..85ae913 --- /dev/null +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts @@ -0,0 +1,42 @@ +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { VerificationRelationshipType } from "./types"; + +export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + + protected id: string; + protected relationshipType: VerificationRelationshipType; + + constructor(id: string, relationshipType: VerificationRelationshipType) { + super(); + + this.id = id; + this.relationshipType = relationshipType; + } + + public getId() { + return this.id; + } + + public getRelationshipType() { + return this.relationshipType; + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + relationshipType: this.getRelationshipType(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidRevokeVerificationRelationshipEvent { + return new HcsDidRevokeVerificationRelationshipEvent(tree.id, tree.relationshipType); + } +} diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts new file mode 100644 index 0000000..ef0ebe2 --- /dev/null +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -0,0 +1,82 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../../.."; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventName } from "../hcs-did-event-name"; +import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; + +export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidEvent { + public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + + protected id: string; + protected type: VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; + protected relationshipType: VerificationRelationshipType; + protected controller: string; + protected publicKey: PublicKey; + + constructor( + id: string, + relationshipType: VerificationRelationshipType, + type: VerificationRelationshipSupportedKeyType, + controller: string, + publicKey: PublicKey + ) { + super(); + + this.id = id; + this.type = type; + this.relationshipType = relationshipType; + this.controller = controller; + this.publicKey = publicKey; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getRelationshipType() { + return this.relationshipType; + } + + public getController() { + return this.controller; + } + + public getPublicKey() { + return this.publicKey; + } + + public getPublicKeyMultibase() { + return Hashing.multibase.encode(this.getPublicKey().toBytes()); + } + + public toJsonTree() { + return { + [this.name]: { + id: this.getId(), + relationshipType: this.getRelationshipType(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidUpdateVerificationRelationshipEvent( + tree.id, + tree.relationshipType, + tree.type, + tree.controller, + publicKey + ); + } +} diff --git a/src/identity/hcs/did/event/verification-relationship/types.ts b/src/identity/hcs/did/event/verification-relationship/types.ts new file mode 100644 index 0000000..a5461ee --- /dev/null +++ b/src/identity/hcs/did/event/verification-relationship/types.ts @@ -0,0 +1,8 @@ +export type VerificationRelationshipType = + | "authentication" + | "assertionMethod" + | "keyAgreement" + | "capabilityInvocation" + | "capabilityDelegation"; + +export type VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 7a029c7..7cd73f2 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -33,6 +33,7 @@ export class HcsDidEventMessageResolver { */ constructor(topicId: TopicId) { this.topicId = topicId; + this.listener = new HcsDidTopicListener(this.topicId); this.noMoreMessagesTimeout = HcsDidEventMessageResolver.DEFAULT_TIMEOUT; this.lastMessageArrivalTime = Long.fromInt(Date.now()); @@ -45,8 +46,6 @@ export class HcsDidEventMessageResolver { this.existingSignatures = []; - this.listener = this.supplyMessageListener(); - this.listener .setStartTime(new Timestamp(0, 0)) .setEndTime(Timestamp.fromDate(new Date())) @@ -77,7 +76,8 @@ export class HcsDidEventMessageResolver { } this.existingSignatures.push(envelope.getSignature()); - this.processMessage(envelope); + const message: HcsDidMessage = envelope.open(); + this.messages.push(message); } /** @@ -147,23 +147,4 @@ export class HcsDidEventMessageResolver { protected matchesSearchCriteria(message: HcsDidMessage): boolean { return true; } - - protected processMessage(envelope: MessageEnvelope): void { - const message: HcsDidMessage = envelope.open(); - - // // Preserve created and updated timestamps - // message.setUpdated(envelope.getConsensusTimestamp()); - // if (DidMethodOperation.CREATE == message.getOperation()) { - // message.setCreated(envelope.getConsensusTimestamp()); - // } else if (existing != null) { - // message.setCreated(existing.open().getCreated()); - // } - - // Add valid message to the results - this.messages.push(message); - } - - protected supplyMessageListener(): MessageListener { - return new HcsDidTopicListener(this.topicId); - } } diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index e7d4e3d..352864f 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -90,7 +90,7 @@ export class HcsDidMessage extends Message { public isValid(...args: any[]): boolean { const didTopicId: TopicId = args[0] || null; - if (this.did == null || this.event == null) { + if (this.did == null || this.event == null || this.operation == null) { return false; } @@ -143,7 +143,7 @@ export class HcsDidMessage extends Message { } public static fromJsonTree(tree: any, result?: HcsDidMessage): HcsDidMessage { - const event = HcsDidEventParser.fromBase64(tree.event); + const event = HcsDidEventParser.fromBase64(tree.operation, tree.event); if (!result) { result = new HcsDidMessage(tree.operation, tree.did, event); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 153bcc6..3caf9cd 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -3,25 +3,29 @@ import { DidDocument, DidMethodOperation, Hashing, - HcsDidDidOwnerEvent, + HcsDidCreateDidOwnerEvent, + HcsDidCreateServiceEvent, HcsDidMessage, - HcsDidServiceEvent, HcsDidTransaction, MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; import { HcsDidDeleteEvent } from "./event/hcs-did-delete-event"; import { HcsDidEvent } from "./event/hcs-did-event"; -import { ServiceTypes } from "./event/hcs-did-service-event"; +import { HcsDidRevokeServiceEvent } from "./event/service/hcs-did-revoke-service-event"; +import { HcsDidUpdateServiceEvent } from "./event/service/hcs-did-update-service-event"; +import { ServiceTypes } from "./event/service/types"; +import { HcsDidCreateVerificationMethodEvent } from "./event/verification-method/hcs-did-create-verification-method-event"; +import { HcsDidRevokeVerificationMethodEvent } from "./event/verification-method/hcs-did-revoke-verification-method-event"; +import { HcsDidUpdateVerificationMethodEvent } from "./event/verification-method/hcs-did-update-verification-method-event"; +import { VerificationMethodSupportedKeyType } from "./event/verification-method/types"; +import { HcsDidCreateVerificationRelationshipEvent } from "./event/verification-relationship/hcs-did-create-verification-relationship-event"; +import { HcsDidRevokeVerificationRelationshipEvent } from "./event/verification-relationship/hcs-did-revoke-verification-relationship-event"; +import { HcsDidUpdateVerificationRelationshipEvent } from "./event/verification-relationship/hcs-did-update-verification-relationship-event"; import { - HcsDidVerificationMethodEvent, - VerificationMethodSupportedKeyType, -} from "./event/hcs-did-verification-method-event"; -import { - HcsDidVerificationRelationshipEvent, VerificationRelationshipSupportedKeyType, VerificationRelationshipType, -} from "./event/hcs-did-verification-relationship-event"; +} from "./event/verification-relationship/types"; import { HcsDidEventMessageResolver } from "./hcs-did-event-message-resolver"; export class HcsDid { @@ -87,7 +91,7 @@ export class HcsDid { /** * Set ownership */ - const event = new HcsDidDidOwnerEvent( + const event = new HcsDidCreateDidOwnerEvent( this.identifier + "#did-root-key", this.identifier, this.privateKey.publicKey @@ -97,7 +101,7 @@ export class HcsDid { return this; } - public async resolve() { + public async resolve(): Promise { if (!this.identifier) { throw new Error("DID is not registered"); } @@ -147,8 +151,19 @@ export class HcsDid { * @param args * @returns this */ - public addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return this.addUpdateRevokeService(args, DidMethodOperation.CREATE); + public async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + this.validateClientConfig(); + + if (!args || !args.id || !args.type || !args.serviceEndpoint) { + throw new Error("Validation failed. Services args are missing"); + } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + const event = new HcsDidCreateServiceEvent(args.id, args.type, args.serviceEndpoint); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + + return this; } /** @@ -157,7 +172,16 @@ export class HcsDid { * @returns this */ public updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return this.addUpdateRevokeService(args, DidMethodOperation.UPDATE); + this.validateClientConfig(); + + if (!args || !args.id || !args.type || !args.serviceEndpoint) { + throw new Error("Validation failed. Services args are missing"); + } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + const event = new HcsDidUpdateServiceEvent(args.id, args.type, args.serviceEndpoint); + return this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); } /** @@ -165,8 +189,16 @@ export class HcsDid { * @param args * @returns this */ - public revokeService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { - return this.addUpdateRevokeService(args, DidMethodOperation.REVOKE); + public revokeService(args: { id: string }) { + this.validateClientConfig(); + if (!args || !args.id) { + throw new Error("Validation failed. Services args are missing"); + } + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + const event = new HcsDidRevokeServiceEvent(args.id); + return this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); } /** @@ -174,13 +206,25 @@ export class HcsDid { * @param args * @returns this */ - public addVerificaitonMethod(args: { + public async addVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.CREATE); + this.validateClientConfig(); + if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { + throw new Error("Validation failed. Verification Method args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + + const event = new HcsDidCreateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + + return this; } /** @@ -188,13 +232,25 @@ export class HcsDid { * @param args * @returns this */ - public updateVerificaitonMethod(args: { + public async updateVerificaitonMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.UPDATE); + this.validateClientConfig(); + if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { + throw new Error("Validation failed. Verification Method args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + + const event = new HcsDidUpdateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); + await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + + return this; } /** @@ -202,13 +258,20 @@ export class HcsDid { * @param args * @returns this */ - public revokeVerificaitonMethod(args: { - id: string; - type: VerificationMethodSupportedKeyType; - controller: string; - publicKey: PublicKey; - }) { - return this.addUpdateRevokeVerificationMethod(args, DidMethodOperation.REVOKE); + public async revokeVerificaitonMethod(args: { id: string }) { + this.validateClientConfig(); + if (!args || !args.id) { + throw new Error("Validation failed. Verification Method args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + + const event = new HcsDidRevokeVerificationMethodEvent(args.id); + await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + + return this; } /** @@ -216,14 +279,32 @@ export class HcsDid { * @param args * @returns this */ - public addVerificaitonRelationship(args: { + public async addVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.CREATE); + this.validateClientConfig(); + if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Relationship args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + + const event = new HcsDidCreateVerificationRelationshipEvent( + args.id, + args.relationshipType, + args.type, + args.controller, + args.publicKey + ); + await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + + return this; } /** @@ -231,14 +312,29 @@ export class HcsDid { * @param args * @returns this */ - public updateVerificaitonRelationship(args: { + public async updateVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; controller: string; publicKey: PublicKey; }) { - return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.UPDATE); + this.validateClientConfig(); + if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { + throw new Error("Verification Relationship args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + const event = new HcsDidUpdateVerificationRelationshipEvent( + args.id, + args.relationshipType, + args.type, + args.controller, + args.publicKey + ); + await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); } /** @@ -246,14 +342,18 @@ export class HcsDid { * @param args * @returns this */ - public revokeVerificaitonRelationship(args: { - id: string; - relationshipType: VerificationRelationshipType; - type: VerificationRelationshipSupportedKeyType; - controller: string; - publicKey: PublicKey; - }) { - return this.addUpdateRevokeVerificationRelationship(args, DidMethodOperation.REVOKE); + public async revokeVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType }) { + this.validateClientConfig(); + if (!args || !args.id) { + throw new Error("Verification Relationship args are missing"); + } + + if (!this.isEventIdValid(args.id)) { + throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + const event = new HcsDidRevokeVerificationRelationshipEvent(args.id, args.relationshipType); + await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + return this; } /** @@ -284,6 +384,10 @@ export class HcsDid { return HcsDid.DID_METHOD; } + public getMessages() { + return this.messages; + } + /** * Static methods */ @@ -371,92 +475,7 @@ export class HcsDid { return true; } - /** - * - * @param args - * @param didMethodOperation - * @returns this - */ - private async addUpdateRevokeService( - args: { id: string; type: ServiceTypes; serviceEndpoint: string }, - didMethodOperation: DidMethodOperation - ) { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - if (!args || !args.id || !args.type || !args.serviceEndpoint) { - throw new Error("Service args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } - - /** - * Build create Service message - */ - const event = new HcsDidServiceEvent(args.id, args.type, args.serviceEndpoint); - await this.submitTransaciton(didMethodOperation, event, this.privateKey); - - return this; - } - - /** - * - * @param args - * @param didMethodOperation - * @returns this - */ - private async addUpdateRevokeVerificationMethod( - args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; publicKey: PublicKey }, - didMethodOperation: DidMethodOperation - ) { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Method args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } - - /** - * Build create Service message - */ - const event = new HcsDidVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); - await this.submitTransaciton(didMethodOperation, event, this.privateKey); - - return this; - } - - /** - * Add Update Revoke Verification Relationship Event Message Submission - * @param args - * @param didMethodOperation - * @returns this - */ - private async addUpdateRevokeVerificationRelationship( - args: { - id: string; - relationshipType: VerificationRelationshipType; - type: VerificationRelationshipSupportedKeyType; - controller: string; - publicKey: PublicKey; - }, - didMethodOperation: DidMethodOperation - ) { + private validateClientConfig() { if (!this.privateKey) { throw new Error("privateKey is missing"); } @@ -464,28 +483,6 @@ export class HcsDid { if (!this.client) { throw new Error("Client configuration is missing"); } - - if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Relationship args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } - - /** - * Build create Service message - */ - const event = new HcsDidVerificationRelationshipEvent( - args.id, - args.relationshipType, - args.type, - args.controller, - args.publicKey - ); - await this.submitTransaciton(didMethodOperation, event, this.privateKey); - - return this; } /** diff --git a/src/index.ts b/src/index.ts index a253088..4418214 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,10 +3,10 @@ import { DidDocumentJsonProperties } from "./identity/did-document-json-properti import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { DidSyntax } from "./identity/did-syntax"; -import { HcsDidDidOwnerEvent } from "./identity/hcs/did/event/hcs-did-did-owner-event"; -import { HcsDidServiceEvent } from "./identity/hcs/did/event/hcs-did-service-event"; -import { HcsDidVerificationMethodEvent } from "./identity/hcs/did/event/hcs-did-verification-method-event"; -import { HcsDidVerificationRelationshipEvent } from "./identity/hcs/did/event/hcs-did-verification-relationship-event"; +import { HcsDidCreateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-create-did-owner-event"; +import { HcsDidCreateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-create-service-event"; +import { HcsDidCreateVerificationMethodEvent } from "./identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event"; +import { HcsDidCreateVerificationRelationshipEvent } from "./identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; import { HcsDid } from "./identity/hcs/did/hcs-did"; import { HcsDidEventMessageResolver } from "./identity/hcs/did/hcs-did-event-message-resolver"; import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; @@ -37,10 +37,10 @@ export { HcsDidEventMessageResolver, HcsDidTopicListener, HcsDidTransaction, - HcsDidDidOwnerEvent, - HcsDidServiceEvent, - HcsDidVerificationMethodEvent, - HcsDidVerificationRelationshipEvent, + HcsDidCreateDidOwnerEvent, + HcsDidCreateServiceEvent, + HcsDidCreateVerificationMethodEvent as HcsDidVerificationMethodEvent, + HcsDidCreateVerificationRelationshipEvent as HcsDidVerificationRelationshipEvent, JsonClass, Message, MessageEnvelope, diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts new file mode 100644 index 0000000..07f7e69 --- /dev/null +++ b/test/integration/hcs-did.test.ts @@ -0,0 +1,811 @@ +import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; +import { Hashing, HcsDid } from "../../dist"; + +const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; +const OPERATOR_ID = ""; +const OPERATOR_KEY = ""; +// testnet, previewnet, mainnet +const NETWORK = "testnet"; + +// hedera +const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; + +describe("HcsDid", () => { + describe("#constructor", () => { + it("throws error because of missing identifier and privateKey", () => { + expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); + }); + + it("successfuly builds HcsDid with private key only", () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + expect(did.getIdentifier()).toEqual(undefined); + expect(did.getPrivateKey()).toEqual(privateKey); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId()).toEqual(undefined); + expect(did.getNetwork()).toEqual(undefined); + }); + + it("successfuly builds HcsDid with identifier only", () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + + it("throws error if passed identifer is invalid", () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((identifier) => { + expect(() => { + new HcsDid({ identifier }); + }).toThrowError(); + }); + }); + + it("accepts client parameter", () => { + const client = Client.forTestnet(); + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, client }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(client); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + }); + + describe("#register", () => { + let client; + + beforeAll(() => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if DID is already registered", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.register(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("DID is already registered"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.register(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("creates new DID by registering a topic and submitting first message", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + const result = await did.register(); + + expect(result).toEqual(did); + + expect(did.getTopicId().toString()).toMatch(TOPIC_REGEXP); + expect(did.getIdentifier()).toEqual( + `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did + .getTopicId() + .toString()}` + ); + expect(did.getPrivateKey()).toEqual(privateKey); + expect(did.getClient()).toEqual(client); + expect(did.getNetwork()).toEqual("testnet"); + + const messages = await readtTopicMessages(did.getTopicId(), client); + + expect(messages.length).toEqual(1); + }); + }); + + describe("#resolve", () => { + let client; + + beforeAll(() => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error about unregistered DID", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.resolve(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + + expect(err.message).toEqual("DID is not registered"); + } + }); + + it("throws error about missing Client parameter", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.resolve(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("successfuly resolves just registered DID", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + }); + + describe("Add Update and Revoke Service meta-information", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("throws error if Service arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addService(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Validation failed. Services args are missing"); + } + }); + + it("thorws error if event id is not valid", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + try { + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#invalid-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + } + }); + + it("publish a new Service message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + service: [ + { + id: `${did.getIdentifier()}#service-1`, + serviceEndpoint: "https://example.com/vcs", + type: "LinkedDomains", + }, + ], + }); + + // DIDOwner and Service event + expect(did.getMessages().length).toEqual(2); + }); + + it("publish an update Service message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + await did.updateService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/did", + }); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + service: [ + { + id: `${did.getIdentifier()}#service-1`, + serviceEndpoint: "https://example.com/did", + type: "LinkedDomains", + }, + ], + }); + + expect(did.getMessages().length).toEqual(3); + }); + + it("publish a revoke Service message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + await did.revokeService({ + id: did.getIdentifier() + "#service-1", + }); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + expect(did.getMessages().length).toEqual(3); + }); + }); + + describe("Add Update and Revoke VerificationMethod meta-information", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.addVerificaitonMethod(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addVerificaitonMethod(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("throws error if Verification Method arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addVerificaitonMethod(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Validation failed. Verification Method args are missing"); + } + }); + + it("publish a new VerificationMethod message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await did.register(); + await did.addVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + /** + * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`${did.getIdentifier()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: did.getIdentifier(), + id: newVerificaitonDid, + publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(2); + }); + + it("publish an update VerificationMethod message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + + await did.register(); + await did.addVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + await did.updateVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, + }); + + /** + * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`${did.getIdentifier()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: did.getIdentifier(), + id: newVerificaitonDid, + publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(3); + }); + it("publish a revoke VerificationMethod message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await did.register(); + await did.addVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + await did.revokeVerificaitonMethod({ + id: newVerificaitonDid, + }); + + /** + * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + */ + await new Promise((resolve) => setTimeout(resolve, 9000)); + + console.log(`${did.getIdentifier()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(3); + }); + }); + + describe("Add Update and Revoke VerificationMethod Relationship meta-information", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + it("throws error if privatekey is missing", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + try { + await did.addVerificaitonMethod(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error if client configuration is missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + try { + await did.addVerificaitonMethod(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("throws error if Verification Relationship arguments are missing", async () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey, client }); + + try { + await did.addVerificaitonRelationship(undefined); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Verification Relationship args are missing"); + } + }); + + it("publish a new VerificationRelationship message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await ( + await did.register() + ).addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificaitonDid}`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: did.getIdentifier(), + id: newVerificaitonDid, + publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(2); + }); + it("publish an update VerificationRelationship message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + + await did.register(); + await did.addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + await did.updateVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, + }); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificaitonDid}`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: did.getIdentifier(), + id: newVerificaitonDid, + publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(3); + }); + + it("publish a revoke VerificationRelationship message and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + //new verificaiton DID and publickey + const newVerificaitonDid = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + + await did.register(); + await did.addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + await did.revokeVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + }); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + // DIDOwner and VerificationMethod event + expect(did.getMessages().length).toEqual(3); + }); + }); +}); + +/** + * Test Helpers + */ + +async function readtTopicMessages(topicId, client, timeout = null) { + const messages = []; + + new TopicMessageQuery() + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, null, (msg) => { + messages.push(msg); + }); + + /** + * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read + */ + await new Promise((resolve) => setTimeout(resolve, timeout || 6000)); + + return messages; +} diff --git a/test/src/did/hcs-did.test.ts b/test/src/did/hcs-did.test.ts deleted file mode 100644 index b01c3ce..0000000 --- a/test/src/did/hcs-did.test.ts +++ /dev/null @@ -1,463 +0,0 @@ -import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; -import { Hashing, HcsDid } from "../../../dist"; - -const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; -const OPERATOR_ID = "0.0.12710106"; -const OPERATOR_KEY = "302e020100300506032b657004220420bc45334a1313725653d3513fcc67edb15f76985f537ca567e2177b0be9906d49"; -// testnet, previewnet, mainnet -const NETWORK = "testnet"; - -// hedera, kabuto (note kabuto not available on previewnet) -const MIRROR_PROVIDER = "hedera"; - -describe("HcsDid", () => { - describe("#constructor", () => { - it("throws error because of missing identifier and privateKey", () => { - expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); - }); - - it("successfuly builds HcsDid with private key only", () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - expect(did.getIdentifier()).toEqual(undefined); - expect(did.getPrivateKey()).toEqual(privateKey); - expect(did.getClient()).toEqual(undefined); - expect(did.getTopicId()).toEqual(undefined); - expect(did.getNetwork()).toEqual(undefined); - }); - - it("successfuly builds HcsDid with identifier only", () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - expect(did.getIdentifier()).toEqual(identifier); - expect(did.getPrivateKey()).toEqual(undefined); - expect(did.getClient()).toEqual(undefined); - expect(did.getTopicId().toString()).toEqual("0.0.29613327"); - expect(did.getNetwork()).toEqual("testnet"); - }); - - it("throws error if passed identifer is invalid", () => { - [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ].forEach((identifier) => { - expect(() => { - new HcsDid({ identifier }); - }).toThrowError(); - }); - }); - - it("accepts client parameter", () => { - const client = Client.forTestnet(); - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier, client }); - - expect(did.getIdentifier()).toEqual(identifier); - expect(did.getPrivateKey()).toEqual(undefined); - expect(did.getClient()).toEqual(client); - expect(did.getTopicId().toString()).toEqual("0.0.29613327"); - expect(did.getNetwork()).toEqual("testnet"); - }); - }); - - describe("#register", () => { - let client; - - beforeAll(() => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if DID is already registered", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.register(); - } catch (err) { - expect(err).toBeInstanceOf(Error); - - expect(err.message).toEqual("DID is already registered"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.register(); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); - } - }); - - it("creates new DID by registering a topic and submitting first message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - const result = await did.register(); - - expect(result).toEqual(did); - - expect(did.getTopicId().toString()).toMatch(TOPIC_REGEXP); - expect(did.getIdentifier()).toEqual( - `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_${did - .getTopicId() - .toString()}` - ); - expect(did.getPrivateKey()).toEqual(privateKey); - expect(did.getClient()).toEqual(client); - expect(did.getNetwork()).toEqual("testnet"); - - const messages = await readtTopicMessages(did.getTopicId(), client); - - expect(messages.length).toEqual(1); - }); - }); - - describe("#resolve", () => { - let client; - - beforeAll(() => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error about unregistered DID", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.resolve(); - } catch (err) { - expect(err).toBeInstanceOf(Error); - - expect(err.message).toEqual("DID is not registered"); - } - }); - - it("throws error about missing Client parameter", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.resolve(); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); - } - }); - - it("successfuly resolves just registered DID", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - await did.register(); - - const newLocal: any = await did.resolve(); - const didDocument = newLocal.toJsonTree(); - - expect(didDocument).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${did.getIdentifier()}#did-root-key`], - authentication: [`${did.getIdentifier()}#did-root-key`], - id: did.getIdentifier(), - verificationMethod: [ - { - controller: did.getIdentifier(), - id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], - }); - }); - }); - - describe("Add Service meta-information", () => { - let client; - - beforeAll(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - client.setOperator(operatorId, operatorKey); - }); - - it("throws error if privatekey is missing", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - try { - await did.addService(undefined); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); - } - }); - - it("throws error if client configuration is missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - try { - await did.addService(undefined); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); - } - }); - - it("throws error if Service arguments are missing", async () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey, client }); - - try { - await did.addService(undefined); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Service args are missing"); - } - }); - - it("thorws error if event id is not valid", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - try { - await did.register(); - await did.addService({ - id: did.getIdentifier() + "#invalid-1", - type: "LinkedDomains", - serviceEndpoint: "https://test.meeco.me/vcs", - }); - } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } - }); - - it("publish a new Service message", async () => { - const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const did = new HcsDid({ privateKey, client }); - - await did.register(); - await did.addService({ - id: did.getIdentifier() + "#service-1", - type: "LinkedDomains", - serviceEndpoint: "https://test.meeco.me/vcs", - }); - - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - const messages = await readtTopicMessages(did.getTopicId(), client, 15000); - - // DIDOwner and Service event - expect(messages.length).toEqual(2); - }); - }); - - // describe("Add VerificationMethod meta-information", async () => { - // let client; - - // before(async () => { - // const operatorId = AccountId.fromString(OPERATOR_ID); - // const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - // client = Client.forTestnet(); - // client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - // client.setOperator(operatorId, operatorKey); - // }); - - // it("throws error if privatekey is missing", async () => { - // const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - // const did = new HcsDid({ identifier }); - - // try { - // await did.addVerificaitonMethod({}); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "privateKey is missing"); - // } - // }); - - // it("throws error if client configuration is missing", async () => { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid({ privateKey }); - - // try { - // await did.addVerificaitonMethod({}); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "Client configuration is missing"); - // } - // }); - - // it("throws error if Verification Method arguments are missing", async () => { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid({ privateKey, client }); - - // try { - // await did.addVerificaitonMethod(); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "Verification Method args are missing"); - // } - // }); - - // it("publish a new VerificationMethod message", async () => { - // const privateKey = PrivateKey.fromString(OPERATOR_KEY); - // const did = new HcsDid({ privateKey, client }); - - // //new verificaiton DID and publickey - // const newVerificaitonDid = - // "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#public-key-0"; - // const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - - // await ( - // await did.register() - // ).addVerificaitonMethod({ - // id: newVerificaitonDid, - // type: "Ed25519VerificationKey2018", - // controller: did.getIdentifier(), - // publicKey, - // }); - - // /** - // * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node - // */ - // await new Promise((resolve) => setTimeout(resolve, 9000)); - - // console.log(`${did.getIdentifier()}`); - // console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - // const messages = await readtTopicMessages(did.getTopicId(), client); - - // // DIDOwner and VerificationMethod event - // assert.equal(messages.length, 2); - // }).timeout(MINUTE_TIMEOUT_LIMIT); - // }); - - // describe("Add VerificationMethod Relationship meta-information", async () => { - // let client; - - // before(async () => { - // const operatorId = AccountId.fromString(OPERATOR_ID); - // const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - // client = Client.forTestnet(); - // client.setMirrorNetwork(["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]); - // client.setOperator(operatorId, operatorKey); - // }); - - // it("throws error if privatekey is missing", async () => { - // const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - // const did = new HcsDid({ identifier }); - - // try { - // await did.addVerificaitonMethod({}); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "privateKey is missing"); - // } - // }); - - // it("throws error if client configuration is missing", async () => { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid({ privateKey }); - - // try { - // await did.addVerificaitonMethod({}); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "Client configuration is missing"); - // } - // }); - - // it("throws error if Verification Relationship arguments are missing", async () => { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid({ privateKey, client }); - - // try { - // await did.addVerificaitonRelationship(); - // } catch (err) { - // assert.instanceOf(err, Error); - // assert.equal(err.message, "Verification Relationship args are missing"); - // } - // }); - - // it("publish a new VerificationRelationship message", async () => { - // const privateKey = PrivateKey.fromString(OPERATOR_KEY); - // const did = new HcsDid({ privateKey, client }); - - // //new verificaiton DID and publickey - // const newVerificaitonDid = - // "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#delegate-key1"; - // const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - - // await ( - // await did.register() - // ).addVerificaitonRelationship({ - // id: newVerificaitonDid, - // relationshipType: "authentication", - // type: "Ed25519VerificationKey2018", - // controller: did.getIdentifier(), - // publicKey, - // }); - - // /** - // * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node - // */ - // await new Promise((resolve) => setTimeout(resolve, 9000)); - - // console.log(`${did.getIdentifier()}`); - // console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - - // const messages = await readtTopicMessages(did.getTopicId(), client); - - // // DIDOwner and VerificationMethod event - // assert.equal(messages.length, 2); - // }).timeout(MINUTE_TIMEOUT_LIMIT); - // }); -}); - -/** - * Test Helpers - */ - -async function readtTopicMessages(topicId, client, timeout = null) { - const messages = []; - - new TopicMessageQuery() - .setTopicId(topicId) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, null, (msg) => { - messages.push(msg); - }); - - /** - * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read - */ - await new Promise((resolve) => setTimeout(resolve, timeout || 6000)); - - return messages; -} diff --git a/test/src/did-document.test.ts b/test/unit/did-document.test.ts similarity index 81% rename from test/src/did-document.test.ts rename to test/unit/did-document.test.ts index 4aba776..7a6c303 100644 --- a/test/src/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -3,12 +3,12 @@ import { DidDocument, DidMethodOperation, Hashing, - HcsDidDidOwnerEvent, + HcsDidCreateDidOwnerEvent, + HcsDidCreateServiceEvent, HcsDidMessage, - HcsDidServiceEvent, - HcsDidVerificationMethodEvent, - HcsDidVerificationRelationshipEvent, } from "../../dist"; +import { HcsDidCreateVerificationMethodEvent } from "../../dist/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event"; +import { HcsDidCreateVerificationRelationshipEvent } from "../../dist/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; describe("DidDocument", () => { describe("#toJsonTree", () => { @@ -36,7 +36,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) ), ]; const doc = new DidDocument(identifier, messages); @@ -65,17 +65,21 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://test.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationMethodEvent( + new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, @@ -85,7 +89,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-2", "capabilityDelegation", "Ed25519VerificationKey2018", @@ -144,22 +148,30 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://test.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidServiceEvent(identifier + "#service-2", "LinkedDomains", "https://test2.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-2", + "LinkedDomains", + "https://test2.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationMethodEvent( + new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, @@ -169,7 +181,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-2", "capabilityDelegation", "Ed25519VerificationKey2018", @@ -180,7 +192,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-3", "authentication", "Ed25519VerificationKey2018", @@ -191,12 +203,16 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.UPDATE, identifier, - new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://new.test.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://new.test.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.UPDATE, identifier, - new HcsDidVerificationMethodEvent( + new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, @@ -206,7 +222,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.UPDATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-2", "capabilityDelegation", "Ed25519VerificationKey2018", @@ -273,22 +289,30 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://test.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidServiceEvent(identifier + "#service-2", "LinkedDomains", "https://test2.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-2", + "LinkedDomains", + "https://test2.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationMethodEvent( + new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, @@ -298,7 +322,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-2", "capabilityDelegation", "Ed25519VerificationKey2018", @@ -309,7 +333,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.CREATE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-3", "authentication", "Ed25519VerificationKey2018", @@ -320,12 +344,16 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.REVOKE, identifier, - new HcsDidServiceEvent(identifier + "#service-1", "LinkedDomains", "https://test.identity.com") + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://test.identity.com" + ) ), new HcsDidMessage( DidMethodOperation.REVOKE, identifier, - new HcsDidVerificationMethodEvent( + new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, @@ -335,7 +363,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.REVOKE, identifier, - new HcsDidVerificationRelationshipEvent( + new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-2", "capabilityDelegation", "Ed25519VerificationKey2018", diff --git a/test/src/hashing.test.ts b/test/unit/hashing.test.ts similarity index 100% rename from test/src/hashing.test.ts rename to test/unit/hashing.test.ts diff --git a/test/src/did/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts similarity index 97% rename from test/src/did/hcs-did-message.test.ts rename to test/unit/hcs-did-message.test.ts index 51334de..0e49aa6 100644 --- a/test/src/did/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -1,6 +1,5 @@ import crypto from "crypto"; -import { TopicId, PrivateKey, Client } from "@hashgraph/sdk"; -import { HcsDidMessage, MessageEnvelope, DidMethodOperation, HcsDid, ArraysUtils } from "../../../dist"; +import { TopicId } from "@hashgraph/sdk"; const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); From 57bb4983291c4c70ab62598a246236e1c96d09b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 8 Feb 2022 11:43:13 +0100 Subject: [PATCH 054/133] Implementation of did delete event --- src/identity/did-document.ts | 24 ++++++++++++ .../hcs/did/event/hcs-did-delete-event.ts | 10 +++-- .../hcs/did/event/hcs-did-event-name.ts | 2 +- .../hcs/did/event/hcs-did-event-parser.ts | 7 ++-- src/identity/hcs/did/hcs-did.ts | 38 +++++++++++-------- test/integration/hcs-did.test.ts | 30 +++++++++++++-- 6 files changed, 84 insertions(+), 27 deletions(-) diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index a0a3cd5..5fb86cc 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -31,6 +31,10 @@ export class DidDocument { this.processMessages(messages); } + public hasOwner() { + return this.owners.size > 0; + } + public getContext(): string { return this.context; } @@ -99,6 +103,9 @@ export class DidDocument { case DidMethodOperation.REVOKE: this.processRevokeMessage(msg); return; + case DidMethodOperation.DELETE: + this.processDeleteMessage(msg); + return; default: /** * TODO: for debugging - later we should probably try to ignore such messages @@ -330,4 +337,21 @@ export class DidDocument { throw new Error("Not supported event detected!"); } } + + private processDeleteMessage(message: HcsDidMessage): void { + const event = message.getEvent(); + + switch (event.name) { + case HcsDidEventName.DID: + this.owners.clear(); + this.services.clear(); + this.verificationMethods.clear(); + Object.keys(this.verificationRelationships).forEach( + (relName) => (this.verificationRelationships[relName] = []) + ); + return; + default: + throw new Error("Not supported event detected!"); + } + } } diff --git a/src/identity/hcs/did/event/hcs-did-delete-event.ts b/src/identity/hcs/did/event/hcs-did-delete-event.ts index ed0ae83..858b20b 100644 --- a/src/identity/hcs/did/event/hcs-did-delete-event.ts +++ b/src/identity/hcs/did/event/hcs-did-delete-event.ts @@ -2,7 +2,7 @@ import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventName } from "./hcs-did-event-name"; export class HcsDidDeleteEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.DELETE; + public readonly name = HcsDidEventName.DID; constructor() { super(); @@ -13,15 +13,17 @@ export class HcsDidDeleteEvent extends HcsDidEvent { } public toJsonTree() { - return { - [this.name]: {}, - }; + return null; } public toJSON() { return JSON.stringify(this.toJsonTree()); } + public getBase64() { + return null; + } + static fromJsonTree(tree: any): HcsDidDeleteEvent { return new HcsDidDeleteEvent(); } diff --git a/src/identity/hcs/did/event/hcs-did-event-name.ts b/src/identity/hcs/did/event/hcs-did-event-name.ts index 2ccf986..e0d7e43 100644 --- a/src/identity/hcs/did/event/hcs-did-event-name.ts +++ b/src/identity/hcs/did/event/hcs-did-event-name.ts @@ -3,5 +3,5 @@ export enum HcsDidEventName { VERIFICATION_METHOD = "VerificationMethod", VERIFICATION_RELATIONSHIP = "VerificationRelationship", SERVICE = "Service", - DELETE = "Delete", + DID = "DID", } diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index b74bb20..6e13a49 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -31,13 +31,14 @@ const EVENT_NAME_TO_CLASS = { [HcsDidEventName.VERIFICATION_METHOD]: HcsDidRevokeVerificationMethodEvent, [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidRevokeVerificationRelationshipEvent, }, - [DidMethodOperation.DELETE]: { - [HcsDidEventName.DELETE]: HcsDidDeleteEvent, - }, }; export class HcsDidEventParser { static fromBase64(operation: DidMethodOperation, eventBase64: any): HcsDidEvent { + if (operation === DidMethodOperation.DELETE) { + return HcsDidDeleteEvent.fromJsonTree(null); + } + const tree = JSON.parse(Hashing.base64.decode(eventBase64)); const eventsByOpration = EVENT_NAME_TO_CLASS[operation]; const eventName = Object.keys(eventsByOpration).find((eventName) => !!tree[eventName]); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 3caf9cd..9415a92 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -40,6 +40,7 @@ export class HcsDid { protected messages: HcsDidMessage[]; protected resolvedAt: Timestamp; + protected document: DidDocument; constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { this.identifier = args.identifier; @@ -62,10 +63,6 @@ export class HcsDid { */ public async register() { - if (this.identifier) { - throw new Error("DID is already registered"); - } - if (!this.privateKey) { throw new Error("privateKey is missing"); } @@ -74,19 +71,27 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - /** - * Create topic - */ - const topicCreateTransaction = new TopicCreateTransaction() - .setMaxTransactionFee(HcsDid.TRANSACTION_FEE) - .setAdminKey(this.privateKey.publicKey); + if (this.identifier) { + await this.resolve(); + + if (this.document.hasOwner()) { + throw new Error("DID is already registered"); + } + } else { + /** + * Create topic + */ + const topicCreateTransaction = new TopicCreateTransaction() + .setMaxTransactionFee(HcsDid.TRANSACTION_FEE) + .setAdminKey(this.privateKey.publicKey); - const txId = await topicCreateTransaction.execute(this.client); - const topicId = (await txId.getReceipt(this.client)).topicId; + const txId = await topicCreateTransaction.execute(this.client); + const topicId = (await txId.getReceipt(this.client)).topicId; - this.topicId = topicId; - this.network = this.client.networkName; - this.identifier = this.buildIdentifier(this.privateKey.publicKey); + this.topicId = topicId; + this.network = this.client.networkName; + this.identifier = this.buildIdentifier(this.privateKey.publicKey); + } /** * Set ownership @@ -115,7 +120,8 @@ export class HcsDid { .setTimeout(3000) .whenFinished((messages) => { this.messages = messages; - resolve(new DidDocument(this.identifier, this.messages)); + this.document = new DidDocument(this.identifier, this.messages); + resolve(this.document); }) .onError((err) => { console.log(err); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 07f7e69..abd5a32 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -84,14 +84,15 @@ describe("HcsDid", () => { }); it("throws error if DID is already registered", async () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); try { await did.register(); } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("DID is already registered"); } }); @@ -130,6 +131,29 @@ describe("HcsDid", () => { expect(messages.length).toEqual(1); }); + + it("deletes DID document and registers it again without creating a new topic", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + const topicId = did.getTopicId(); + + let messages = await readtTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(1); + + await did.delete(); + expect(did.getTopicId()).toEqual(topicId); + + messages = await readtTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); + + await did.register(); + expect(did.getTopicId()).toEqual(topicId); + + messages = await readtTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(3); + }); }); describe("#resolve", () => { From 7a98c5fac654ed5c4c0b2ff8b0f8ec86838d0ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 8 Feb 2022 13:02:02 +0100 Subject: [PATCH 055/133] Cleanup; fixes; renamings --- src/identity/did-document-json-properties.ts | 3 - src/identity/did-document.ts | 42 +++++----- .../{ => document}/hcs-did-delete-event.ts | 6 +- .../hcs/did/event/hcs-did-event-parser.ts | 24 +++--- ...t-name.ts => hcs-did-event-target-name.ts} | 4 +- src/identity/hcs/did/event/hcs-did-event.ts | 4 +- .../owner/hcs-did-create-did-owner-event.ts | 6 +- .../service/hcs-did-create-service-event.ts | 6 +- .../service/hcs-did-revoke-service-event.ts | 6 +- .../service/hcs-did-update-service-event.ts | 50 +---------- ...cs-did-create-verification-method-event.ts | 6 +- ...cs-did-revoke-verification-method-event.ts | 6 +- ...cs-did-update-verification-method-event.ts | 64 +------------- ...-create-verification-relationship-event.ts | 6 +- ...-revoke-verification-relationship-event.ts | 6 +- ...-update-verification-relationship-event.ts | 83 +------------------ src/identity/hcs/did/hcs-did.ts | 2 +- src/identity/hcs/message.interface.ts | 4 - src/index.ts | 18 +++- test/unit/did-document.test.ts | 4 +- 20 files changed, 88 insertions(+), 262 deletions(-) rename src/identity/hcs/did/event/{ => document}/hcs-did-delete-event.ts (70%) rename src/identity/hcs/did/event/{hcs-did-event-name.ts => hcs-did-event-target-name.ts} (72%) delete mode 100644 src/identity/hcs/message.interface.ts diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index 4ff8670..f094fd5 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -8,7 +8,4 @@ export module DidDocumentJsonProperties { export const CAPABILITY_INVOCATION = "capabilityInvocation"; export const CAPABILITY_DELEGATION = "capabilityDelegation"; export const SERVICE = "service"; - export const CREATED = "created"; - export const UPDATED = "updated"; - export const PROOF = "proof"; } diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 5fb86cc..556b13e 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -1,11 +1,12 @@ import { DidMethodOperation, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidMessage } from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; -import { HcsDidEventName } from "./hcs/did/event/hcs-did-event-name"; +import { HcsDidEventTargetName } from "./hcs/did/event/hcs-did-event-target-name"; import { HcsDidUpdateServiceEvent } from "./hcs/did/event/service/hcs-did-update-service-event"; import { HcsDidCreateVerificationMethodEvent } from "./hcs/did/event/verification-method/hcs-did-create-verification-method-event"; import { HcsDidUpdateVerificationMethodEvent } from "./hcs/did/event/verification-method/hcs-did-update-verification-method-event"; import { HcsDidCreateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; +import { HcsDidRevokeVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event"; import { HcsDidUpdateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; export class DidDocument { @@ -118,8 +119,8 @@ export class DidDocument { private processCreateMessage(message: HcsDidMessage): void { const event = message.getEvent(); - switch (event.name) { - case HcsDidEventName.DID_OWNER: + switch (event.targetName) { + case HcsDidEventTargetName.DID_OWNER: if (this.owners.has(event.getId())) { console.warn(`Duplicate create DIDOwner event ID: ${event.getId()}. Event will be ignored...`); return; @@ -132,7 +133,7 @@ export class DidDocument { publicKeyMultibase: (event as HcsDidCreateDidOwnerEvent).getPublicKeyMultibase(), }); return; - case HcsDidEventName.SERVICE: + case HcsDidEventTargetName.SERVICE: if (this.services.has(event.getId())) { console.warn(`Duplicate create Service event ID: ${event.getId()}. Event will be ignored...`); return; @@ -144,7 +145,7 @@ export class DidDocument { serviceEndpoint: (event as HcsDidCreateServiceEvent).getServiceEndpoint(), }); return; - case HcsDidEventName.VERIFICATION_METHOD: + case HcsDidEventTargetName.VERIFICATION_METHOD: if (this.verificationMethods.has(event.getId())) { console.warn( `Duplicate create VerificationMethod event ID: ${event.getId()}. Event will be ignored...` @@ -159,7 +160,7 @@ export class DidDocument { publicKeyMultibase: (event as HcsDidCreateVerificationMethodEvent).getPublicKeyMultibase(), }); return; - case HcsDidEventName.VERIFICATION_RELATIONSHIP: + case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidCreateVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { @@ -199,14 +200,14 @@ export class DidDocument { private processUpdateMessage(message: HcsDidMessage): void { const event = message.getEvent(); - switch (event.name) { - case HcsDidEventName.DID_OWNER: + switch (event.targetName) { + case HcsDidEventTargetName.DID_OWNER: /** * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. */ console.warn(`Update DidOwner event is not supported. Event will be ignored...`); return; - case HcsDidEventName.SERVICE: + case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { console.warn( `Update Service event: service with ID ${event.getId()} was not found in the document. Event will be ignored...` @@ -219,7 +220,7 @@ export class DidDocument { serviceEndpoint: (event as HcsDidUpdateServiceEvent).getServiceEndpoint(), }); return; - case HcsDidEventName.VERIFICATION_METHOD: + case HcsDidEventTargetName.VERIFICATION_METHOD: if (!this.verificationMethods.has(event.getId())) { console.warn( `Update VerificationMethod event: verificationMethod with ID: ${event.getId()} was not found in the document. Event will be ignored...` @@ -234,7 +235,7 @@ export class DidDocument { publicKeyMultibase: (event as HcsDidUpdateVerificationMethodEvent).getPublicKeyMultibase(), }); return; - case HcsDidEventName.VERIFICATION_RELATIONSHIP: + case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { @@ -270,14 +271,14 @@ export class DidDocument { private processRevokeMessage(message: HcsDidMessage): void { const event = message.getEvent(); - switch (event.name) { - case HcsDidEventName.DID_OWNER: + switch (event.targetName) { + case HcsDidEventTargetName.DID_OWNER: /** * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. */ console.warn(`Revoke DidOwner event is not supported. Event will be ignored...`); return; - case HcsDidEventName.SERVICE: + case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { console.warn(`Revoke Service event: service event ID: ${event.getId()}. Event will be ignored...`); return; @@ -285,7 +286,7 @@ export class DidDocument { this.services.delete(event.getId()); return; - case HcsDidEventName.VERIFICATION_METHOD: + case HcsDidEventTargetName.VERIFICATION_METHOD: if (!this.verificationMethods.has(event.getId())) { console.warn( `Revoke VerificationMethod event: verificationMethod with ID: ${event.getId()}. Event will be ignored...` @@ -302,8 +303,8 @@ export class DidDocument { }); return; - case HcsDidEventName.VERIFICATION_RELATIONSHIP: - const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); + case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: + const type = (event as HcsDidRevokeVerificationRelationshipEvent).getRelationshipType(); if (this.verificationRelationships[type]) { if (!this.verificationRelationships[type].includes(event.getId())) { @@ -341,8 +342,8 @@ export class DidDocument { private processDeleteMessage(message: HcsDidMessage): void { const event = message.getEvent(); - switch (event.name) { - case HcsDidEventName.DID: + switch (event.targetName) { + case HcsDidEventTargetName.Document: this.owners.clear(); this.services.clear(); this.verificationMethods.clear(); @@ -351,6 +352,9 @@ export class DidDocument { ); return; default: + /** + * TODO: for debugging - later we should probably try to ignore such messages + */ throw new Error("Not supported event detected!"); } } diff --git a/src/identity/hcs/did/event/hcs-did-delete-event.ts b/src/identity/hcs/did/event/document/hcs-did-delete-event.ts similarity index 70% rename from src/identity/hcs/did/event/hcs-did-delete-event.ts rename to src/identity/hcs/did/event/document/hcs-did-delete-event.ts index 858b20b..dbd977c 100644 --- a/src/identity/hcs/did/event/hcs-did-delete-event.ts +++ b/src/identity/hcs/did/event/document/hcs-did-delete-event.ts @@ -1,8 +1,8 @@ -import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; export class HcsDidDeleteEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.DID; + public readonly targetName = HcsDidEventTargetName.Document; constructor() { super(); diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 6e13a49..365d69e 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -1,8 +1,8 @@ import { Hashing } from "../../../.."; import { DidMethodOperation } from "../../../did-method-operation"; -import { HcsDidDeleteEvent } from "./hcs-did-delete-event"; +import { HcsDidDeleteEvent } from "./document/hcs-did-delete-event"; import { HcsDidEvent } from "./hcs-did-event"; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { HcsDidEventTargetName } from "./hcs-did-event-target-name"; import { HcsDidCreateDidOwnerEvent } from "./owner/hcs-did-create-did-owner-event"; import { HcsDidCreateServiceEvent } from "./service/hcs-did-create-service-event"; import { HcsDidRevokeServiceEvent } from "./service/hcs-did-revoke-service-event"; @@ -16,20 +16,20 @@ import { HcsDidUpdateVerificationRelationshipEvent } from "./verification-relati const EVENT_NAME_TO_CLASS = { [DidMethodOperation.CREATE]: { - [HcsDidEventName.DID_OWNER]: HcsDidCreateDidOwnerEvent, - [HcsDidEventName.SERVICE]: HcsDidCreateServiceEvent, - [HcsDidEventName.VERIFICATION_METHOD]: HcsDidCreateVerificationMethodEvent, - [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidCreateVerificationRelationshipEvent, + [HcsDidEventTargetName.DID_OWNER]: HcsDidCreateDidOwnerEvent, + [HcsDidEventTargetName.SERVICE]: HcsDidCreateServiceEvent, + [HcsDidEventTargetName.VERIFICATION_METHOD]: HcsDidCreateVerificationMethodEvent, + [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidCreateVerificationRelationshipEvent, }, [DidMethodOperation.UPDATE]: { - [HcsDidEventName.SERVICE]: HcsDidUpdateServiceEvent, - [HcsDidEventName.VERIFICATION_METHOD]: HcsDidUpdateVerificationMethodEvent, - [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidUpdateVerificationRelationshipEvent, + [HcsDidEventTargetName.SERVICE]: HcsDidUpdateServiceEvent, + [HcsDidEventTargetName.VERIFICATION_METHOD]: HcsDidUpdateVerificationMethodEvent, + [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidUpdateVerificationRelationshipEvent, }, [DidMethodOperation.REVOKE]: { - [HcsDidEventName.SERVICE]: HcsDidRevokeServiceEvent, - [HcsDidEventName.VERIFICATION_METHOD]: HcsDidRevokeVerificationMethodEvent, - [HcsDidEventName.VERIFICATION_RELATIONSHIP]: HcsDidRevokeVerificationRelationshipEvent, + [HcsDidEventTargetName.SERVICE]: HcsDidRevokeServiceEvent, + [HcsDidEventTargetName.VERIFICATION_METHOD]: HcsDidRevokeVerificationMethodEvent, + [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidRevokeVerificationRelationshipEvent, }, }; diff --git a/src/identity/hcs/did/event/hcs-did-event-name.ts b/src/identity/hcs/did/event/hcs-did-event-target-name.ts similarity index 72% rename from src/identity/hcs/did/event/hcs-did-event-name.ts rename to src/identity/hcs/did/event/hcs-did-event-target-name.ts index e0d7e43..1fa4f58 100644 --- a/src/identity/hcs/did/event/hcs-did-event-name.ts +++ b/src/identity/hcs/did/event/hcs-did-event-target-name.ts @@ -1,7 +1,7 @@ -export enum HcsDidEventName { +export enum HcsDidEventTargetName { DID_OWNER = "DIDOwner", VERIFICATION_METHOD = "VerificationMethod", VERIFICATION_RELATIONSHIP = "VerificationRelationship", SERVICE = "Service", - DID = "DID", + Document = "Document", } diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index fff0674..93e21d1 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -1,8 +1,8 @@ import { Hashing } from "../../../.."; -import { HcsDidEventName } from "./hcs-did-event-name"; +import { HcsDidEventTargetName } from "./hcs-did-event-target-name"; export abstract class HcsDidEvent { - public abstract readonly name: HcsDidEventName; + public abstract readonly targetName: HcsDidEventTargetName; constructor() {} diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 9df641a..b7e0057 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -1,12 +1,12 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../.."; import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { public static KEY_TYPE = "Ed25519VerificationKey2018"; - public readonly name = HcsDidEventName.DID_OWNER; + public readonly targetName = HcsDidEventTargetName.DID_OWNER; protected id: string; protected type = HcsDidCreateDidOwnerEvent.KEY_TYPE; @@ -46,7 +46,7 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), type: this.getType(), controller: this.getController(), diff --git a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index d393c7d..7a5f1f6 100644 --- a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -1,9 +1,9 @@ import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { ServiceTypes } from "./types"; export class HcsDidCreateServiceEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.SERVICE; + public readonly targetName = HcsDidEventTargetName.SERVICE; protected id: string; protected type: ServiceTypes; @@ -31,7 +31,7 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), type: this.getType(), serviceEndpoint: this.getServiceEndpoint(), diff --git a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts index 6b39dda..630be45 100644 --- a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts @@ -1,8 +1,8 @@ import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; export class HcsDidRevokeServiceEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.SERVICE; + public readonly targetName = HcsDidEventTargetName.SERVICE; protected id: string; @@ -18,7 +18,7 @@ export class HcsDidRevokeServiceEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), }, }; diff --git a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts index 3f4b2bb..ac7958e 100644 --- a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts @@ -1,49 +1,3 @@ -import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; -import { ServiceTypes } from "./types"; +import { HcsDidCreateServiceEvent } from "./hcs-did-create-service-event"; -export class HcsDidUpdateServiceEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.SERVICE; - - protected id: string; - protected type: ServiceTypes; - protected serviceEndpoint: string; - - constructor(id: string, type: ServiceTypes, serviceEndpoint: string) { - super(); - - this.id = id; - this.type = type; - this.serviceEndpoint = serviceEndpoint; - } - - public getId() { - return this.id; - } - - public getType() { - return this.type; - } - - public getServiceEndpoint() { - return this.serviceEndpoint; - } - - public toJsonTree() { - return { - [this.name]: { - id: this.getId(), - type: this.getType(), - serviceEndpoint: this.getServiceEndpoint(), - }, - }; - } - - public toJSON() { - return JSON.stringify(this.toJsonTree()); - } - - static fromJsonTree(tree: any): HcsDidUpdateServiceEvent { - return new HcsDidUpdateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); - } -} +export class HcsDidUpdateServiceEvent extends HcsDidCreateServiceEvent {} diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index cd7b5a3..f4a03d2 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -1,11 +1,11 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../.."; import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationMethodSupportedKeyType } from "./types"; export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_METHOD; + public readonly targetName = HcsDidEventTargetName.VERIFICATION_METHOD; protected id: string; protected type: VerificationMethodSupportedKeyType; @@ -43,7 +43,7 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), type: this.getType(), controller: this.getController(), diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts index 545104a..f6cf370 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts @@ -1,8 +1,8 @@ import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_METHOD; + public readonly targetName = HcsDidEventTargetName.VERIFICATION_METHOD; protected id: string; @@ -18,7 +18,7 @@ export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), }, }; diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index 996befd..64bdb81 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -1,63 +1,3 @@ -import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; -import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; -import { VerificationMethodSupportedKeyType } from "./types"; +import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verification-method-event"; -export class HcsDidUpdateVerificationMethodEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_METHOD; - - protected id: string; - protected type: VerificationMethodSupportedKeyType; - protected controller: string; - protected publicKey: PublicKey; - - constructor(id: string, type: VerificationMethodSupportedKeyType, controller: string, publicKey: PublicKey) { - super(); - - this.id = id; - this.type = type; - this.controller = controller; - this.publicKey = publicKey; - } - - public getId() { - return this.id; - } - - public getType() { - return this.type; - } - - public getController() { - return this.controller; - } - - public getPublicKey() { - return this.publicKey; - } - - public getPublicKeyMultibase() { - return Hashing.multibase.encode(this.getPublicKey().toBytes()); - } - - public toJsonTree() { - return { - [this.name]: { - id: this.getId(), - type: this.getType(), - controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), - }, - }; - } - - public toJSON() { - return JSON.stringify(this.toJsonTree()); - } - - static fromJsonTree(tree: any): HcsDidUpdateVerificationMethodEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidUpdateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); - } -} +export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent {} diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index 76b944b..be8ab5c 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -1,11 +1,11 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../.."; import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + public readonly targetName = HcsDidEventTargetName.VERIFICATION_RELATIONSHIP; protected id: string; protected type: VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; @@ -55,7 +55,7 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), relationshipType: this.getRelationshipType(), type: this.getType(), diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts index 85ae913..3cf4f76 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts @@ -1,9 +1,9 @@ import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationRelationshipType } from "./types"; export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; + public readonly targetName = HcsDidEventTargetName.VERIFICATION_RELATIONSHIP; protected id: string; protected relationshipType: VerificationRelationshipType; @@ -25,7 +25,7 @@ export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { public toJsonTree() { return { - [this.name]: { + [this.targetName]: { id: this.getId(), relationshipType: this.getRelationshipType(), }, diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index ef0ebe2..fd1f18c 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -1,82 +1,3 @@ -import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; -import { HcsDidEvent } from "../hcs-did-event"; -import { HcsDidEventName } from "../hcs-did-event-name"; -import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; +import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-verification-relationship-event"; -export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidEvent { - public readonly name = HcsDidEventName.VERIFICATION_RELATIONSHIP; - - protected id: string; - protected type: VerificationRelationshipSupportedKeyType = "Ed25519VerificationKey2018"; - protected relationshipType: VerificationRelationshipType; - protected controller: string; - protected publicKey: PublicKey; - - constructor( - id: string, - relationshipType: VerificationRelationshipType, - type: VerificationRelationshipSupportedKeyType, - controller: string, - publicKey: PublicKey - ) { - super(); - - this.id = id; - this.type = type; - this.relationshipType = relationshipType; - this.controller = controller; - this.publicKey = publicKey; - } - - public getId() { - return this.id; - } - - public getType() { - return this.type; - } - - public getRelationshipType() { - return this.relationshipType; - } - - public getController() { - return this.controller; - } - - public getPublicKey() { - return this.publicKey; - } - - public getPublicKeyMultibase() { - return Hashing.multibase.encode(this.getPublicKey().toBytes()); - } - - public toJsonTree() { - return { - [this.name]: { - id: this.getId(), - relationshipType: this.getRelationshipType(), - type: this.getType(), - controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), - }, - }; - } - - public toJSON() { - return JSON.stringify(this.toJsonTree()); - } - - static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidUpdateVerificationRelationshipEvent( - tree.id, - tree.relationshipType, - tree.type, - tree.controller, - publicKey - ); - } -} +export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent {} diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 9415a92..9d43200 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -10,7 +10,7 @@ import { MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; -import { HcsDidDeleteEvent } from "./event/hcs-did-delete-event"; +import { HcsDidDeleteEvent } from "./event/document/hcs-did-delete-event"; import { HcsDidEvent } from "./event/hcs-did-event"; import { HcsDidRevokeServiceEvent } from "./event/service/hcs-did-revoke-service-event"; import { HcsDidUpdateServiceEvent } from "./event/service/hcs-did-update-service-event"; diff --git a/src/identity/hcs/message.interface.ts b/src/identity/hcs/message.interface.ts deleted file mode 100644 index ed96221..0000000 --- a/src/identity/hcs/message.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface Serialize { - toJsonTree: () => any; - toJSON(): () => string; -} diff --git a/src/index.ts b/src/index.ts index 4418214..01e4d42 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,10 +3,17 @@ import { DidDocumentJsonProperties } from "./identity/did-document-json-properti import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { DidSyntax } from "./identity/did-syntax"; +import { HcsDidDeleteEvent } from "./identity/hcs/did/event/document/hcs-did-delete-event"; import { HcsDidCreateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-create-did-owner-event"; import { HcsDidCreateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-create-service-event"; +import { HcsDidRevokeServiceEvent } from "./identity/hcs/did/event/service/hcs-did-revoke-service-event"; +import { HcsDidUpdateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-update-service-event"; import { HcsDidCreateVerificationMethodEvent } from "./identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event"; +import { HcsDidRevokeVerificationMethodEvent } from "./identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event"; +import { HcsDidUpdateVerificationMethodEvent } from "./identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event"; import { HcsDidCreateVerificationRelationshipEvent } from "./identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; +import { HcsDidRevokeVerificationRelationshipEvent } from "./identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event"; +import { HcsDidUpdateVerificationRelationshipEvent } from "./identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; import { HcsDid } from "./identity/hcs/did/hcs-did"; import { HcsDidEventMessageResolver } from "./identity/hcs/did/hcs-did-event-message-resolver"; import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; @@ -38,9 +45,16 @@ export { HcsDidTopicListener, HcsDidTransaction, HcsDidCreateDidOwnerEvent, + HcsDidDeleteEvent, HcsDidCreateServiceEvent, - HcsDidCreateVerificationMethodEvent as HcsDidVerificationMethodEvent, - HcsDidCreateVerificationRelationshipEvent as HcsDidVerificationRelationshipEvent, + HcsDidUpdateServiceEvent, + HcsDidRevokeServiceEvent, + HcsDidCreateVerificationMethodEvent, + HcsDidUpdateVerificationMethodEvent, + HcsDidRevokeVerificationMethodEvent, + HcsDidCreateVerificationRelationshipEvent, + HcsDidUpdateVerificationRelationshipEvent, + HcsDidRevokeVerificationRelationshipEvent, JsonClass, Message, MessageEnvelope, diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 7a6c303..6d868b9 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -5,10 +5,10 @@ import { Hashing, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, + HcsDidCreateVerificationMethodEvent, + HcsDidCreateVerificationRelationshipEvent, HcsDidMessage, } from "../../dist"; -import { HcsDidCreateVerificationMethodEvent } from "../../dist/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event"; -import { HcsDidCreateVerificationRelationshipEvent } from "../../dist/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event"; describe("DidDocument", () => { describe("#toJsonTree", () => { From 4f5604e2cdbb56ba6418eddbbe19948b8abe19b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 8 Feb 2022 15:52:11 +0100 Subject: [PATCH 056/133] Event tests; bug fixes --- .../service/hcs-did-update-service-event.ts | 6 +- ...cs-did-update-verification-method-event.ts | 9 +- ...-update-verification-relationship-event.ts | 15 ++- src/index.ts | 22 ++-- test/integration/hcs-did.test.ts | 5 +- test/unit/did-document.test.ts | 21 ++++ .../document/hcs-did-delete-event.test.ts | 42 +++++++ .../hcs-did-create-did-owner-event.test.ts | 96 +++++++++++++++ .../hcs-did-create-service-event.test.ts | 87 +++++++++++++ .../hcs-did-revoke-service-event.test.ts | 63 ++++++++++ .../hcs-did-update-service-event.test.ts | 85 +++++++++++++ ...d-create-verification-method-event.test.ts | 105 ++++++++++++++++ ...d-revoke-verification-method-event.test.ts | 65 ++++++++++ ...d-update-verification-method-event.test.ts | 105 ++++++++++++++++ ...te-verification-relationship-event.test.ts | 115 ++++++++++++++++++ ...ke-verification-relationship-event.test.ts | 74 +++++++++++ ...te-verification-relationship-event.test.ts | 115 ++++++++++++++++++ 17 files changed, 1015 insertions(+), 15 deletions(-) create mode 100644 test/unit/event/document/hcs-did-delete-event.test.ts create mode 100644 test/unit/event/owner/hcs-did-create-did-owner-event.test.ts create mode 100644 test/unit/event/service/hcs-did-create-service-event.test.ts create mode 100644 test/unit/event/service/hcs-did-revoke-service-event.test.ts create mode 100644 test/unit/event/service/hcs-did-update-service-event.test.ts create mode 100644 test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts create mode 100644 test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts create mode 100644 test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts create mode 100644 test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts create mode 100644 test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts create mode 100644 test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts diff --git a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts index ac7958e..b9f2cc4 100644 --- a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts @@ -1,3 +1,7 @@ import { HcsDidCreateServiceEvent } from "./hcs-did-create-service-event"; -export class HcsDidUpdateServiceEvent extends HcsDidCreateServiceEvent {} +export class HcsDidUpdateServiceEvent extends HcsDidCreateServiceEvent { + static fromJsonTree(tree: any): HcsDidCreateServiceEvent { + return new HcsDidUpdateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + } +} diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index 64bdb81..e79603b 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -1,3 +1,10 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../../.."; import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verification-method-event"; -export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent {} +export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent { + static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidUpdateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); + } +} diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index fd1f18c..b773849 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -1,3 +1,16 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../../.."; import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-verification-relationship-event"; -export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent {} +export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent { + static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidUpdateVerificationRelationshipEvent( + tree.id, + tree.relationshipType, + tree.type, + tree.controller, + publicKey + ); + } +} diff --git a/src/index.ts b/src/index.ts index 01e4d42..3df39a4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { DidSyntax } from "./identity/did-syntax"; import { HcsDidDeleteEvent } from "./identity/hcs/did/event/document/hcs-did-delete-event"; +import { HcsDidEventTargetName } from "./identity/hcs/did/event/hcs-did-event-target-name"; import { HcsDidCreateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-create-did-owner-event"; import { HcsDidCreateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-create-service-event"; import { HcsDidRevokeServiceEvent } from "./identity/hcs/did/event/service/hcs-did-revoke-service-event"; @@ -38,23 +39,25 @@ export { DidMethodOperation, DidParser, DidSyntax, + Ed25519PubCodec, Hashing, HcsDid, - HcsDidMessage, + HcsDidCreateDidOwnerEvent, + HcsDidCreateServiceEvent, + HcsDidCreateVerificationMethodEvent, + HcsDidCreateVerificationRelationshipEvent, + HcsDidDeleteEvent, HcsDidEventMessageResolver, + HcsDidEventTargetName, + HcsDidMessage, + HcsDidRevokeServiceEvent, + HcsDidRevokeVerificationMethodEvent, + HcsDidRevokeVerificationRelationshipEvent, HcsDidTopicListener, HcsDidTransaction, - HcsDidCreateDidOwnerEvent, - HcsDidDeleteEvent, - HcsDidCreateServiceEvent, HcsDidUpdateServiceEvent, - HcsDidRevokeServiceEvent, - HcsDidCreateVerificationMethodEvent, HcsDidUpdateVerificationMethodEvent, - HcsDidRevokeVerificationMethodEvent, - HcsDidCreateVerificationRelationshipEvent, HcsDidUpdateVerificationRelationshipEvent, - HcsDidRevokeVerificationRelationshipEvent, JsonClass, Message, MessageEnvelope, @@ -63,5 +66,4 @@ export { SerializableMirrorConsensusResponse, TimestampUtils, Validator, - Ed25519PubCodec, }; diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index abd5a32..5773777 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -2,8 +2,9 @@ import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@ha import { Hashing, HcsDid } from "../../dist"; const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; -const OPERATOR_ID = ""; -const OPERATOR_KEY = ""; + +const OPERATOR_ID = process.env.OPERATOR_ID; +const OPERATOR_KEY = process.env.OPERATOR_KEY; // testnet, previewnet, mainnet const NETWORK = "testnet"; diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 6d868b9..5de31f8 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -7,6 +7,7 @@ import { HcsDidCreateServiceEvent, HcsDidCreateVerificationMethodEvent, HcsDidCreateVerificationRelationshipEvent, + HcsDidDeleteEvent, HcsDidMessage, } from "../../dist"; @@ -57,6 +58,26 @@ describe("DidDocument", () => { }); }); + it("handes DID delete event", () => { + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage(DidMethodOperation.DELETE, identifier, new HcsDidDeleteEvent()), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], + }); + }); + it("successfuly handles add service, verificationMethod and verificationRelationship events", () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); diff --git a/test/unit/event/document/hcs-did-delete-event.test.ts b/test/unit/event/document/hcs-did-delete-event.test.ts new file mode 100644 index 0000000..e78d754 --- /dev/null +++ b/test/unit/event/document/hcs-did-delete-event.test.ts @@ -0,0 +1,42 @@ +import { HcsDidDeleteEvent, HcsDidEventTargetName } from "../../../../dist"; + +describe("HcsDidDeleteEvent", () => { + const event = new HcsDidDeleteEvent(); + + describe("#constructor", () => { + it("targets DID document", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.Document); + }); + }); + + describe("#getId", () => { + it("returns undefined", () => { + expect(event.getId()).toBeUndefined(); + }); + }); + + describe("#toJsonTree", () => { + it("returns null", () => { + expect(event.toJsonTree()).toEqual(null); + }); + }); + + describe("#toJSON", () => { + it("returns stringified null", () => { + expect(event.toJSON()).toEqual("null"); + }); + }); + + describe("#getBase64", () => { + it("returns null", () => { + expect(event.getBase64()).toEqual(null); + }); + }); + + describe("#fromJsonTree", () => { + it("returns event object", () => { + const eventFromJson = HcsDidDeleteEvent.fromJsonTree(null); + expect(eventFromJson).toBeInstanceOf(HcsDidDeleteEvent); + }); + }); +}); diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts new file mode 100644 index 0000000..9ec6732 --- /dev/null +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -0,0 +1,96 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidCreateDidOwnerEvent, HcsDidEventTargetName } from "../../../../dist"; + +describe("HcsDidCreateDidOwnerEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey); + + describe("#constructor", () => { + it("targets DIDOwner", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.DID_OWNER); + }); + }); + + describe("#getId", () => { + it("returns id that was passed via constructor", () => { + expect(event.getId()).toEqual(identifier + "#did-root-key"); + }); + }); + + describe("#getType", () => { + it("returns Ed25519VerificationKey2018", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getController", () => { + it("returns identifier passed via contructor", () => { + expect(event.getController()).toEqual(identifier); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key instance passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns base58 encoded publicKey", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6Nk1rb2dWem9HSk1WVkxoYXo4MmNBNWpaUUtBQXFVZ2hoQ3JwemtTREZEd3hmSmFfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON tree", () => { + expect(event.toJsonTree()).toEqual({ + DIDOwner: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified version of JSON tree", () => { + expect(event.toJSON()).toEqual( + '{"DIDOwner":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidCreateDidOwnerEvent object", () => { + const eventFromJson = HcsDidCreateDidOwnerEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidCreateDidOwnerEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + DIDOwner: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); diff --git a/test/unit/event/service/hcs-did-create-service-event.test.ts b/test/unit/event/service/hcs-did-create-service-event.test.ts new file mode 100644 index 0000000..7886b55 --- /dev/null +++ b/test/unit/event/service/hcs-did-create-service-event.test.ts @@ -0,0 +1,87 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidCreateServiceEvent, HcsDidEventTargetName } from "../../../../dist"; + +describe("HcsDidCreateServiceEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidCreateServiceEvent( + identifier + "#service-1", + "DIDCommMessaging", + "https://vc.test.service.com" + ); + + describe("#constructor", () => { + it("targets Service", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("DIDCommMessaging"); + }); + }); + + describe("#getServiceEndpoint", () => { + it("returns endpoint passed via constructor", () => { + expect(event.getServiceEndpoint()).toEqual("https://vc.test.service.com"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidCreateServiceEvent object", () => { + const eventFromJson = HcsDidCreateServiceEvent.fromJsonTree({ + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidCreateServiceEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }, + }); + }); + }); +}); diff --git a/test/unit/event/service/hcs-did-revoke-service-event.test.ts b/test/unit/event/service/hcs-did-revoke-service-event.test.ts new file mode 100644 index 0000000..54c904d --- /dev/null +++ b/test/unit/event/service/hcs-did-revoke-service-event.test.ts @@ -0,0 +1,63 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidRevokeServiceEvent } from "../../../../dist"; + +describe("HcsDidRevokeServiceEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidRevokeServiceEvent(identifier + "#service-1"); + + describe("#constructor", () => { + it("targets Service", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + ); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIn19" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + }, + }); + }); + }); + + describe("#toJSON", () => { + expect(event.toJSON()).toEqual( + '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1"}}' + ); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidRevokeServiceEvent object", () => { + const eventFromJson = HcsDidRevokeServiceEvent.fromJsonTree({ + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidRevokeServiceEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + }, + }); + }); + }); +}); diff --git a/test/unit/event/service/hcs-did-update-service-event.test.ts b/test/unit/event/service/hcs-did-update-service-event.test.ts new file mode 100644 index 0000000..dfe36d1 --- /dev/null +++ b/test/unit/event/service/hcs-did-update-service-event.test.ts @@ -0,0 +1,85 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidUpdateServiceEvent } from "../../../../dist"; + +describe("HcsDidUpdateServiceEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidUpdateServiceEvent( + identifier + "#service-1", + "DIDCommMessaging", + "https://vc.test.service.com" + ); + + describe("#constructor", () => { + it("targets Service", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("DIDCommMessaging"); + }); + }); + + describe("#getServiceEndpoint", () => { + it("returns endpoint passed via constructor", () => { + expect(event.getServiceEndpoint()).toEqual("https://vc.test.service.com"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }, + }); + }); + }); + + describe("#toJSON", () => { + expect(event.toJSON()).toEqual( + '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' + ); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidUpdateServiceEvent object", () => { + const eventFromJson = HcsDidUpdateServiceEvent.fromJsonTree({ + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidUpdateServiceEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + Service: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + serviceEndpoint: "https://vc.test.service.com", + type: "DIDCommMessaging", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts new file mode 100644 index 0000000..960a173 --- /dev/null +++ b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts @@ -0,0 +1,105 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidCreateVerificationMethodEvent, HcsDidEventTargetName } from "../../../../dist"; + +describe("HcsDidCreateVerificationMethodEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidCreateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getController", () => { + it("returns type passed via constructor", () => { + expect(event.getController()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + ); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns public key base58 encoded", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationMethod: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidCreateVerificationMethodEvent object", () => { + const eventFromJson = HcsDidCreateVerificationMethodEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidCreateVerificationMethodEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationMethod: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts new file mode 100644 index 0000000..a2f17b1 --- /dev/null +++ b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts @@ -0,0 +1,65 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationMethodEvent } from "../../../../dist"; + +describe("HcsDidRevokeVerificationMethodEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidRevokeVerificationMethodEvent(identifier + "#key-1"); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationMethod: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidRevokeVerificationMethodEvent object", () => { + const eventFromJson = HcsDidRevokeVerificationMethodEvent.fromJsonTree({ + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidRevokeVerificationMethodEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationMethod: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts new file mode 100644 index 0000000..529d607 --- /dev/null +++ b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts @@ -0,0 +1,105 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationMethodEvent } from "../../../../dist"; + +describe("HcsDidUpdateVerificationMethodEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidUpdateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getController", () => { + it("returns type passed via constructor", () => { + expect(event.getController()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + ); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns public key base58 encoded", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationMethod: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidUpdateVerificationMethodEvent object", () => { + const eventFromJson = HcsDidUpdateVerificationMethodEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidUpdateVerificationMethodEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationMethod: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts new file mode 100644 index 0000000..ef99213 --- /dev/null +++ b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts @@ -0,0 +1,115 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidCreateVerificationRelationshipEvent, HcsDidEventTargetName } from "../../../../dist"; + +describe("HcsDidCreateVerificationRelationshipEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getRelationshipType", () => { + it("returns relationshipType passed via constructor", () => { + expect(event.getRelationshipType()).toEqual("authentication"); + }); + }); + + describe("#getController", () => { + it("returns type passed via constructor", () => { + expect(event.getController()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + ); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns public key base58 encoded", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationRelationship: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidCreateVerificationRelationshipEvent object", () => { + const eventFromJson = HcsDidCreateVerificationRelationshipEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidCreateVerificationRelationshipEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationRelationship: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts new file mode 100644 index 0000000..7da5937 --- /dev/null +++ b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts @@ -0,0 +1,74 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationRelationshipEvent } from "../../../../dist"; + +describe("HcsDidRevokeVerificationRelationshipEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidRevokeVerificationRelationshipEvent(identifier + "#key-1", "authentication"); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getRelationshipType", () => { + it("returns relationshipType passed via constructor", () => { + expect(event.getRelationshipType()).toEqual("authentication"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationRelationship: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + relationshipType: "authentication", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidRevokeVerificationRelationshipEvent object", () => { + const eventFromJson = HcsDidRevokeVerificationRelationshipEvent.fromJsonTree({ + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + relationshipType: "authentication", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidRevokeVerificationRelationshipEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationRelationship: { + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + relationshipType: "authentication", + }, + }); + }); + }); +}); diff --git a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts new file mode 100644 index 0000000..85fcf7f --- /dev/null +++ b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts @@ -0,0 +1,115 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationRelationshipEvent } from "../../../../dist"; + +describe("HcsDidUpdateVerificationRelationshipEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidUpdateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + + describe("#constructor", () => { + it("targets verificationMethod", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); + }); + }); + + describe("#getId", () => { + it("returns id passed via constructor", () => { + expect(event.getId()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + ); + }); + }); + + describe("#getType", () => { + it("returns type passed via constructor", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getRelationshipType", () => { + it("returns relationshipType passed via constructor", () => { + expect(event.getRelationshipType()).toEqual("authentication"); + }); + }); + + describe("#getController", () => { + it("returns type passed via constructor", () => { + expect(event.getController()).toEqual( + "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + ); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns public key base58 encoded", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event data encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON structure", () => { + expect(event.toJsonTree()).toEqual({ + VerificationRelationship: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified JSON structure version", () => { + expect(event.toJSON()).toEqual( + '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidUpdateVerificationRelationshipEvent object", () => { + const eventFromJson = HcsDidUpdateVerificationRelationshipEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidUpdateVerificationRelationshipEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + VerificationRelationship: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); From 40e41993861b2816382ed042030aa7d717824ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 8 Feb 2022 21:11:42 +0100 Subject: [PATCH 057/133] Better handling of invalid/non-did related events that might to appear on the topic --- .../hcs/did/event/hcs-did-event-parser.ts | 15 +++--- .../owner/hcs-did-create-did-owner-event.ts | 4 ++ .../service/hcs-did-create-service-event.ts | 3 ++ .../service/hcs-did-revoke-service-event.ts | 3 ++ .../service/hcs-did-update-service-event.ts | 3 ++ ...cs-did-create-verification-method-event.ts | 4 ++ ...cs-did-revoke-verification-method-event.ts | 3 ++ ...cs-did-update-verification-method-event.ts | 4 ++ ...-create-verification-relationship-event.ts | 6 +++ ...-revoke-verification-relationship-event.ts | 3 ++ ...-update-verification-relationship-event.ts | 6 +++ test/unit/event/hcs-did-event-parser.test.ts | 47 +++++++++++++++++++ 12 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 test/unit/event/hcs-did-event-parser.test.ts diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 365d69e..c96acc7 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -39,15 +39,14 @@ export class HcsDidEventParser { return HcsDidDeleteEvent.fromJsonTree(null); } - const tree = JSON.parse(Hashing.base64.decode(eventBase64)); - const eventsByOpration = EVENT_NAME_TO_CLASS[operation]; - const eventName = Object.keys(eventsByOpration).find((eventName) => !!tree[eventName]); + try { + const tree = JSON.parse(Hashing.base64.decode(eventBase64)); + const eventsByOpration = EVENT_NAME_TO_CLASS[operation]; + const eventTargetName = Object.keys(eventsByOpration).find((etn) => !!tree[etn]); - if (!eventName) { - // return null; - throw new Error("Invalid DID event"); + return eventsByOpration[eventTargetName].fromJsonTree(tree[eventTargetName]); + } catch { + return null; } - - return eventsByOpration[eventName].fromJsonTree(tree[eventName]); } } diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index b7e0057..3fda311 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -60,6 +60,10 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateDidOwnerEvent { + if (!tree.id || !tree.controller || !tree.publicKeyMultibase) { + throw new Error("Tree data is missing one of the attributes: id, controller, publicKeyMultibase"); + } + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidCreateDidOwnerEvent(tree.id, tree.controller, publicKey); } diff --git a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index 7a5f1f6..5017adc 100644 --- a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -44,6 +44,9 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateServiceEvent { + if (!tree.id || !tree.type || !tree.serviceEndpoint) { + throw new Error("Tree data is missing one of the attributes: id, type, serviceEndpoint"); + } return new HcsDidCreateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts index 630be45..6b33499 100644 --- a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts @@ -29,6 +29,9 @@ export class HcsDidRevokeServiceEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeServiceEvent { + if (!tree.id) { + throw new Error("Tree data is missing one of the attributes: id"); + } return new HcsDidRevokeServiceEvent(tree.id); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts index b9f2cc4..32aa3db 100644 --- a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts @@ -2,6 +2,9 @@ import { HcsDidCreateServiceEvent } from "./hcs-did-create-service-event"; export class HcsDidUpdateServiceEvent extends HcsDidCreateServiceEvent { static fromJsonTree(tree: any): HcsDidCreateServiceEvent { + if (!tree.id || !tree.type || !tree.serviceEndpoint) { + throw new Error("Tree data is missing one of the attributes: id, type, serviceEndpoint"); + } return new HcsDidUpdateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index f4a03d2..15ccb93 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -57,6 +57,10 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { + if (!tree.id || !tree.type || !tree.controller || !tree.publicKeyMultibase) { + throw new Error("Tree data is missing one of the attributes: id, type, controller, publicKeyMultibase"); + } + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidCreateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts index f6cf370..1fecf46 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts @@ -29,6 +29,9 @@ export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeVerificationMethodEvent { + if (!tree.id) { + throw new Error("Tree data is missing one of the attributes: id"); + } return new HcsDidRevokeVerificationMethodEvent(tree.id); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index e79603b..4ba686e 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -4,6 +4,10 @@ import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verificati export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent { static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { + if (!tree.id || !tree.type || !tree.controller || !tree.publicKeyMultibase) { + throw new Error("Tree data is missing one of the attributes: id, type, controller, publicKeyMultibase"); + } + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidUpdateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index be8ab5c..20e50cb 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -70,6 +70,12 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationRelationshipEvent { + if (!tree.id || !tree.relationshipType || !tree.type || !tree.controller || !tree.publicKeyMultibase) { + throw new Error( + "Tree data is missing one of the attributes: id, relationshipType, type, controller, publicKeyMultibase" + ); + } + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidCreateVerificationRelationshipEvent( tree.id, diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts index 3cf4f76..6f7534b 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts @@ -37,6 +37,9 @@ export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeVerificationRelationshipEvent { + if (!tree.id || !tree.relationshipType) { + throw new Error("Tree data is missing one of the attributes: id, relationshipType"); + } return new HcsDidRevokeVerificationRelationshipEvent(tree.id, tree.relationshipType); } } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index b773849..14ebbcd 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -4,6 +4,12 @@ import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-veri export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent { static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { + if (!tree.id || !tree.relationshipType || !tree.type || !tree.controller || !tree.publicKeyMultibase) { + throw new Error( + "Tree data is missing one of the attributes: id, relationshipType, type, controller, publicKeyMultibase" + ); + } + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); return new HcsDidUpdateVerificationRelationshipEvent( tree.id, diff --git a/test/unit/event/hcs-did-event-parser.test.ts b/test/unit/event/hcs-did-event-parser.test.ts new file mode 100644 index 0000000..fccf7e2 --- /dev/null +++ b/test/unit/event/hcs-did-event-parser.test.ts @@ -0,0 +1,47 @@ +import { DidMethodOperation, Hashing, HcsDidDeleteEvent } from "../../../src"; +import { HcsDidEventParser } from "../../../src/identity/hcs/did/event/hcs-did-event-parser"; + +describe("HcsDidEventParser", () => { + describe("#fromBase64", () => { + it("HcsDidDeleteEvent if operation is DELETE", () => { + const result = HcsDidEventParser.fromBase64(DidMethodOperation.DELETE, null); + expect(result).toBeInstanceOf(HcsDidDeleteEvent); + }); + + it("HcsDidDeleteEvent if operation is DELETE - ignores base64 data", () => { + const eventBase64 = Hashing.base64.encode('{"data":"data"}'); + const result = HcsDidEventParser.fromBase64(DidMethodOperation.DELETE, eventBase64); + expect(result).toBeInstanceOf(HcsDidDeleteEvent); + }); + + it("returns null if operation was not found in the map", () => { + const eventBase64 = Hashing.base64.encode('{"data":"data"}'); + const result = HcsDidEventParser.fromBase64("invalid" as any, eventBase64); + expect(result).toBeNull(); + }); + + it("returns null if event target name was not found in the map", () => { + const eventBase64 = Hashing.base64.encode('{"data":"data"}'); + const result = HcsDidEventParser.fromBase64(DidMethodOperation.CREATE, eventBase64); + expect(result).toBeNull(); + }); + + it("returns null if data is not an object", () => { + const eventBase64 = Hashing.base64.encode("invalid"); + const result = HcsDidEventParser.fromBase64(DidMethodOperation.CREATE, eventBase64); + expect(result).toBeNull(); + }); + + it("returns null if event target data is null", () => { + const eventBase64 = Hashing.base64.encode('{"Service":null}'); + const result = HcsDidEventParser.fromBase64(DidMethodOperation.CREATE, eventBase64); + expect(result).toBeNull(); + }); + + it("returns null if event target data is empty", () => { + const eventBase64 = Hashing.base64.encode('{"Service":{}}'); + const result = HcsDidEventParser.fromBase64(DidMethodOperation.UPDATE, eventBase64); + expect(result).toBeNull(); + }); + }); +}); From 4d1f023c706e6db6682fb50eebc462280ef85e83 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 10:12:14 +1100 Subject: [PATCH 058/133] git actions to run test on develop branch and main branch and for release --- .github/workflows/release.yml | 3 ++- .github/workflows/test.unit.yml | 29 +++++++++++++++++++++++++++++ .github/workflows/test.yml | 22 ++++++++++++++-------- 3 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/test.unit.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1f70446..74762a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [ '14', '16' ] + node: [ '16' ] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -20,6 +20,7 @@ jobs: cache: 'npm' node-version: ${{ matrix.node }} - run: npm ci + - run: npm run build --if-present - run: npm test env: OPERATOR_ID: ${{ secrets.OPERATOR_ID }} diff --git a/.github/workflows/test.unit.yml b/.github/workflows/test.unit.yml new file mode 100644 index 0000000..37239b4 --- /dev/null +++ b/.github/workflows/test.unit.yml @@ -0,0 +1,29 @@ +name: Test + +on: + pull_request: + branches: + - develop + push: + branches: + - develop + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + node: [ '16' ] + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - name: install dependencies + run: npm ci + - name: build + run: npm run build --if-present + - name: run unit test + run: npm test:unit + diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cf1f819..d856c3f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,24 +2,30 @@ name: Test on: pull_request: - branches: [ main ] + branches: + - main push: - branches: [ main ] + branches: + - main jobs: build: runs-on: ubuntu-latest strategy: matrix: - node: [ '14', '16' ] + node: [ '16' ] steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 with: - cache: 'npm' - node-version: ${{ matrix.node }} - - run: npm ci - - run: npm test + node-version: ${{ matrix.node-version }} + - name: install dependencies + run: npm ci + - name: build + run: npm run build --if-present + - name: run all tests + run: npm test env: OPERATOR_ID: ${{ secrets.OPERATOR_ID }} OPERATOR_KEY: ${{ secrets.OPERATOR_KEY }} From 5a1dc7a8f5ff641e2f3591ebd7532f508acc8572 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 10:15:08 +1100 Subject: [PATCH 059/133] fix npm command --- .github/workflows/release.yml | 2 +- .github/workflows/test.unit.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 74762a1..55512ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: node-version: ${{ matrix.node }} - run: npm ci - run: npm run build --if-present - - run: npm test + - run: npm run test env: OPERATOR_ID: ${{ secrets.OPERATOR_ID }} OPERATOR_KEY: ${{ secrets.OPERATOR_KEY }} diff --git a/.github/workflows/test.unit.yml b/.github/workflows/test.unit.yml index 37239b4..25c95e7 100644 --- a/.github/workflows/test.unit.yml +++ b/.github/workflows/test.unit.yml @@ -25,5 +25,5 @@ jobs: - name: build run: npm run build --if-present - name: run unit test - run: npm test:unit + run: npm run test:unit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d856c3f..08c48c9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: - name: build run: npm run build --if-present - name: run all tests - run: npm test + run: npm run test env: OPERATOR_ID: ${{ secrets.OPERATOR_ID }} OPERATOR_KEY: ${{ secrets.OPERATOR_KEY }} From 7b535015d6a8e9292581475c4c73b9b14f513457 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 14:42:45 +1100 Subject: [PATCH 060/133] updated read me and added demo files for add update and revoke events --- README.md | 368 ++++++++++++++---- ...id_topic.js => 1_generate_register_did.js} | 0 demo/2_add_update_revoke_service.js | 59 +++ ...2_add_update_revoke_verification_method.js | 65 ++++ ...update_revoke_verification_relationship.js | 69 ++++ demo/2_register_service_endpoint.js | 28 -- src/identity/hcs/did/hcs-did.ts | 11 +- 7 files changed, 486 insertions(+), 114 deletions(-) rename demo/{1_create_did_topic.js => 1_generate_register_did.js} (100%) create mode 100644 demo/2_add_update_revoke_service.js create mode 100644 demo/2_add_update_revoke_verification_method.js create mode 100644 demo/2_add_update_revoke_verification_relationship.js delete mode 100644 demo/2_register_service_endpoint.js diff --git a/README.md b/README.md index 245e541..2fce23c 100644 --- a/README.md +++ b/README.md @@ -1,146 +1,350 @@ # did-sdk-js -Support for the Hedera Hashgraph DID Method and Verifiable Credentials on the Hedera JavaScript/TypeScript SDK. -This repository contains the Javascript SDK for managing [DID Documents][did-core] & [Verifiable Credentials][vc-data-model] registry using the Hedera Consensus Service. +Support for the Hedera Hashgraph DID Method on the Hedera JavaScript/TypeScript SDK. -did-sdk-js based on [did-sdk-java](https://github.com/hashgraph/did-sdk-java), so both of them contain similar methods and classes. +This repository contains the Javascript SDK for managing [DID Documents][did-core] using the Hedera Consensus Service. ## Overview -Identity networks are set of artifacts on Hedera Consensus Service that allow applications to share common channels to publish and resolve DID documents, issue verifiable credentials and control their validity status. These artifacts include: - -- address book - a file on Hedera File Service that provides information about HCS topics and appnet servers, -- DID topic - an HCS topic intended for publishing DID documents, -- and VC topic - an HCS topic playing a role of verifiable credentials registry. +Hedera Consensus Service (HCS) allows applications to share common channels to publish and resolve an immutable and verifiable messages. These messages are submitted to Topic. SDK creates and uses DID topic on HCS for publishing DID Events Messages to resolve and validate DID Document. This SDK is designed to simplify : -- creation of identity networks within appnets, that is: creation and initialization of the artifacts mentioned above, -- generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of their basic DID documents, -- creation (publishing), update, deletion and resolution of DID documents in appnet identity networks, -- issuance, revocation and status verification of [Verifiable Credentials][vc-data-model]. +- Creation and initialization of the DID topic on HCS, +- Generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of DID documents, +- Creation (publishing), update, revoke, deletion and resolution of DID documents based on DID documents event/log messages recorded on HCS Topic -The SDK does not impose any particular way of how the DID or verifiable credential documents are constructed. Each appnet creators can choose their best way of creating those documents and as long as these are valid JSON-LD files adhering to W3C standards, they will be handled by the SDK. +The SDK adhers to W3C standards to produce valid hedera:did and resolve it to DID Document. SDK also provide API to create, update, revoke and delete different DID Events Messages that represent different properties of a DID documents. ## Usage + ``` npm install --save @hashgraph/did-sdk-js ``` -## Example: - -### Identity Network -``` -const client = ... // Client +## Setup Hedera Portal Account -const identityNetwork = new HcsIdentityNetworkBuilder() - .setNetwork("testnet") - .setAppnetName("MyIdentityAppnet") - .addAppnetDidServer("https://appnet-did-server-url:port/path-to-did-api") - .setPublicKey(publicKey) - .setMaxTransactionFee(new Hbar(2)) - .setDidTopicMemo("MyIdentityAppnet DID topic") - .setVCTopicMemo("MyIdentityAppnet VC topic") - .execute(client); -``` +- Register hedera portal Testnet account https://portal.hedera.com/register +- Login to portal https://portal.hedera.com/?network=testnet +- Obtain accountId & privateKey string value. -### DID Generation -From already instantiated network: ``` -const identityNetwork = ...; //HcsIdentityNetwork -// From a given DID root key: -const didRootKey = ...; //PrivateKey -const hcsDid = identityNetwork.generateDid(didRootKey.publicKey, false); +"operator": { + "accountId": "0.0.xxxx", + "publicKey": "...", + "privateKey": "302.." +} ``` -or: + +- Following examples uses accountId as `OPERATOR_ID` and privateKey string value as `OPERATOR_KEY` to submit DID Event Messages to HCS. + +## Examples: + +Sample demo setp by step javascript example are avalible at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `config.js` + +- OPERATOR_ID=0.0.xxxx +- OPERATOR_KEY=302... + +### DID Generation & Registration + ``` -// Without having a DID root key - it will be generated automatically: -// Here we decided to add DID topic ID parameter `tid` to the DID. -const hcsDidWithDidRootKey = identityNetwork.generateDid(true); -const didRootKeyPrivateKey = hcsDidWithDidRootKey.getPrivateDidRootKey().get(); +/** + * Client setup + */ +const OPERATOR_ID=0.0.xxxx; +const OPERATOR_KEY=302...; +const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, privateKey); + +/** + * Register & Generate DID + */ +const did = new HcsDid({ privateKey: privateKey, client: client }); +const registeredDid = await did.register(); +console.log("\n"); +console.log(registeredDid.getIdentifier()); ``` -or by directly constructing HcsDid object: + +### DID Resolve + ``` -const didRootKey = HcsDid.generateDidRootKey(); -const addressBookFileId = FileId.fromString(""); +/** + * Client setup + */ +const client = Client.forTestnet(); + +/** + * Build DID instance + */ +const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; +const did = new HcsDid({ identifier: TEST_DID_STR, client: client }); -const hcsDid = new HcsDid(HederaNetwork.TESTNET, didRootKey.publicKey, addressBookFileId); +/** + * Resolve DID + */ +console.log("generating did doc"); +const didDoc = await did.resolve(); +console.log(didDoc.toJsonTree()); + +console.log("\n"); +console.log("==================================================="); +console.log("DID Event Messages Explorer:"); +console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); +console.log("\n"); ``` -Existing Hedera DID strings can be parsed into HcsDid object by calling fromString method: + +### Create, Update and Revoke [DID Document Core Properties][did-core-prop] + +#### Service + ``` -const didString = "did:hedera:testnet:7c38oC4ytrYDGCqsaZ1AXt7ZPQ8etzfwaxoKjfJNzfoc;hedera:testnet:fid=0.0.1"; -const did = HcsDid.fromString(didString); + +/** +* Setup +*/ +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; +const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; + +const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, privateKey); + +/** +* Add Service +*/ +let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); +did = await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", +}); + +console.log("\n"); +console.log("Added"); +let didDoc = await did.resolve(); +let didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Update Service +* ID must be same as ADD Service Event to update it +*/ +did = await did.updateService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://test.com/did", +}); + +console.log("\n"); +console.log("Updated"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Revoke Service +*/ +did = await did.revokeService({ + id: did.getIdentifier() + "#service-1", +}); + +console.log("\n"); +console.log("Revoked"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + ``` -### Transaction +#### Verification Method + ``` -const client = ...; //Client -const identityNetwork = ...; //HcsIdentityNetwork -const didRootKey = ...; //PrivateKey -const hcsDid = ...; //HcsDid +/** +* Setup +*/ +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; +const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; -const didDocument = hcsDid.generateDidDocument().toJson(); +const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, privateKey); -// Build and execute transaction -await identityNetwork.createDidTransaction(DidMethodOperation.CREATE) - // Provide DID document as JSON string - .setDidDocument(didDocument) - // Sign it with DID root key - .signMessage(doc => didRootKey.sign(doc)) - // Configure ConsensusMessageSubmitTransaction, build it and sign if required by DID topic - .buildAndSignTransaction(tx => tx.setMaxTransactionFee(new Hbar(2))) - // Define callback function when consensus was reached and DID document came back from mirror node - .onMessageConfirmed(msg => { - //DID document published! - }) - // Execute transaction - .execute(client); +const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; +const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); +const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + +/** +* Add Verification Method +*/ +let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); +did = await did.addVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, +}); + +console.log("\n"); +console.log("Added"); +let didDoc = await did.resolve(); +let didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Update Verification Method +* ID must be same as ADD Verification Method Event to update it +*/ +did = await did.updateVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, +}); + +console.log("\n"); +console.log("Updated"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Revoke Verification Method +*/ +did = await did.revokeVerificaitonMethod({ + id: newVerificaitonDid, +}); + +console.log("\n"); +console.log("Revoked"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); ``` [did-method-spec]: https://github.com/hashgraph/did-method [did-core]: https://www.w3.org/TR/did-core/ -[vc-data-model]: https://www.w3.org/TR/vc-data-model/ +[demo-location]: https://github.com/Meeco/did-sdk-js/tree/develop/demo +[did-core-prop]: https://w3c.github.io/did-core/#core-properties + +#### Verification RelationShip - Authentication + +``` +/** +* Setup +*/ +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; +const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; + +const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, privateKey); + +const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; +const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); +const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + +/** +* Add VerificationRelationship - authentication +*/ +let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); +did = await did.addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, +}); + +console.log("\n"); +console.log("Added"); +let didDoc = await did.resolve(); +let didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Update VerificationRelationship - authentication +* ID & relationshipType must be same as ADD Service Event to update it +*/ +did = await did.updateVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, +}); + +console.log("\n"); +console.log("Updated"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); + +/** +* Revoke Service +* ID & relationshipType must be same as ADD Service Event to update it +*/ +did = await did.revokeVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", +}); + +console.log("\n"); +console.log("Revoked"); +didDoc = await did.resolve(); +didDocument = didDoc.toJsonTree(); +console.log(JSON.stringify(didDocument)); +``` ## Development + ``` git clone git@github.com:hashgraph/did-sdk-js.git ``` First you need install dependencies and build project + ``` npm install ``` + Run build in dev mode (with sourcemap generation and following changes) + ``` npm run build:dev ``` ## Tests -For run tests you need to create and fill ```test/variables.js``` file before. There is ```test/variables.js.sample``` file as example. -Update the following environment variables with your `testnet` account details +Run Unit Tests -* OPERATOR_ID=0.0.xxxx -* OPERATOR_KEY=302... +``` +npm run test:unit +``` -You may also edit the following to use a different network (ensure your OPERATOR_ID and OPERATOR_KEY are valid) +Run Integration Test -* NETWORK=testnet (can be `testnet`, `previewnet` or `mainnet`) -* MIRROR_PROVIDER=hedera (can be `hedera` or `kabuto` (note `kabuto` not available on `previewnet`)) +Update the following environment variables with your `testnet` account details + +- OPERATOR_ID=0.0.xxxx +- OPERATOR_KEY=302... -Run tests ``` -npm run test +npm run test:integration ``` ## References -- -- -- -- -- -- + +- +- +- +- +- +- ## License Information diff --git a/demo/1_create_did_topic.js b/demo/1_generate_register_did.js similarity index 100% rename from demo/1_create_did_topic.js rename to demo/1_generate_register_did.js diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js new file mode 100644 index 0000000..f4c97c0 --- /dev/null +++ b/demo/2_add_update_revoke_service.js @@ -0,0 +1,59 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * Add Service + */ + let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + did = await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + + console.log("\n"); + console.log("Added"); + let didDoc = await did.resolve(); + let didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Update Service + * ID must be same as ADD Service Event to update it + */ + did = await did.updateService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://test.com/did", + }); + + console.log("\n"); + console.log("Updated"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Revoke Service + */ + did = await did.revokeService({ + id: did.getIdentifier() + "#service-1", + }); + + console.log("\n"); + console.log("Revoked"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); +} + +main(); diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js new file mode 100644 index 0000000..a2dde76 --- /dev/null +++ b/demo/2_add_update_revoke_verification_method.js @@ -0,0 +1,65 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + + /** + * Add Verification Method + */ + let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + did = await did.addVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + console.log("\n"); + console.log("Added"); + let didDoc = await did.resolve(); + let didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Update Verification Method + * ID must be same as ADD Verification Method Event to update it + */ + did = await did.updateVerificaitonMethod({ + id: newVerificaitonDid, + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, + }); + + console.log("\n"); + console.log("Updated"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Revoke Verification Method + */ + did = await did.revokeVerificaitonMethod({ + id: newVerificaitonDid, + }); + + console.log("\n"); + console.log("Revoked"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); +} + +main(); diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js new file mode 100644 index 0000000..a99bbb6 --- /dev/null +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -0,0 +1,69 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); + +async function main() { + /** + * Setup + */ + const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + + /** + * Add VerificationRelationship - authentication + */ + let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + did = await did.addVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey, + }); + + console.log("\n"); + console.log("Added"); + let didDoc = await did.resolve(); + let didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Update VerificationRelationship - authentication + * ID & relationshipType must be same as ADD Service Event to update it + */ + did = await did.updateVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + type: "Ed25519VerificationKey2018", + controller: did.getIdentifier(), + publicKey: updatePublicKey, + }); + + console.log("\n"); + console.log("Updated"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); + + /** + * Revoke Service + * ID & relationshipType must be same as ADD Service Event to update it + */ + did = await did.revokeVerificaitonRelationship({ + id: newVerificaitonDid, + relationshipType: "authentication", + }); + + console.log("\n"); + console.log("Revoked"); + didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + console.log(JSON.stringify(didDocument)); +} + +main(); diff --git a/demo/2_register_service_endpoint.js b/demo/2_register_service_endpoint.js deleted file mode 100644 index 0122f3d..0000000 --- a/demo/2_register_service_endpoint.js +++ /dev/null @@ -1,28 +0,0 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); -const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); - -async function main() { - /** - * Client setup - */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); - const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); - - /** - * Build DID instance - */ - const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - - /** - * Build create Service message - */ - did.addService({ - id: did.getIdentifier() + "#service-1", - type: "LinkedDomains", - serviceEndpoint: "https://test.meeco.me/vcs", - }); -} - -main(); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 9d43200..282fb3a 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -177,7 +177,7 @@ export class HcsDid { * @param args * @returns this */ - public updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { + public async updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { this.validateClientConfig(); if (!args || !args.id || !args.type || !args.serviceEndpoint) { @@ -187,7 +187,8 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidUpdateServiceEvent(args.id, args.type, args.serviceEndpoint); - return this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + return this; } /** @@ -195,7 +196,7 @@ export class HcsDid { * @param args * @returns this */ - public revokeService(args: { id: string }) { + public async revokeService(args: { id: string }) { this.validateClientConfig(); if (!args || !args.id) { throw new Error("Validation failed. Services args are missing"); @@ -204,7 +205,8 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidRevokeServiceEvent(args.id); - return this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + return this; } /** @@ -341,6 +343,7 @@ export class HcsDid { args.publicKey ); await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + return this; } /** From 62dbfbc446230c40e1ac2dc08996bd4260b728d6 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 14:53:03 +1100 Subject: [PATCH 061/133] added DELETE DID to READ ME --- README.md | 25 +++++++++++++++++++++++++ demo/3_read_did_messages.js | 2 +- demo/4_resolve_did.js | 2 +- demo/5_delete_did_document.js | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2fce23c..89497a7 100644 --- a/README.md +++ b/README.md @@ -300,6 +300,31 @@ didDocument = didDoc.toJsonTree(); console.log(JSON.stringify(didDocument)); ``` +### Delete DID Document + +``` +/** +* Setup +*/ +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; +const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; + +const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, privateKey); + +/** +* Build DID instance +*/ +const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); + +/** +* Delete DID +*/ +did.delete(); +``` + ## Development ``` diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 58c132b..ad76e87 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -4,7 +4,7 @@ const { TEST_DID_STR } = require("./config"); async function main() { /** - * Client setup + * Setup */ const client = Client.forTestnet(); diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index 0cc80e0..13847cc 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -4,7 +4,7 @@ const { TEST_DID_STR } = require("./config"); async function main() { /** - * Client setup + * Setup */ const client = Client.forTestnet(); diff --git a/demo/5_delete_did_document.js b/demo/5_delete_did_document.js index 5981c3b..0b275bb 100644 --- a/demo/5_delete_did_document.js +++ b/demo/5_delete_did_document.js @@ -16,7 +16,7 @@ async function main() { const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); /** - * Build create Service message + * Delete DID */ did.delete(); } From 36f12ea9a031619e77502c8123b591c62101e7fc Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 16:03:30 +1100 Subject: [PATCH 062/133] fix some typos --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 89497a7..379eb4d 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,15 @@ This repository contains the Javascript SDK for managing [DID Documents][did-cor ## Overview -Hedera Consensus Service (HCS) allows applications to share common channels to publish and resolve an immutable and verifiable messages. These messages are submitted to Topic. SDK creates and uses DID topic on HCS for publishing DID Events Messages to resolve and validate DID Document. +Hedera Consensus Service (HCS) allows applications to share common channels to publish and resolve immutable and verifiable messages. These messages are submitted to Topic. SDK creates and uses DID topic on HCS for publishing DID Events Messages to resolve and validate DID Document. This SDK is designed to simplify : - Creation and initialization of the DID topic on HCS, - Generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of DID documents, -- Creation (publishing), update, revoke, deletion and resolution of DID documents based on DID documents event/log messages recorded on HCS Topic +- Creation (publishing), update, revoke, deletion, and resolution of DID documents based on DID documents event/log messages recorded on HCS Topic -The SDK adhers to W3C standards to produce valid hedera:did and resolve it to DID Document. SDK also provide API to create, update, revoke and delete different DID Events Messages that represent different properties of a DID documents. +The SDK adheres to W3C standards to produce valid hedera:did and resolve it to DID Document. SDK also provides API to create, update, revoke and delete different DID Events Messages that represent different properties of DID documents. ## Usage @@ -36,7 +36,7 @@ npm install --save @hashgraph/did-sdk-js } ``` -- Following examples uses accountId as `OPERATOR_ID` and privateKey string value as `OPERATOR_KEY` to submit DID Event Messages to HCS. +- Following examples use accountId as `OPERATOR_ID` and privateKey string value as `OPERATOR_KEY` to submit DID Event Messages to HCS. ## Examples: @@ -331,7 +331,7 @@ did.delete(); git clone git@github.com:hashgraph/did-sdk-js.git ``` -First you need install dependencies and build project +First, you need to install dependencies and build the project ``` npm install From 107f644e17c7a3ef9c024667b55134c7d60c32af Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 16:42:52 +1100 Subject: [PATCH 063/133] jest config to setup env var --- jest.config.js | 3 ++- jest.setup.js | 4 +++- jest.setupAfterEnv.js | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 jest.setupAfterEnv.js diff --git a/jest.config.js b/jest.config.js index db1e6ea..fbd2bc1 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,6 @@ module.exports = { preset: "ts-jest", testEnvironment: "node", - setupFilesAfterEnv: ["./jest.setup.js"], + setupFilesAfterEnv: ["./jest.setupAfterEnv.js"], + setupFiles: ["./jest.setup.js"], }; diff --git a/jest.setup.js b/jest.setup.js index 09ffd35..f054448 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1 +1,3 @@ -jest.setTimeout(60000); +// process.env.OPERATOR_ID = "0.0.xxxxxx"; +// process.env.OPERATOR_KEY = +// "302e02..."; diff --git a/jest.setupAfterEnv.js b/jest.setupAfterEnv.js new file mode 100644 index 0000000..09ffd35 --- /dev/null +++ b/jest.setupAfterEnv.js @@ -0,0 +1 @@ +jest.setTimeout(60000); From 1ef650615069bf30b6babaf602d8d13562baff26 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Wed, 9 Feb 2022 16:45:02 +1100 Subject: [PATCH 064/133] updated read me on how to run integration test --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 379eb4d..afcd562 100644 --- a/README.md +++ b/README.md @@ -353,10 +353,12 @@ npm run test:unit Run Integration Test -Update the following environment variables with your `testnet` account details +Open jest.setup.js file and update the following environment variables with your `testnet` account details -- OPERATOR_ID=0.0.xxxx -- OPERATOR_KEY=302... +``` +process.env.OPERATOR_ID = "0.0.xxxxxx"; +process.env.OPERATOR_KEY = "302e02..."; +``` ``` npm run test:integration From dbbbb4f0ab17bcbaf0ec83272e30e4ddc0775718 Mon Sep 17 00:00:00 2001 From: vijay Date: Wed, 9 Feb 2022 18:45:08 +1100 Subject: [PATCH 065/133] added signature varificaiton back to topic listner (#12) Co-authored-by: Vijay Shiyani --- src/identity/hcs/did/hcs-did-message.ts | 32 ------------------- .../hcs/did/hcs-did-topic-listener.ts | 7 ++++ src/identity/hcs/did/hcs-did.ts | 13 +++++--- 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 352864f..4493aa8 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -74,12 +74,6 @@ export class HcsDidMessage extends Message { this.created = created; } - /** - * Validates this DID message by checking its completeness, signature and DID document. - * - * @return True if the message is valid, false otherwise. - */ - public isValid(): boolean; /** * Validates this DID message by checking its completeness, signature and DID document. * @@ -94,35 +88,9 @@ export class HcsDidMessage extends Message { return false; } - /** - * TODO: review this logic and update accoridingly - */ - try { - // const doc: DidDocumentBase = DidDocumentBase.fromJson(this.getDidDocument()); - - // // Validate if DID and DID document are present and match - // if (this.did != doc.getId()) { - // return false; - // } - - // // Validate if DID root key is present in the document - // if (doc.getDidRootKey() == null || doc.getDidRootKey().getPublicKeyMultibase() == null) { - // return false; - // } - - // // Verify that DID was derived from this DID root key - const hcsDid: HcsDid = DidParser.parse(this.did); - // // Extract public key from the DID document - // const publicKeyBytes: Uint8Array = Hashing.multibase.decode(doc.getDidRootKey().getPublicKeyMultibase()); - // const publicKey: PublicKey = PublicKey.fromBytes(publicKeyBytes); - - // if (HcsDid.publicKeyToIdString(publicKey) != hcsDid.getIdString()) { - // return false; - // } - // Verify that the message was sent to the right topic, if the DID contains the topic if (!!didTopicId && !!hcsDid.getTopicId() && didTopicId.toString() != hcsDid.getTopicId().toString()) { return false; diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index dbbc99a..529b9ae 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -1,6 +1,7 @@ import { TopicId, TopicMessage } from "@hashgraph/sdk"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; +import { HcsDid } from "./hcs-did"; import { HcsDidMessage } from "./hcs-did-message"; /** @@ -37,6 +38,12 @@ export class HcsDidTopicListener extends MessageListener { return false; } + const key = HcsDid.parsePublicKeyFromIdentifier(message.getDid()); + if (!envelope.isSignatureValid(key)) { + this.reportInvalidMessage(response, "Signature validation failed"); + return false; + } + if (!message.isValid(this.topicId)) { this.reportInvalidMessage(response, "Message content validation failed."); return false; diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 282fb3a..d15ff2c 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -52,7 +52,7 @@ export class HcsDid { } if (this.identifier) { - const [networkName, topicId] = this.parseIdentifier(this.identifier); + const [networkName, topicId] = HcsDid.parseIdentifier(this.identifier); this.network = networkName; this.topicId = topicId; } @@ -409,6 +409,11 @@ export class HcsDid { return PublicKey.fromBytes(Hashing.multibase.decode(idString)); } + public static parsePublicKeyFromIdentifier(identifier: string): PublicKey { + const [_networkName, _topicId, didIdString] = HcsDid.parseIdentifier(identifier); + return HcsDid.stringToPublicKey(didIdString); + } + /** * Private */ @@ -429,7 +434,7 @@ export class HcsDid { return ret; } - private parseIdentifier(identifier: string): [string, TopicId] { + private static parseIdentifier(identifier: string): [string, TopicId, string] { const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); if (!topicIdPart) { @@ -462,7 +467,7 @@ export class HcsDid { throw new Error("DID string is invalid."); } - return [networkName, topicId]; + return [networkName, topicId, didIdString]; } catch (e) { throw new Error("DID string is invalid. " + e.message); } @@ -475,7 +480,7 @@ export class HcsDid { return false; } - this.parseIdentifier(identifer); + HcsDid.parseIdentifier(identifer); if (!/^(key|service)\-[0-9]{1,}$/.test(id)) { return false; From 788084417c63191271355d7c479fd2b326832f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Wed, 9 Feb 2022 15:30:28 +0100 Subject: [PATCH 066/133] Logic to handle UPDATE DID_OWNER event --- src/identity/did-document-json-properties.ts | 1 + src/identity/did-document.ts | 64 ++++++---- .../hcs/did/event/hcs-did-event-parser.ts | 2 + .../owner/hcs-did-update-did-owner-event.ts | 14 +++ src/identity/hcs/did/hcs-did.ts | 37 +++--- src/index.ts | 2 + test/unit/did-document.test.ts | 109 ++++++++++++++++++ .../hcs-did-update-did-owner-event.test.ts | 96 +++++++++++++++ 8 files changed, 284 insertions(+), 41 deletions(-) create mode 100644 src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts create mode 100644 test/unit/event/owner/hcs-did-update-did-owner-event.test.ts diff --git a/src/identity/did-document-json-properties.ts b/src/identity/did-document-json-properties.ts index f094fd5..55837a8 100644 --- a/src/identity/did-document-json-properties.ts +++ b/src/identity/did-document-json-properties.ts @@ -1,6 +1,7 @@ export module DidDocumentJsonProperties { export const CONTEXT = "@context"; export const ID = "id"; + export const CONTROLLER = "controller"; export const AUTHENTICATION = "authentication"; export const VERIFICATION_METHOD = "verificationMethod"; export const ASSERTION_METHOD = "assertionMethod"; diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 556b13e..59b7d98 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -1,4 +1,10 @@ -import { DidMethodOperation, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidMessage } from ".."; +import { + DidMethodOperation, + HcsDidCreateDidOwnerEvent, + HcsDidCreateServiceEvent, + HcsDidMessage, + HcsDidUpdateDidOwnerEvent, +} from ".."; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; import { HcsDidEventTargetName } from "./hcs/did/event/hcs-did-event-target-name"; @@ -13,7 +19,7 @@ export class DidDocument { private id: string; private context: string; - private owners: Map = new Map(); + private controller: any; private services: Map = new Map(); private verificationMethods: Map = new Map(); @@ -33,7 +39,7 @@ export class DidDocument { } public hasOwner() { - return this.owners.size > 0; + return !this.controller; } public getContext(): string { @@ -50,21 +56,26 @@ export class DidDocument { rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = [ - ...Array.from(this.owners.values()), - ...Array.from(this.verificationMethods.values()), - ]; + if (this.controller && this.id !== this.controller.controller) { + rootObject[DidDocumentJsonProperties.CONTROLLER] = this.controller.controller; + } + + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = Array.from(this.verificationMethods.values()); rootObject[DidDocumentJsonProperties.ASSERTION_METHOD] = [ - ...Array.from(this.owners.keys()), ...this.verificationRelationships[DidDocumentJsonProperties.ASSERTION_METHOD], ]; rootObject[DidDocumentJsonProperties.AUTHENTICATION] = [ - ...Array.from(this.owners.keys()), ...this.verificationRelationships[DidDocumentJsonProperties.AUTHENTICATION], ]; + if (this.controller) { + rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD].unshift(this.controller); + rootObject[DidDocumentJsonProperties.ASSERTION_METHOD].unshift(this.controller.id); + rootObject[DidDocumentJsonProperties.AUTHENTICATION].unshift(this.controller.id); + } + if (this.verificationRelationships[DidDocumentJsonProperties.KEY_AGREEMENT].length > 0) { rootObject[DidDocumentJsonProperties.KEY_AGREEMENT] = [ ...this.verificationRelationships[DidDocumentJsonProperties.KEY_AGREEMENT], @@ -94,6 +105,15 @@ export class DidDocument { private processMessages(messages: HcsDidMessage[]): void { messages.forEach((msg) => { + if ( + !this.controller && + msg.getOperation() === DidMethodOperation.CREATE && + msg.getEvent().targetName !== HcsDidEventTargetName.DID_OWNER + ) { + console.warn("DID document owner is not registered. Event will be ignored..."); + return; + } + switch (msg.getOperation()) { case DidMethodOperation.CREATE: this.processCreateMessage(msg); @@ -121,17 +141,17 @@ export class DidDocument { switch (event.targetName) { case HcsDidEventTargetName.DID_OWNER: - if (this.owners.has(event.getId())) { - console.warn(`Duplicate create DIDOwner event ID: ${event.getId()}. Event will be ignored...`); + if (this.controller) { + console.warn(`DID owner is already registered: ${this.controller}. Event will be ignored...`); return; } - this.owners.set(event.getId(), { + this.controller = { id: event.getId(), type: (event as HcsDidCreateDidOwnerEvent).getType(), controller: (event as HcsDidCreateDidOwnerEvent).getController(), publicKeyMultibase: (event as HcsDidCreateDidOwnerEvent).getPublicKeyMultibase(), - }); + }; return; case HcsDidEventTargetName.SERVICE: if (this.services.has(event.getId())) { @@ -202,10 +222,12 @@ export class DidDocument { switch (event.targetName) { case HcsDidEventTargetName.DID_OWNER: - /** - * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. - */ - console.warn(`Update DidOwner event is not supported. Event will be ignored...`); + this.controller = { + id: event.getId(), + type: (event as HcsDidUpdateDidOwnerEvent).getType(), + controller: (event as HcsDidUpdateDidOwnerEvent).getController(), + publicKeyMultibase: (event as HcsDidUpdateDidOwnerEvent).getPublicKeyMultibase(), + }; return; case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { @@ -272,12 +294,6 @@ export class DidDocument { const event = message.getEvent(); switch (event.targetName) { - case HcsDidEventTargetName.DID_OWNER: - /** - * TODO: we need to decide what DIDOwner operations are possible and how do they reflect on the resolved document. - */ - console.warn(`Revoke DidOwner event is not supported. Event will be ignored...`); - return; case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { console.warn(`Revoke Service event: service event ID: ${event.getId()}. Event will be ignored...`); @@ -344,7 +360,7 @@ export class DidDocument { switch (event.targetName) { case HcsDidEventTargetName.Document: - this.owners.clear(); + this.controller = null; this.services.clear(); this.verificationMethods.clear(); Object.keys(this.verificationRelationships).forEach( diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index c96acc7..5bc42db 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -4,6 +4,7 @@ import { HcsDidDeleteEvent } from "./document/hcs-did-delete-event"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventTargetName } from "./hcs-did-event-target-name"; import { HcsDidCreateDidOwnerEvent } from "./owner/hcs-did-create-did-owner-event"; +import { HcsDidUpdateDidOwnerEvent } from "./owner/hcs-did-update-did-owner-event"; import { HcsDidCreateServiceEvent } from "./service/hcs-did-create-service-event"; import { HcsDidRevokeServiceEvent } from "./service/hcs-did-revoke-service-event"; import { HcsDidUpdateServiceEvent } from "./service/hcs-did-update-service-event"; @@ -22,6 +23,7 @@ const EVENT_NAME_TO_CLASS = { [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidCreateVerificationRelationshipEvent, }, [DidMethodOperation.UPDATE]: { + [HcsDidEventTargetName.DID_OWNER]: HcsDidUpdateDidOwnerEvent, [HcsDidEventTargetName.SERVICE]: HcsDidUpdateServiceEvent, [HcsDidEventTargetName.VERIFICATION_METHOD]: HcsDidUpdateVerificationMethodEvent, [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidUpdateVerificationRelationshipEvent, diff --git a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts new file mode 100644 index 0000000..6922084 --- /dev/null +++ b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts @@ -0,0 +1,14 @@ +import { PublicKey } from "@hashgraph/sdk"; +import { Hashing } from "../../../../.."; +import { HcsDidCreateDidOwnerEvent } from "./hcs-did-create-did-owner-event"; + +export class HcsDidUpdateDidOwnerEvent extends HcsDidCreateDidOwnerEvent { + static fromJsonTree(tree: any): HcsDidUpdateDidOwnerEvent { + if (!tree.id || !tree.controller || !tree.publicKeyMultibase) { + throw new Error("Tree data is missing one of the attributes: id, controller, publicKeyMultibase"); + } + + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + return new HcsDidUpdateDidOwnerEvent(tree.id, tree.controller, publicKey); + } +} diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index d15ff2c..c55ace6 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -106,6 +106,26 @@ export class HcsDid { return this; } + public async changeOwner() { + /** + * TODO: implementation of change owner functionality + */ + throw new Error("not implemented yet"); + } + + public async delete() { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + await this.submitTransaciton(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); + return this; + } + public async resolve(): Promise { if (!this.identifier) { throw new Error("DID is not registered"); @@ -131,23 +151,6 @@ export class HcsDid { }); } - public async delete() { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } - - /** - * TODO: how to send empty message? we have only one listner that is event listner. you can not listen to different type of messages. - * I suggest we send DELETE event - */ - await this.submitTransaciton(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); - return this; - } - /** * Meta-information about DID */ diff --git a/src/index.ts b/src/index.ts index 3df39a4..3ca6647 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import { DidSyntax } from "./identity/did-syntax"; import { HcsDidDeleteEvent } from "./identity/hcs/did/event/document/hcs-did-delete-event"; import { HcsDidEventTargetName } from "./identity/hcs/did/event/hcs-did-event-target-name"; import { HcsDidCreateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-create-did-owner-event"; +import { HcsDidUpdateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-update-did-owner-event"; import { HcsDidCreateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-create-service-event"; import { HcsDidRevokeServiceEvent } from "./identity/hcs/did/event/service/hcs-did-revoke-service-event"; import { HcsDidUpdateServiceEvent } from "./identity/hcs/did/event/service/hcs-did-update-service-event"; @@ -43,6 +44,7 @@ export { Hashing, HcsDid, HcsDidCreateDidOwnerEvent, + HcsDidUpdateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidCreateVerificationMethodEvent, HcsDidCreateVerificationRelationshipEvent, diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 5de31f8..f6ffba8 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -32,6 +32,56 @@ describe("DidDocument", () => { }); }); + it("ignores events til first create DIDOwner event", () => { + const doc = new DidDocument(identifier, [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateServiceEvent( + identifier + "#service-1", + "LinkedDomains", + "https://test.identity.com" + ) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateServiceEvent( + identifier + "#service-2", + "LinkedDomains", + "https://test2.identity.com" + ) + ), + ]); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + id: identifier, + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + it("handles create DIDOwner event", () => { const messages = [ new HcsDidMessage( @@ -78,6 +128,65 @@ describe("DidDocument", () => { }); }); + it("handes change DID owner event", () => { + const otherOwnerKey = PrivateKey.generate(); + const otherOwnerIdentifier = + "did:hedera:testnet:" + Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()) + "_0.0.29999999"; + const key2 = PrivateKey.generate(); + + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) + ), + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-2", + "capabilityDelegation", + "Ed25519VerificationKey2018", + identifier, + key2.publicKey + ) + ), + new HcsDidMessage( + DidMethodOperation.UPDATE, + identifier, + new HcsDidCreateDidOwnerEvent( + otherOwnerIdentifier + "#did-root-key", + otherOwnerIdentifier, + otherOwnerKey.publicKey + ) + ), + ]; + const doc = new DidDocument(identifier, messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${otherOwnerIdentifier}#did-root-key`], + authentication: [`${otherOwnerIdentifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + controller: otherOwnerIdentifier, + id: identifier, + verificationMethod: [ + { + controller: otherOwnerIdentifier, + id: `${otherOwnerIdentifier}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + it("successfuly handles add service, verificationMethod and verificationRelationship events", () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts new file mode 100644 index 0000000..44a1b97 --- /dev/null +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -0,0 +1,96 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing, HcsDidEventTargetName, HcsDidUpdateDidOwnerEvent } from "../../../../dist"; + +describe("HcsDidUpdateDidOwnerEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const event = new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey); + + describe("#constructor", () => { + it("targets DIDOwner", () => { + expect(event.targetName).toEqual(HcsDidEventTargetName.DID_OWNER); + }); + }); + + describe("#getId", () => { + it("returns id that was passed via constructor", () => { + expect(event.getId()).toEqual(identifier + "#did-root-key"); + }); + }); + + describe("#getType", () => { + it("returns Ed25519VerificationKey2018", () => { + expect(event.getType()).toEqual("Ed25519VerificationKey2018"); + }); + }); + + describe("#getController", () => { + it("returns identifier passed via contructor", () => { + expect(event.getController()).toEqual(identifier); + }); + }); + + describe("#getPublicKey", () => { + it("returns public key instance passed via constructor", () => { + expect(event.getPublicKey()).toEqual(privateKey.publicKey); + }); + }); + + describe("#getPublicKeyMultibase", () => { + it("returns base58 encoded publicKey", () => { + expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + }); + }); + + describe("#getBase64", () => { + it("returns event encoded in base64", () => { + expect(event.getBase64()).toEqual( + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6Nk1rb2dWem9HSk1WVkxoYXo4MmNBNWpaUUtBQXFVZ2hoQ3JwemtTREZEd3hmSmFfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + ); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON tree", () => { + expect(event.toJsonTree()).toEqual({ + DIDOwner: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified version of JSON tree", () => { + expect(event.toJSON()).toEqual( + '{"DIDOwner":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds HcsDidUpdateDidOwnerEvent object", () => { + const eventFromJson = HcsDidUpdateDidOwnerEvent.fromJsonTree({ + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidUpdateDidOwnerEvent); + expect(eventFromJson.toJsonTree()).toEqual({ + DIDOwner: { + controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", + id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + }); + }); + }); +}); From 8ae0e9ba9d3be33ce7602a3cf63e0c87b40f341f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Wed, 9 Feb 2022 16:48:18 +0100 Subject: [PATCH 067/133] HcsDid changeOwner API method --- src/identity/hcs/did/hcs-did.ts | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index c55ace6..478e8f2 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -7,6 +7,7 @@ import { HcsDidCreateServiceEvent, HcsDidMessage, HcsDidTransaction, + HcsDidUpdateDidOwnerEvent, MessageEnvelope, } from "../../.."; import { DidSyntax } from "../../did-syntax"; @@ -106,11 +107,29 @@ export class HcsDid { return this; } - public async changeOwner() { + public async changeOwner(args: { id: string; controller: string; publicKey: PublicKey }) { + if (!this.privateKey) { + throw new Error("privateKey is missing"); + } + + if (!this.client) { + throw new Error("Client configuration is missing"); + } + + /** + * There should probably some more checks on new owner information + */ /** - * TODO: implementation of change owner functionality + * TODO: how do we transfer control of the topic to this new user? + * TODO: how messages are going to be signed from now on? */ - throw new Error("not implemented yet"); + + await this.submitTransaciton( + DidMethodOperation.UPDATE, + new HcsDidUpdateDidOwnerEvent(args.id, args.controller, args.publicKey), + this.privateKey + ); + return this; } public async delete() { From f5c818c1d65d04a20ec57069fba8d8722f020689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Wed, 9 Feb 2022 19:14:02 +0100 Subject: [PATCH 068/133] Add some tests for HcsDidMessage --- src/identity/hcs/did/hcs-did-message.ts | 34 +---- src/identity/hcs/message-envelope.ts | 9 +- test/unit/hcs-did-message.test.ts | 195 +++++++++++++----------- 3 files changed, 107 insertions(+), 131 deletions(-) diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index 4493aa8..a1e3fb1 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -1,4 +1,4 @@ -import { Timestamp, TopicId } from "@hashgraph/sdk"; +import { TopicId } from "@hashgraph/sdk"; import { DidMethodOperation } from "../../did-method-operation"; import { DidParser } from "../../did-parser"; import { Message } from "../message"; @@ -13,26 +13,13 @@ export class HcsDidMessage extends Message { protected operation: DidMethodOperation; protected did: string; protected event: HcsDidEvent; - /** - * The date when the DID was created and published. - * It is equal to consensus timestamp of the first creation message. - * This property is set by the listener and injected into the DID document upon calling getDidDocument() method. - */ - - protected created: Timestamp; - /** - * The date when the DID was updated and published. - * It is equal to consensus timestamp of the last valid update or delete message. - * This property is set by the listener and injected into the DID document upon calling getDidDocument() method. - */ - protected updated: Timestamp; /** * Creates a new instance of {@link HcsDidMessage}. * * @param operation The operation on DID document. * @param did The DID string. - * @param event The DID Event. + * @param event The DID Event. */ constructor(operation: DidMethodOperation, did: string, event: HcsDidEvent) { super(); @@ -58,28 +45,13 @@ export class HcsDidMessage extends Message { return this.getEvent().getBase64(); } - public getCreated(): Timestamp { - return this.created; - } - - public getUpdated(): Timestamp { - return this.updated; - } - - public setUpdated(updated: Timestamp): void { - this.updated = updated; - } - - public setCreated(created: Timestamp): void { - this.created = created; - } - /** * Validates this DID message by checking its completeness, signature and DID document. * * @param didTopicId The DID topic ID against which the message is validated. * @return True if the message is valid, false otherwise. */ + public isValid(): boolean; public isValid(didTopicId: TopicId): boolean; public isValid(...args: any[]): boolean { const didTopicId: TopicId = args[0] || null; diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index b943827..94db601 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -27,7 +27,6 @@ export class MessageEnvelope { } return this.message.toJSON(); } - protected decryptedMessage: T; protected mirrorResponse: SerializableMirrorConsensusResponse; /** @@ -171,13 +170,7 @@ export class MessageEnvelope { * @return The message object in a plain mode. */ public open(): T { - if (this.decryptedMessage != null) { - return this.decryptedMessage; - } - - this.decryptedMessage = this.message; - - return this.decryptedMessage; + return this.message; } public getSignature(): string { diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index 0e49aa6..a84927b 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -1,5 +1,6 @@ +import { Client, PrivateKey, TopicId } from "@hashgraph/sdk"; import crypto from "crypto"; -import { TopicId } from "@hashgraph/sdk"; +import { DidMethodOperation, Hashing, HcsDid, HcsDidCreateDidOwnerEvent, HcsDidMessage } from "../../dist"; const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); @@ -26,96 +27,106 @@ const decrypt = (cipherText, key) => { exports.encrypt = encrypt; exports.decrypt = decrypt; -describe("HcsDidMessage", function () { - it("test", () => { - expect(true).toBeTruthy(); +describe("HcsDidMessage", () => { + const client = Client.forTestnet(); + const privateKey = PrivateKey.generate(); + const identifer = `did:hedera:${network}:${Hashing.multibase.encode( + privateKey.publicKey.toBytes() + )}_${DID_TOPIC_ID1}`; + + it("Test Valid Message", () => { + const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + + const message = new HcsDidMessage( + DidMethodOperation.CREATE, + did.getIdentifier(), + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.isValid(DID_TOPIC_ID1)).toEqual(true); + }); + + it("Test Invalid Did", () => { + const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + + const message = new HcsDidMessage( + DidMethodOperation.CREATE, + "invalid_did###", + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.isValid()).toEqual(false); + }); + + it("Test Invalid Topic", () => { + const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + + const message = new HcsDidMessage( + DidMethodOperation.CREATE, + did.getIdentifier(), + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.isValid(DID_TOPIC_ID1)).toEqual(true); + expect(message.isValid(DID_TOPIC_ID2)).toEqual(false); + }); + + it("Test Missing Data", () => { + const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + + let message = new HcsDidMessage( + null, + did.getIdentifier(), + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.getOperation()).toEqual(null); + expect(message.isValid()).toEqual(false); + + message = new HcsDidMessage( + DidMethodOperation.CREATE, + null, + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.getDid()).toEqual(null); + expect(message.isValid()).toEqual(false); + + message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), null); + + expect(message.getEvent()).toEqual(null); + expect(message.isValid()).toEqual(false); + + message = new HcsDidMessage( + DidMethodOperation.CREATE, + did.getIdentifier(), + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + expect(message.isValid()).toEqual(true); }); - // it("Test Valid Message", async function () { - // const client = Client.forTestnet(); - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid({privateKey: privateKey, client: client}); - // const doc = did.generateDidDocument(); - // const didJson = doc.toJSON(); - // const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - // const message = originalEnvelope.sign((msg) => privateKey.sign(msg)); - // const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - // assert.isTrue(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); - // assert.isTrue(envelope.open().isValid(DID_TOPIC_ID1)); - // assert.deepEqual(originalEnvelope.open().getTimestamp(), envelope.open().getTimestamp()); - // }); - // it("Test Encrypted Message", async function () { - // const secret = "Secret encryption password"; - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - // const doc = did.generateDidDocument(); - // const didJson = doc.toJSON(); - // const originalEnvelope = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE); - // const encryptedMsg = originalEnvelope.encrypt(HcsDidMessage.getEncrypter((m) => encrypt(m, secret))); - // const encryptedSignedMsg = MessageEnvelope.fromJson( - // ArraysUtils.toString(encryptedMsg.sign((m) => privateKey.sign(m))), - // HcsDidMessage - // ); - // assert.exists(encryptedSignedMsg); - // assert.throw(() => { - // encryptedSignedMsg.open(); - // }); - // const decryptedMsg = await encryptedSignedMsg.open(HcsDidMessage.getDecrypter((m, t) => decrypt(m, secret))); - // assert.exists(decryptedMsg); - // assert.equal(originalEnvelope.open().getDidDocumentBase64(), decryptedMsg.getDidDocumentBase64()); - // assert.equal(originalEnvelope.open().getDid(), decryptedMsg.getDid()); - // }); - // it("Test Invalid Did", async function () { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - // const doc = did.generateDidDocument(); - // const didJson = doc.toJSON(); - // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - // privateKey.sign(msg) - // ); - // const msg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - // const differentDid = new HcsDid(network, PrivateKey.generate().publicKey, DID_TOPIC_ID1); - // msg.did = differentDid.toDid(); - // assert.isFalse(msg.isValid()); - // }); - // it("Test Invalid Topic", async function () { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - // const doc = did.generateDidDocument(); - // const didJson = doc.toJSON(); - // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - // privateKey.sign(msg) - // ); - // const msg = await MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - // assert.isTrue(msg.isValid(DID_TOPIC_ID1)); - // assert.isFalse(msg.isValid(DID_TOPIC_ID2)); - // }); - // it("Test Missing Data", async function () { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - // const doc = did.generateDidDocument(); - // const operation = DidMethodOperation.CREATE; - // const didJson = doc.toJSON(); - // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - // privateKey.sign(msg) - // ); - // const validMsg = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage).open(); - // let msg = new HcsDidMessage(operation, null, validMsg.getDidDocumentBase64()); - // assert.isFalse(msg.isValid()); - // msg = new HcsDidMessage(operation, validMsg.getDid(), null); - // assert.isFalse(msg.isValid()); - // assert.notExists(msg.getDidDocument()); - // assert.exists(msg.getDid()); - // assert.equal(operation, msg.getOperation()); - // }); - // it("Test Invalid Signature", async function () { - // const privateKey = PrivateKey.generate(); - // const did = new HcsDid(network, privateKey.publicKey, DID_TOPIC_ID1); - // const doc = did.generateDidDocument(); - // const didJson = doc.toJSON(); - // const message = HcsDidMessage.fromDidDocumentJson(didJson, DidMethodOperation.CREATE).sign((msg) => - // PrivateKey.generate().sign(msg) - // ); - // const envelope = MessageEnvelope.fromJson(Buffer.from(message).toString("utf8"), HcsDidMessage); - // assert.isFalse(envelope.isSignatureValid((e) => e.open().extractDidRootKey())); - // }); }); From 4baa75cb13ce6246e4cbe07601f97d6bb445b173 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 10 Feb 2022 11:11:05 +1100 Subject: [PATCH 069/133] added integration test for revoke and re-add service with same id --- test/integration/hcs-did.test.ts | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 5773777..254301e 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -407,6 +407,56 @@ describe("HcsDid", () => { expect(did.getMessages().length).toEqual(3); }); + + it("revoke and re-add Service with same service-ID and verify DID Document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + await did.revokeService({ + id: did.getIdentifier() + "#service-1", + }); + + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://meeco.me/vijay", + }); + + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + + expect(didDocument).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + service: [ + { + id: `${did.getIdentifier()}#service-1`, + serviceEndpoint: "https://meeco.me/vijay", + type: "LinkedDomains", + }, + ], + }); + + expect(did.getMessages().length).toEqual(4); + }); }); describe("Add Update and Revoke VerificationMethod meta-information", () => { From 0db995894ce38d551e2eaa0dac0a2fd5f144ba0f Mon Sep 17 00:00:00 2001 From: elena Date: Thu, 10 Feb 2022 11:20:13 +1100 Subject: [PATCH 070/133] style: Fix some typos(MEE-3046). --- README.md | 28 +++--- ...2_add_update_revoke_verification_method.js | 14 +-- ...update_revoke_verification_relationship.js | 14 +-- src/identity/did-document.ts | 6 +- .../hcs/did/event/hcs-did-event-parser.ts | 6 +- .../hcs/did/hcs-did-event-message-resolver.ts | 2 +- src/identity/hcs/did/hcs-did.ts | 48 +++++----- src/identity/hcs/message-listener.ts | 6 +- test/integration/hcs-did.test.ts | 88 +++++++++---------- 9 files changed, 106 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index afcd562..5f07845 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,7 @@ const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); -const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; +const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); @@ -181,8 +181,8 @@ const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw * Add Verification Method */ let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); -did = await did.addVerificaitonMethod({ - id: newVerificaitonDid, +did = await did.addVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, @@ -198,8 +198,8 @@ console.log(JSON.stringify(didDocument)); * Update Verification Method * ID must be same as ADD Verification Method Event to update it */ -did = await did.updateVerificaitonMethod({ - id: newVerificaitonDid, +did = await did.updateVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey: updatePublicKey, @@ -214,8 +214,8 @@ console.log(JSON.stringify(didDocument)); /** * Revoke Verification Method */ -did = await did.revokeVerificaitonMethod({ - id: newVerificaitonDid, +did = await did.revokeVerificationMethod({ + id: newVerificationDid, }); console.log("\n"); @@ -244,7 +244,7 @@ const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); -const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; +const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); @@ -252,8 +252,8 @@ const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw * Add VerificationRelationship - authentication */ let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); -did = await did.addVerificaitonRelationship({ - id: newVerificaitonDid, +did = await did.addVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -270,8 +270,8 @@ console.log(JSON.stringify(didDocument)); * Update VerificationRelationship - authentication * ID & relationshipType must be same as ADD Service Event to update it */ -did = await did.updateVerificaitonRelationship({ - id: newVerificaitonDid, +did = await did.updateVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -288,8 +288,8 @@ console.log(JSON.stringify(didDocument)); * Revoke Service * ID & relationshipType must be same as ADD Service Event to update it */ -did = await did.revokeVerificaitonRelationship({ - id: newVerificaitonDid, +did = await did.revokeVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", }); diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index a2dde76..10e54d0 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -10,7 +10,7 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); - const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); @@ -18,8 +18,8 @@ async function main() { * Add Verification Method */ let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - did = await did.addVerificaitonMethod({ - id: newVerificaitonDid, + did = await did.addVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, @@ -35,8 +35,8 @@ async function main() { * Update Verification Method * ID must be same as ADD Verification Method Event to update it */ - did = await did.updateVerificaitonMethod({ - id: newVerificaitonDid, + did = await did.updateVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey: updatePublicKey, @@ -51,8 +51,8 @@ async function main() { /** * Revoke Verification Method */ - did = await did.revokeVerificaitonMethod({ - id: newVerificaitonDid, + did = await did.revokeVerificationMethod({ + id: newVerificationDid, }); console.log("\n"); diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index a99bbb6..945e6f9 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -10,7 +10,7 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); - const newVerificaitonDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); @@ -18,8 +18,8 @@ async function main() { * Add VerificationRelationship - authentication */ let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - did = await did.addVerificaitonRelationship({ - id: newVerificaitonDid, + did = await did.addVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -36,8 +36,8 @@ async function main() { * Update VerificationRelationship - authentication * ID & relationshipType must be same as ADD Service Event to update it */ - did = await did.updateVerificaitonRelationship({ - id: newVerificaitonDid, + did = await did.updateVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -54,8 +54,8 @@ async function main() { * Revoke Service * ID & relationshipType must be same as ADD Service Event to update it */ - did = await did.revokeVerificaitonRelationship({ - id: newVerificaitonDid, + did = await did.revokeVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", }); diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 59b7d98..6c97b2d 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -16,8 +16,8 @@ import { HcsDidRevokeVerificationRelationshipEvent } from "./hcs/did/event/verif import { HcsDidUpdateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; export class DidDocument { - private id: string; - private context: string; + private readonly id: string; + private readonly context: string; private controller: any; private services: Map = new Map(); @@ -263,7 +263,7 @@ export class DidDocument { if (this.verificationRelationships[type]) { if (!this.verificationRelationships[type].includes(event.getId())) { console.warn( - `Update VerificationRelationship event: veritificationRelationship with ID: ${event.getId()} was not found in the document. Event will be ignored...` + `Update VerificationRelationship event: verificationRelationship with ID: ${event.getId()} was not found in the document. Event will be ignored...` ); return; } diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 5bc42db..45c50cd 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -43,10 +43,10 @@ export class HcsDidEventParser { try { const tree = JSON.parse(Hashing.base64.decode(eventBase64)); - const eventsByOpration = EVENT_NAME_TO_CLASS[operation]; - const eventTargetName = Object.keys(eventsByOpration).find((etn) => !!tree[etn]); + const eventsByOperation = EVENT_NAME_TO_CLASS[operation]; + const eventTargetName = Object.keys(eventsByOperation).find((etn) => !!tree[etn]); - return eventsByOpration[eventTargetName].fromJsonTree(tree[eventTargetName]); + return eventsByOperation[eventTargetName].fromJsonTree(tree[eventTargetName]); } catch { return null; } diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 7cd73f2..fb38995 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -23,7 +23,7 @@ export class HcsDidEventMessageResolver { private resultsHandler: (input: HcsDidMessage[]) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; - private listener: MessageListener; + private readonly listener: MessageListener; private noMoreMessagesTimeout: Long; /** diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 478e8f2..0bd39df 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -102,7 +102,7 @@ export class HcsDid { this.identifier, this.privateKey.publicKey ); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -124,7 +124,7 @@ export class HcsDid { * TODO: how messages are going to be signed from now on? */ - await this.submitTransaciton( + await this.submitTransaction( DidMethodOperation.UPDATE, new HcsDidUpdateDidOwnerEvent(args.id, args.controller, args.publicKey), this.privateKey @@ -141,7 +141,7 @@ export class HcsDid { throw new Error("Client configuration is missing"); } - await this.submitTransaciton(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); + await this.submitTransaction(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); return this; } @@ -189,7 +189,7 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidCreateServiceEvent(args.id, args.type, args.serviceEndpoint); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -209,7 +209,7 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidUpdateServiceEvent(args.id, args.type, args.serviceEndpoint); - await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); return this; } @@ -227,7 +227,7 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidRevokeServiceEvent(args.id); - await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); return this; } @@ -236,7 +236,7 @@ export class HcsDid { * @param args * @returns this */ - public async addVerificaitonMethod(args: { + public async addVerificationMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; @@ -252,7 +252,7 @@ export class HcsDid { } const event = new HcsDidCreateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -262,7 +262,7 @@ export class HcsDid { * @param args * @returns this */ - public async updateVerificaitonMethod(args: { + public async updateVerificationMethod(args: { id: string; type: VerificationMethodSupportedKeyType; controller: string; @@ -278,7 +278,7 @@ export class HcsDid { } const event = new HcsDidUpdateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); - await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); return this; } @@ -288,7 +288,7 @@ export class HcsDid { * @param args * @returns this */ - public async revokeVerificaitonMethod(args: { id: string }) { + public async revokeVerificationMethod(args: { id: string }) { this.validateClientConfig(); if (!args || !args.id) { throw new Error("Validation failed. Verification Method args are missing"); @@ -299,7 +299,7 @@ export class HcsDid { } const event = new HcsDidRevokeVerificationMethodEvent(args.id); - await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); return this; } @@ -309,7 +309,7 @@ export class HcsDid { * @param args * @returns this */ - public async addVerificaitonRelationship(args: { + public async addVerificationRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; @@ -332,7 +332,7 @@ export class HcsDid { args.controller, args.publicKey ); - await this.submitTransaciton(DidMethodOperation.CREATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); return this; } @@ -342,7 +342,7 @@ export class HcsDid { * @param args * @returns this */ - public async updateVerificaitonRelationship(args: { + public async updateVerificationRelationship(args: { id: string; relationshipType: VerificationRelationshipType; type: VerificationRelationshipSupportedKeyType; @@ -364,7 +364,7 @@ export class HcsDid { args.controller, args.publicKey ); - await this.submitTransaciton(DidMethodOperation.UPDATE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); return this; } @@ -373,7 +373,7 @@ export class HcsDid { * @param args * @returns this */ - public async revokeVerificaitonRelationship(args: { id: string; relationshipType: VerificationRelationshipType }) { + public async revokeVerificationRelationship(args: { id: string; relationshipType: VerificationRelationshipType }) { this.validateClientConfig(); if (!args || !args.id) { throw new Error("Verification Relationship args are missing"); @@ -383,7 +383,7 @@ export class HcsDid { throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); } const event = new HcsDidRevokeVerificationRelationshipEvent(args.id, args.relationshipType); - await this.submitTransaciton(DidMethodOperation.REVOKE, event, this.privateKey); + await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); return this; } @@ -496,13 +496,13 @@ export class HcsDid { } private isEventIdValid(eventId: string) { - const [identifer, id] = eventId.split("#"); + const [identifier, id] = eventId.split("#"); - if (!identifer || !id) { + if (!identifier || !id) { return false; } - HcsDid.parseIdentifier(identifer); + HcsDid.parseIdentifier(identifier); if (!/^(key|service)\-[0-9]{1,}$/.test(id)) { return false; @@ -522,13 +522,13 @@ export class HcsDid { } /** - * Submit Message Transaciton to Hashgraph + * Submit Message Transaction to Hashgraph * @param didMethodOperation * @param event * @param privateKey * @returns this */ - private async submitTransaciton( + private async submitTransaction( didMethodOperation: DidMethodOperation, event: HcsDidEvent, privateKey: PrivateKey @@ -548,7 +548,7 @@ export class HcsDid { .onMessageConfirmed((msg) => { console.log("Message Published"); console.log( - `Explor on dragonglass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` + `Explore on DragonGlass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` ); resolve(msg); }) diff --git a/src/identity/hcs/message-listener.ts b/src/identity/hcs/message-listener.ts index 1e8013f..4322af8 100644 --- a/src/identity/hcs/message-listener.ts +++ b/src/identity/hcs/message-listener.ts @@ -5,7 +5,7 @@ import { Message } from "./message"; import { MessageEnvelope } from "./message-envelope"; /** - * A listener of confirmed messages from a HCS identity topic. + * A listener of confirmed messages from an HCS identity topic. * Messages are received from a given mirror node, parsed and validated. */ export abstract class MessageListener { @@ -32,7 +32,7 @@ export abstract class MessageListener { /** * Extracts and parses the message inside the response object into the given type. * - * @param response Response message coming from the mirror node for for this listener's topic. + * @param response Response message coming from the mirror node for this listener's topic. * @return The message inside an envelope. */ protected abstract extractMessage(response: TopicMessage): MessageEnvelope; @@ -41,7 +41,7 @@ export abstract class MessageListener { * Validates the message and its envelope signature. * * @param message The message inside an envelope. - * @param response Response message coming from the mirror node for for this listener's topic. + * @param response Response message coming from the mirror node for this listener's topic. * @return True if the message is valid, False otherwise. */ protected abstract isMessageValid(message: MessageEnvelope, response: TopicMessage): boolean; diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 5773777..6939847 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -425,7 +425,7 @@ describe("HcsDid", () => { const did = new HcsDid({ identifier }); try { - await did.addVerificaitonMethod(undefined); + await did.addVerificationMethod(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("privateKey is missing"); @@ -437,7 +437,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey }); try { - await did.addVerificaitonMethod(undefined); + await did.addVerificationMethod(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Client configuration is missing"); @@ -449,7 +449,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey, client }); try { - await did.addVerificaitonMethod(undefined); + await did.addVerificationMethod(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Validation failed. Verification Method args are missing"); @@ -460,14 +460,14 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); await did.register(); - await did.addVerificaitonMethod({ - id: newVerificaitonDid, + await did.addVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, @@ -498,7 +498,7 @@ describe("HcsDid", () => { }, { controller: did.getIdentifier(), - id: newVerificaitonDid, + id: newVerificationDid, publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, @@ -513,21 +513,21 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); await did.register(); - await did.addVerificaitonMethod({ - id: newVerificaitonDid, + await did.addVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, }); - await did.updateVerificaitonMethod({ - id: newVerificaitonDid, + await did.updateVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey: updatePublicKey, @@ -558,7 +558,7 @@ describe("HcsDid", () => { }, { controller: did.getIdentifier(), - id: newVerificaitonDid, + id: newVerificationDid, publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), type: "Ed25519VerificationKey2018", }, @@ -572,20 +572,20 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); await did.register(); - await did.addVerificaitonMethod({ - id: newVerificaitonDid, + await did.addVerificationMethod({ + id: newVerificationDid, type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, }); - await did.revokeVerificaitonMethod({ - id: newVerificaitonDid, + await did.revokeVerificationMethod({ + id: newVerificationDid, }); /** @@ -635,7 +635,7 @@ describe("HcsDid", () => { const did = new HcsDid({ identifier }); try { - await did.addVerificaitonMethod(undefined); + await did.addVerificationMethod(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("privateKey is missing"); @@ -647,7 +647,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey }); try { - await did.addVerificaitonMethod(undefined); + await did.addVerificationMethod(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Client configuration is missing"); @@ -659,7 +659,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey, client }); try { - await did.addVerificaitonRelationship(undefined); + await did.addVerificationRelationship(undefined); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Verification Relationship args are missing"); @@ -670,15 +670,15 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); await ( await did.register() - ).addVerificaitonRelationship({ - id: newVerificaitonDid, + ).addVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -691,7 +691,7 @@ describe("HcsDid", () => { expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], - authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificaitonDid}`], + authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificationDid}`], id: did.getIdentifier(), verificationMethod: [ { @@ -702,7 +702,7 @@ describe("HcsDid", () => { }, { controller: did.getIdentifier(), - id: newVerificaitonDid, + id: newVerificationDid, publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, @@ -716,22 +716,22 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); await did.register(); - await did.addVerificaitonRelationship({ - id: newVerificaitonDid, + await did.addVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, }); - await did.updateVerificaitonRelationship({ - id: newVerificaitonDid, + await did.updateVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), @@ -744,7 +744,7 @@ describe("HcsDid", () => { expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], - authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificaitonDid}`], + authentication: [`${did.getIdentifier()}#did-root-key`, `${newVerificationDid}`], id: did.getIdentifier(), verificationMethod: [ { @@ -755,7 +755,7 @@ describe("HcsDid", () => { }, { controller: did.getIdentifier(), - id: newVerificaitonDid, + id: newVerificationDid, publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), type: "Ed25519VerificationKey2018", }, @@ -770,21 +770,21 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verificaiton DID and publickey - const newVerificaitonDid = + //new verification DID and publickey + const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); await did.register(); - await did.addVerificaitonRelationship({ - id: newVerificaitonDid, + await did.addVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", type: "Ed25519VerificationKey2018", controller: did.getIdentifier(), publicKey, }); - await did.revokeVerificaitonRelationship({ - id: newVerificaitonDid, + await did.revokeVerificationRelationship({ + id: newVerificationDid, relationshipType: "authentication", }); From f2029d32d98668ed56f0fff52873a66275538f30 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 10 Feb 2022 15:38:01 +1100 Subject: [PATCH 071/133] minor fixies and added tests --- src/identity/hcs/did/hcs-did-transaction.ts | 17 +---- src/identity/hcs/message-transaction.ts | 19 +----- test/integration/hcs-did.test.ts | 18 +++--- test/unit/hcs-did-transaction.test.ts | 72 +++++++++++++++++++++ 4 files changed, 85 insertions(+), 41 deletions(-) create mode 100644 test/unit/hcs-did-transaction.test.ts diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index faa9eac..5ee167a 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -1,5 +1,4 @@ import { TopicId } from "@hashgraph/sdk"; -import { Encrypter } from "../message"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; import { MessageTransaction } from "../message-transaction"; @@ -17,27 +16,15 @@ export class HcsDidTransaction extends MessageTransaction { * @param topicId The HCS DID topic ID where message will be submitted. * @param message The message envelope. */ - constructor(message: MessageEnvelope, topicId: TopicId); - constructor(...args) { - if (args[0] instanceof MessageEnvelope && args[1] instanceof TopicId && args.length === 2) { - const [message, topicId] = args; + constructor(message: MessageEnvelope, topicId: TopicId) { + if (message instanceof MessageEnvelope && topicId instanceof TopicId) { super(topicId, message); } else { throw new Error("Invalid arguments"); } } - protected buildMessage(): MessageEnvelope { - throw new Error("we no longer submit the whole DID document"); - // return HcsDidMessage.fromDidDocumentJson(this.didDocument, this.operation); - } - protected provideTopicListener(topicIdToListen: TopicId): MessageListener { return new HcsDidTopicListener(topicIdToListen); } - - protected provideMessageEncrypter(encryptionFunction: Encrypter): (input: HcsDidMessage) => HcsDidMessage { - throw new Error("we no longer encrypt messages"); - // return HcsDidMessage.getEncrypter(encryptionFunction); - } } diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index d788a70..97d58cf 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -2,7 +2,7 @@ import { Client, Timestamp, TopicId, TopicMessageSubmitTransaction, Transaction, import moment from "moment"; import { ArraysUtils } from "../../utils/arrays-utils"; import { Validator } from "../../utils/validator"; -import { Encrypter, Message, Signer } from "./message"; +import { Message, Signer } from "./message"; import { MessageEnvelope } from "./message-envelope"; import { MessageListener } from "./message-listener"; @@ -47,21 +47,6 @@ export abstract class MessageTransaction { } } - /** - * Method that constructs a message envelope with a message of type T. - * - * @return The message envelope with a message inside ready to sign. - */ - protected abstract buildMessage(): MessageEnvelope; - - /** - * Provides an instance of a message encrypter. - * - * @param encryptionFunction Encryption function used to encrypt single message property. - * @return The message encrypter instance. - */ - protected abstract provideMessageEncrypter(encryptionFunction: Encrypter): (input: T) => T; - /** * Provides a {@link MessageListener} instance specific to the submitted message type. * @@ -143,7 +128,7 @@ export abstract class MessageTransaction { return this.validate(v); }); - const envelope = !this.message ? this.buildMessage() : this.message; + const envelope = this.message; const messageContent = !envelope.getSignature() ? envelope.sign(this.signer) diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 26bdf44..a53c8c4 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -17,7 +17,7 @@ describe("HcsDid", () => { expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); }); - it("successfuly builds HcsDid with private key only", () => { + it("successfully builds HcsDid with private key only", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); @@ -28,7 +28,7 @@ describe("HcsDid", () => { expect(did.getNetwork()).toEqual(undefined); }); - it("successfuly builds HcsDid with identifier only", () => { + it("successfully builds HcsDid with identifier only", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); @@ -39,7 +39,7 @@ describe("HcsDid", () => { expect(did.getNetwork()).toEqual("testnet"); }); - it("throws error if passed identifer is invalid", () => { + it("throws error if passed identifier is invalid", () => { [ null, "invalidDid1", @@ -128,7 +128,7 @@ describe("HcsDid", () => { expect(did.getClient()).toEqual(client); expect(did.getNetwork()).toEqual("testnet"); - const messages = await readtTopicMessages(did.getTopicId(), client); + const messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(1); }); @@ -140,19 +140,19 @@ describe("HcsDid", () => { await did.register(); const topicId = did.getTopicId(); - let messages = await readtTopicMessages(did.getTopicId(), client); + let messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(1); await did.delete(); expect(did.getTopicId()).toEqual(topicId); - messages = await readtTopicMessages(did.getTopicId(), client); + messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(2); await did.register(); expect(did.getTopicId()).toEqual(topicId); - messages = await readtTopicMessages(did.getTopicId(), client); + messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(3); }); }); @@ -266,7 +266,7 @@ describe("HcsDid", () => { } }); - it("thorws error if event id is not valid", async () => { + it("throws error if event id is not valid", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); @@ -866,7 +866,7 @@ describe("HcsDid", () => { * Test Helpers */ -async function readtTopicMessages(topicId, client, timeout = null) { +async function readTopicMessages(topicId, client, timeout = null) { const messages = []; new TopicMessageQuery() diff --git a/test/unit/hcs-did-transaction.test.ts b/test/unit/hcs-did-transaction.test.ts new file mode 100644 index 0000000..110e7ac --- /dev/null +++ b/test/unit/hcs-did-transaction.test.ts @@ -0,0 +1,72 @@ +import { Client, Hbar, PrivateKey, TopicId } from "@hashgraph/sdk"; +import { + Hashing, + HcsDid, + HcsDidMessage, + DidMethodOperation, + HcsDidCreateDidOwnerEvent, + MessageEnvelope, + HcsDidTransaction, + HcsDidTopicListener, +} from "../../dist"; + +describe("HcsDidTransaction", () => { + const network = "testnet"; + const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); + const client = Client.forTestnet(); + const privateKey = PrivateKey.generate(); + const identifier = `did:hedera:${network}:${Hashing.multibase.encode( + privateKey.publicKey.toBytes() + )}_${DID_TOPIC_ID1}`; + const TRANSACTION_FEE = new Hbar(2); + + describe("execute", () => { + const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); + const message = new HcsDidMessage( + DidMethodOperation.CREATE, + "invalid_did###", + new HcsDidCreateDidOwnerEvent( + did.getIdentifier() + "#did-root-key", + did.getIdentifier(), + privateKey.publicKey + ) + ); + + const envelope = new MessageEnvelope(message); + const transaction = new HcsDidTransaction(envelope, DID_TOPIC_ID1); + + it("Validation Errors: signing & Transaction builder function missing", async () => { + await expect(transaction.execute(client)).rejects.toThrow( + "MessageTransaction execution failed: :\nSigning function is missing.\nTransaction builder is missing." + ); + }); + + it("Validation Errors: Transaction builder function missing", async () => { + await expect(transaction.signMessage((msg) => privateKey.sign(msg)).execute(client)).rejects.toThrow( + "MessageTransaction execution failed: :\nTransaction builder is missing." + ); + }); + + //TODO: mock dependencies and test submitTransaction + + // it("", async () => { + // const submitTransaction = await new Promise((resolve, reject) => { + // transaction + // .signMessage((msg) => privateKey.sign(msg)) + // .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) + // .onError((err) => { + // console.error(err); + // reject(err); + // }) + // .onMessageConfirmed((msg) => { + // console.log("Message Published"); + // console.log( + // `Explore on DragonGlass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` + // ); + // resolve(msg); + // }) + // .execute(client); + // }); + // }); + }); +}); From d15945be13270736eed998b2d792a26cd0d6886d Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 10 Feb 2022 16:27:52 +1100 Subject: [PATCH 072/133] fix has owner bug --- src/identity/did-document.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 6c97b2d..abd0d00 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -39,7 +39,7 @@ export class DidDocument { } public hasOwner() { - return !this.controller; + return !!this.controller; } public getContext(): string { From 6e126f75764c4ccf26a2b5b452e8ee0c041d4ad7 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Thu, 10 Feb 2022 17:10:07 +1100 Subject: [PATCH 073/133] added few more tests --- test/unit/did-parser.test.ts | 39 +++++++++++++++++++++++++++ test/unit/hcs-did-transaction.test.ts | 20 -------------- 2 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 test/unit/did-parser.test.ts diff --git a/test/unit/did-parser.test.ts b/test/unit/did-parser.test.ts new file mode 100644 index 0000000..8500ff4 --- /dev/null +++ b/test/unit/did-parser.test.ts @@ -0,0 +1,39 @@ +import { DidParser, Hashing } from "../../dist"; +import { PrivateKey } from "@hashgraph/sdk"; + +describe("DidParser", () => { + it("throw an error when invalid did string provided", async () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((did) => { + expect(() => { + DidParser.parse(did); + }).toThrowError(); + }); + }); + + it("should part string did and provide HcsDid object", async () => { + const privateKey = PrivateKey.generate(); + + const publickeybytes = privateKey.publicKey.toBytes(); + const base58btcEncodedString = Hashing.multibase.encode(publickeybytes); + + [ + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29643290", + `did:hedera:testnet:${base58btcEncodedString}_0.0.1`, + ].forEach((did) => { + expect(DidParser.parse(did)).toBeDefined(); + }); + }); +}); diff --git a/test/unit/hcs-did-transaction.test.ts b/test/unit/hcs-did-transaction.test.ts index 110e7ac..df28c65 100644 --- a/test/unit/hcs-did-transaction.test.ts +++ b/test/unit/hcs-did-transaction.test.ts @@ -48,25 +48,5 @@ describe("HcsDidTransaction", () => { }); //TODO: mock dependencies and test submitTransaction - - // it("", async () => { - // const submitTransaction = await new Promise((resolve, reject) => { - // transaction - // .signMessage((msg) => privateKey.sign(msg)) - // .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) - // .onError((err) => { - // console.error(err); - // reject(err); - // }) - // .onMessageConfirmed((msg) => { - // console.log("Message Published"); - // console.log( - // `Explore on DragonGlass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` - // ); - // resolve(msg); - // }) - // .execute(client); - // }); - // }); }); }); From b2c3dccf39fdf999a4b06027d27ceaa5b9795a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 10 Feb 2022 14:16:47 +0100 Subject: [PATCH 074/133] Set submitKey to topic; Implemented change topic ownership logic; More tests --- .../hcs/did/hcs-did-topic-listener.ts | 11 +- src/identity/hcs/did/hcs-did.ts | 70 ++++- src/identity/hcs/message-transaction.ts | 6 +- test/integration/hcs-did.test.ts | 244 ++++++++++++++---- test/unit/hcs-did-transaction.test.ts | 7 +- 5 files changed, 266 insertions(+), 72 deletions(-) diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 529b9ae..008e59b 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -1,7 +1,6 @@ import { TopicId, TopicMessage } from "@hashgraph/sdk"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; -import { HcsDid } from "./hcs-did"; import { HcsDidMessage } from "./hcs-did-message"; /** @@ -38,11 +37,11 @@ export class HcsDidTopicListener extends MessageListener { return false; } - const key = HcsDid.parsePublicKeyFromIdentifier(message.getDid()); - if (!envelope.isSignatureValid(key)) { - this.reportInvalidMessage(response, "Signature validation failed"); - return false; - } + // const key = HcsDid.parsePublicKeyFromIdentifier(message.getDid()); + // if (!envelope.isSignatureValid(key)) { + // this.reportInvalidMessage(response, "Signature validation failed"); + // return false; + // } if (!message.isValid(this.topicId)) { this.reportInvalidMessage(response, "Message content validation failed."); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 0bd39df..d09f526 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -1,4 +1,13 @@ -import { Client, Hbar, PrivateKey, PublicKey, Timestamp, TopicCreateTransaction, TopicId } from "@hashgraph/sdk"; +import { + Client, + Hbar, + PrivateKey, + PublicKey, + Timestamp, + TopicCreateTransaction, + TopicId, + TopicUpdateTransaction, +} from "@hashgraph/sdk"; import { DidDocument, DidMethodOperation, @@ -84,9 +93,12 @@ export class HcsDid { */ const topicCreateTransaction = new TopicCreateTransaction() .setMaxTransactionFee(HcsDid.TRANSACTION_FEE) - .setAdminKey(this.privateKey.publicKey); + .setAdminKey(this.privateKey.publicKey) + .setSubmitKey(this.privateKey.publicKey) + .freezeWith(this.client); - const txId = await topicCreateTransaction.execute(this.client); + const sigTx = await topicCreateTransaction.sign(this.privateKey); + const txId = await sigTx.execute(this.client); const topicId = (await txId.getReceipt(this.client)).topicId; this.topicId = topicId; @@ -107,7 +119,11 @@ export class HcsDid { return this; } - public async changeOwner(args: { id: string; controller: string; publicKey: PublicKey }) { + public async changeOwner(args: { id: string; controller: string; newPrivateKey: PrivateKey }) { + if (!this.identifier) { + throw new Error("DID is not registered"); + } + if (!this.privateKey) { throw new Error("privateKey is missing"); } @@ -116,23 +132,48 @@ export class HcsDid { throw new Error("Client configuration is missing"); } + if (!args.newPrivateKey) { + throw new Error("newPrivateKey is missing"); + } + + await this.resolve(); + + if (!this.document.hasOwner()) { + throw new Error("DID is not registered or was recently deleted. DID has to be registered first."); + } + /** - * There should probably some more checks on new owner information + * Change owner of the topic */ + const transaction = await new TopicUpdateTransaction() + .setTopicId(this.topicId) + .setAdminKey(args.newPrivateKey.publicKey) + .setSubmitKey(args.newPrivateKey.publicKey) + .freezeWith(this.client); + + const signTx = await (await transaction.sign(this.privateKey)).sign(args.newPrivateKey); + await signTx.execute(this.client); + // const txResponse = await signTx.execute(this.client); + // await txResponse.getReceipt(this.client); + + this.privateKey = args.newPrivateKey; + /** - * TODO: how do we transfer control of the topic to this new user? - * TODO: how messages are going to be signed from now on? + * Send ownership change message to the topic */ - await this.submitTransaction( DidMethodOperation.UPDATE, - new HcsDidUpdateDidOwnerEvent(args.id, args.controller, args.publicKey), + new HcsDidUpdateDidOwnerEvent(args.id + "#did-root-key", args.controller, args.newPrivateKey.publicKey), this.privateKey ); return this; } public async delete() { + if (!this.identifier) { + throw new Error("DID is not registered"); + } + if (!this.privateKey) { throw new Error("privateKey is missing"); } @@ -539,8 +580,15 @@ export class HcsDid { return new Promise((resolve, reject) => { transaction - .signMessage((msg) => privateKey.sign(msg)) - .buildAndSignTransaction((tx) => tx.setMaxTransactionFee(HcsDid.TRANSACTION_FEE)) + .signMessage((msg) => { + return privateKey.sign(msg); + }) + .buildAndSignTransaction((tx) => { + return tx + .setMaxTransactionFee(HcsDid.TRANSACTION_FEE) + .freezeWith(this.client) + .sign(this.privateKey); + }) .onError((err) => { console.error(err); reject(err); diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index 97d58cf..561aa0e 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -12,7 +12,7 @@ export abstract class MessageTransaction { protected topicId: TopicId; protected message: MessageEnvelope; - private buildTransactionFunction: (input: TopicMessageSubmitTransaction) => Transaction; + private buildTransactionFunction: (input: TopicMessageSubmitTransaction) => Promise; private receiver: (input: MessageEnvelope) => void; private errorHandler: (input: Error) => void; private executed: boolean; @@ -111,7 +111,7 @@ export abstract class MessageTransaction { * @return This transaction instance. */ public buildAndSignTransaction( - builderFunction: (input: TopicMessageSubmitTransaction) => Transaction + builderFunction: (input: TopicMessageSubmitTransaction) => Promise ): MessageTransaction { this.buildTransactionFunction = builderFunction; return this; @@ -166,7 +166,7 @@ export abstract class MessageTransaction { let transactionId; try { - const response = await this.buildTransactionFunction(tx).execute(client); + const response = await (await this.buildTransactionFunction(tx)).execute(client); transactionId = response.transactionId; this.executed = true; } catch (e) { diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index a53c8c4..7465b9b 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -12,6 +12,16 @@ const NETWORK = "testnet"; const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; describe("HcsDid", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + describe("#constructor", () => { it("throws error because of missing identifier and privateKey", () => { expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); @@ -74,16 +84,6 @@ describe("HcsDid", () => { }); describe("#register", () => { - let client; - - beforeAll(() => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(MIRROR_PROVIDER); - client.setOperator(operatorId, operatorKey); - }); - it("throws error if DID is already registered", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); @@ -158,16 +158,6 @@ describe("HcsDid", () => { }); describe("#resolve", () => { - let client; - - beforeAll(() => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(MIRROR_PROVIDER); - client.setOperator(operatorId, operatorKey); - }); - it("throws error about unregistered DID", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); @@ -219,17 +209,194 @@ describe("HcsDid", () => { }); }); - describe("Add Update and Revoke Service meta-information", () => { - let client; + describe("#delete", () => { + it("throws error if DID is not registered", async () => { + const did = new HcsDid({ privateKey: PrivateKey.fromString(OPERATOR_KEY), client }); + try { + await did.delete(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("DID is not registered"); + } + }); - beforeAll(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(MIRROR_PROVIDER); - client.setOperator(operatorId, operatorKey); + it("throws error if instance has no privateKey assigned", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, client }); + try { + await did.delete(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error if instance has no client assigned", async () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, privateKey: PrivateKey.fromString(OPERATOR_KEY) }); + try { + await did.delete(); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } }); + it("deletes the DID document", async () => { + const didPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey: didPrivateKey, client }); + + await did.register(); + + let didJSON = (await did.resolve()).toJsonTree(); + expect(didJSON).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(didPrivateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + await did.delete(); + + didJSON = (await did.resolve()).toJsonTree(); + expect(didJSON).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: did.getIdentifier(), + verificationMethod: [], + }); + + let messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); + }); + }); + + describe("#changeOwner", () => { + const docIdentifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.99999999"; + const newOwnerIdentifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + + it("throws error that DID is not registered", async () => { + const didPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey: didPrivateKey, client: client }); + + try { + await did.changeOwner({ + id: docIdentifier, + controller: newOwnerIdentifier, + newPrivateKey: PrivateKey.generate(), + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("DID is not registered"); + } + }); + + it("throws error that privateKey is missing", async () => { + const did = new HcsDid({ + identifier: docIdentifier, + client: client, + }); + + try { + await did.changeOwner({ + id: docIdentifier, + controller: newOwnerIdentifier, + newPrivateKey: PrivateKey.generate(), + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("privateKey is missing"); + } + }); + + it("throws error that Client configuration is missing", async () => { + const didPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ + identifier: docIdentifier, + privateKey: didPrivateKey, + }); + + try { + await did.changeOwner({ + id: docIdentifier, + controller: newOwnerIdentifier, + newPrivateKey: PrivateKey.generate(), + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("Client configuration is missing"); + } + }); + + it("throws error that newPrivateKey is missing", async () => { + const didPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ + identifier: docIdentifier, + privateKey: didPrivateKey, + client: client, + }); + + try { + await did.changeOwner({ + id: docIdentifier, + controller: newOwnerIdentifier, + newPrivateKey: null, + }); + } catch (err) { + expect(err).toBeInstanceOf(Error); + expect(err.message).toEqual("newPrivateKey is missing"); + } + }); + + it("changes the owner of the document", async () => { + const didPrivateKey = PrivateKey.generate(); + const newDidPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ + privateKey: didPrivateKey, + client: client, + }); + + await did.register(); + + await did.changeOwner({ + id: did.getIdentifier(), + controller: newOwnerIdentifier, + newPrivateKey: newDidPrivateKey, + }); + + const doc = (await did.resolve()).toJsonTree(); + + expect(doc).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + controller: newOwnerIdentifier, + id: did.getIdentifier(), + verificationMethod: [ + { + controller: newOwnerIdentifier, + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(newDidPrivateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + + let messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); + }); + }); + + describe("Add Update and Revoke Service meta-information", () => { it("throws error if privatekey is missing", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); @@ -460,16 +627,6 @@ describe("HcsDid", () => { }); describe("Add Update and Revoke VerificationMethod meta-information", () => { - let client; - - beforeAll(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(MIRROR_PROVIDER); - client.setOperator(operatorId, operatorKey); - }); - it("throws error if privatekey is missing", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); @@ -670,16 +827,6 @@ describe("HcsDid", () => { }); describe("Add Update and Revoke VerificationMethod Relationship meta-information", () => { - let client; - - beforeAll(async () => { - const operatorId = AccountId.fromString(OPERATOR_ID); - const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); - client.setMirrorNetwork(MIRROR_PROVIDER); - client.setOperator(operatorId, operatorKey); - }); - it("throws error if privatekey is missing", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); @@ -762,6 +909,7 @@ describe("HcsDid", () => { // DIDOwner and VerificationMethod event expect(did.getMessages().length).toEqual(2); }); + it("publish an update VerificationRelationship message and verify DID Document", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); diff --git a/test/unit/hcs-did-transaction.test.ts b/test/unit/hcs-did-transaction.test.ts index df28c65..ce40e11 100644 --- a/test/unit/hcs-did-transaction.test.ts +++ b/test/unit/hcs-did-transaction.test.ts @@ -1,13 +1,12 @@ import { Client, Hbar, PrivateKey, TopicId } from "@hashgraph/sdk"; import { + DidMethodOperation, Hashing, HcsDid, - HcsDidMessage, - DidMethodOperation, HcsDidCreateDidOwnerEvent, - MessageEnvelope, + HcsDidMessage, HcsDidTransaction, - HcsDidTopicListener, + MessageEnvelope, } from "../../dist"; describe("HcsDidTransaction", () => { From dcb546e6235c4058a1e09df4c414bd2ed0b879a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 10 Feb 2022 14:52:55 +0100 Subject: [PATCH 075/133] Fetch receipt after the transaction to make sure message was successfuly sent --- src/identity/hcs/did/hcs-did.ts | 9 ++++----- src/identity/hcs/message-transaction.ts | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index d09f526..979bc73 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -152,9 +152,8 @@ export class HcsDid { .freezeWith(this.client); const signTx = await (await transaction.sign(this.privateKey)).sign(args.newPrivateKey); - await signTx.execute(this.client); - // const txResponse = await signTx.execute(this.client); - // await txResponse.getReceipt(this.client); + const txResponse = await signTx.execute(this.client); + await txResponse.getReceipt(this.client); this.privateKey = args.newPrivateKey; @@ -204,7 +203,7 @@ export class HcsDid { resolve(this.document); }) .onError((err) => { - console.log(err); + // console.error(err); reject(err); }) .execute(this.client); @@ -590,7 +589,7 @@ export class HcsDid { .sign(this.privateKey); }) .onError((err) => { - console.error(err); + // console.error(err); reject(err); }) .onMessageConfirmed((msg) => { diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts index 561aa0e..5ef5ac7 100644 --- a/src/identity/hcs/message-transaction.ts +++ b/src/identity/hcs/message-transaction.ts @@ -167,6 +167,8 @@ export abstract class MessageTransaction { try { const response = await (await this.buildTransactionFunction(tx)).execute(client); + await response.getReceipt(client); + transactionId = response.transactionId; this.executed = true; } catch (e) { From 988150ec7953617b7df8c57ed21de88eed1fb1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 10 Feb 2022 16:30:20 +0100 Subject: [PATCH 076/133] Move some event validation logic to Event classes; Add tests; --- src/identity/hcs/did/event/hcs-did-event.ts | 55 ++++++++- .../owner/hcs-did-create-did-owner-event.ts | 19 +-- .../owner/hcs-did-update-did-owner-event.ts | 8 +- .../service/hcs-did-create-service-event.ts | 13 ++- .../service/hcs-did-revoke-service-event.ts | 13 ++- .../service/hcs-did-update-service-event.ts | 5 +- ...cs-did-create-verification-method-event.ts | 16 ++- ...cs-did-revoke-verification-method-event.ts | 13 ++- ...cs-did-update-verification-method-event.ts | 8 +- ...-create-verification-relationship-event.ts | 26 +++-- ...-revoke-verification-relationship-event.ts | 13 ++- ...-update-verification-relationship-event.ts | 16 +-- src/identity/hcs/did/hcs-did.ts | 105 ++--------------- test/integration/hcs-did.test.ts | 38 ++++-- .../hcs-did-create-did-owner-event.test.ts | 48 ++++++++ .../hcs-did-update-did-owner-event.test.ts | 48 ++++++++ .../hcs-did-create-service-event.test.ts | 48 ++++++++ .../hcs-did-revoke-service-event.test.ts | 24 ++++ .../hcs-did-update-service-event.test.ts | 48 ++++++++ ...d-create-verification-method-event.test.ts | 80 +++++++++++++ ...d-revoke-verification-method-event.test.ts | 24 ++++ ...d-update-verification-method-event.test.ts | 80 +++++++++++++ ...te-verification-relationship-event.test.ts | 108 ++++++++++++++++++ ...ke-verification-relationship-event.test.ts | 36 ++++++ ...te-verification-relationship-event.test.ts | 108 ++++++++++++++++++ 25 files changed, 823 insertions(+), 177 deletions(-) diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index 93e21d1..1f8d882 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -1,7 +1,12 @@ -import { Hashing } from "../../../.."; +import { Hashing } from "../../../../utils/hashing"; +import { HcsDid } from "../hcs-did"; import { HcsDidEventTargetName } from "./hcs-did-event-target-name"; export abstract class HcsDidEvent { + protected SERVICE_ID_POSTFIX_REGEX = /^(service)\-[0-9]{1,}$/; + protected KEY_ID_POSTFIX_REGEX = /^(key)\-[0-9]{1,}$/; + protected OWNER_KEY_POSTFIX_REGEX = /^(did\-root\-key)$/; + public abstract readonly targetName: HcsDidEventTargetName; constructor() {} @@ -19,4 +24,52 @@ export abstract class HcsDidEvent { static fromJSONTree(tree: any): HcsDidEvent { throw new Error("not implemented"); } + + protected isOwnerEventIdValid(eventId: string) { + const [identifier, id] = eventId?.split("#"); + + if (!identifier || !id) { + return false; + } + + HcsDid.parseIdentifier(identifier); + + if (this.OWNER_KEY_POSTFIX_REGEX.test(id) === false) { + return false; + } + + return true; + } + + protected isServiceEventIdValid(eventId: string) { + const [identifier, id] = eventId?.split("#"); + + if (!identifier || !id) { + return false; + } + + HcsDid.parseIdentifier(identifier); + + if (this.SERVICE_ID_POSTFIX_REGEX.test(id) === false) { + return false; + } + + return true; + } + + protected isKeyEventIdValid(eventId: string) { + const [identifier, id] = eventId?.split("#"); + + if (!identifier || !id) { + return false; + } + + HcsDid.parseIdentifier(identifier); + + if (this.KEY_ID_POSTFIX_REGEX.test(id) === false) { + return false; + } + + return true; + } } diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 3fda311..32a3fe4 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -13,12 +13,17 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { protected controller: string; protected publicKey: PublicKey; - /** - * TODO: I guess controller param is not necessary and can be derived from the publicKey, right? - */ constructor(id: string, controller: string, publicKey: PublicKey) { super(); + if (!id || !controller || !publicKey) { + throw new Error("Validation failed. DID Owner args are missing"); + } + + if (!this.isOwnerEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#did-root-key"); + } + this.id = id; this.controller = controller; this.publicKey = publicKey; @@ -60,11 +65,7 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateDidOwnerEvent { - if (!tree.id || !tree.controller || !tree.publicKeyMultibase) { - throw new Error("Tree data is missing one of the attributes: id, controller, publicKeyMultibase"); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidCreateDidOwnerEvent(tree.id, tree.controller, publicKey); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + return new HcsDidCreateDidOwnerEvent(tree?.id, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts index 6922084..5f68545 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts @@ -4,11 +4,7 @@ import { HcsDidCreateDidOwnerEvent } from "./hcs-did-create-did-owner-event"; export class HcsDidUpdateDidOwnerEvent extends HcsDidCreateDidOwnerEvent { static fromJsonTree(tree: any): HcsDidUpdateDidOwnerEvent { - if (!tree.id || !tree.controller || !tree.publicKeyMultibase) { - throw new Error("Tree data is missing one of the attributes: id, controller, publicKeyMultibase"); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidUpdateDidOwnerEvent(tree.id, tree.controller, publicKey); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + return new HcsDidUpdateDidOwnerEvent(tree?.id, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index 5017adc..82820b6 100644 --- a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -12,6 +12,14 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { constructor(id: string, type: ServiceTypes, serviceEndpoint: string) { super(); + if (!id || !type || !serviceEndpoint) { + throw new Error("Validation failed. Services args are missing"); + } + + if (!this.isServiceEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#service-{integer}"); + } + this.id = id; this.type = type; this.serviceEndpoint = serviceEndpoint; @@ -44,9 +52,6 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateServiceEvent { - if (!tree.id || !tree.type || !tree.serviceEndpoint) { - throw new Error("Tree data is missing one of the attributes: id, type, serviceEndpoint"); - } - return new HcsDidCreateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + return new HcsDidCreateServiceEvent(tree?.id, tree?.type, tree?.serviceEndpoint); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts index 6b33499..679a83c 100644 --- a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts @@ -9,6 +9,14 @@ export class HcsDidRevokeServiceEvent extends HcsDidEvent { constructor(id: string) { super(); + if (!id) { + throw new Error("Validation failed. Services args are missing"); + } + + if (!this.isServiceEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#service-{integer}"); + } + this.id = id; } @@ -29,9 +37,6 @@ export class HcsDidRevokeServiceEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeServiceEvent { - if (!tree.id) { - throw new Error("Tree data is missing one of the attributes: id"); - } - return new HcsDidRevokeServiceEvent(tree.id); + return new HcsDidRevokeServiceEvent(tree?.id); } } diff --git a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts index 32aa3db..8348359 100644 --- a/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-update-service-event.ts @@ -2,9 +2,6 @@ import { HcsDidCreateServiceEvent } from "./hcs-did-create-service-event"; export class HcsDidUpdateServiceEvent extends HcsDidCreateServiceEvent { static fromJsonTree(tree: any): HcsDidCreateServiceEvent { - if (!tree.id || !tree.type || !tree.serviceEndpoint) { - throw new Error("Tree data is missing one of the attributes: id, type, serviceEndpoint"); - } - return new HcsDidUpdateServiceEvent(tree.id, tree.type, tree.serviceEndpoint); + return new HcsDidUpdateServiceEvent(tree?.id, tree?.type, tree?.serviceEndpoint); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index 15ccb93..b8872a3 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -15,6 +15,14 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { constructor(id: string, type: VerificationMethodSupportedKeyType, controller: string, publicKey: PublicKey) { super(); + if (!id || !type || !controller || !publicKey) { + throw new Error("Validation failed. Verification Method args are missing"); + } + + if (!this.isKeyEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + } + this.id = id; this.type = type; this.controller = controller; @@ -57,11 +65,7 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { - if (!tree.id || !tree.type || !tree.controller || !tree.publicKeyMultibase) { - throw new Error("Tree data is missing one of the attributes: id, type, controller, publicKeyMultibase"); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidCreateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + return new HcsDidCreateVerificationMethodEvent(tree?.id, tree?.type, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts index 1fecf46..ff5b528 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts @@ -9,6 +9,14 @@ export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { constructor(id: string) { super(); + if (!id) { + throw new Error("Validation failed. Verification Method args are missing"); + } + + if (!this.isKeyEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + } + this.id = id; } @@ -29,9 +37,6 @@ export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeVerificationMethodEvent { - if (!tree.id) { - throw new Error("Tree data is missing one of the attributes: id"); - } - return new HcsDidRevokeVerificationMethodEvent(tree.id); + return new HcsDidRevokeVerificationMethodEvent(tree?.id); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index 4ba686e..3bc2d5f 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -4,11 +4,7 @@ import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verificati export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent { static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { - if (!tree.id || !tree.type || !tree.controller || !tree.publicKeyMultibase) { - throw new Error("Tree data is missing one of the attributes: id, type, controller, publicKeyMultibase"); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); - return new HcsDidUpdateVerificationMethodEvent(tree.id, tree.type, tree.controller, publicKey); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + return new HcsDidUpdateVerificationMethodEvent(tree?.id, tree?.type, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index 20e50cb..7eb3858 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; @@ -22,6 +22,14 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { ) { super(); + if (!id || !relationshipType || !type || !controller || !publicKey) { + throw new Error("Validation failed. Verification Relationship args are missing"); + } + + if (!this.isKeyEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + } + this.id = id; this.type = type; this.relationshipType = relationshipType; @@ -70,18 +78,12 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationRelationshipEvent { - if (!tree.id || !tree.relationshipType || !tree.type || !tree.controller || !tree.publicKeyMultibase) { - throw new Error( - "Tree data is missing one of the attributes: id, relationshipType, type, controller, publicKeyMultibase" - ); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); return new HcsDidCreateVerificationRelationshipEvent( - tree.id, - tree.relationshipType, - tree.type, - tree.controller, + tree?.id, + tree?.relationshipType, + tree?.type, + tree?.controller, publicKey ); } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts index 6f7534b..73d4b83 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts @@ -11,6 +11,14 @@ export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { constructor(id: string, relationshipType: VerificationRelationshipType) { super(); + if (!id || !relationshipType) { + throw new Error("Validation failed. Verification Relationship args are missing"); + } + + if (!this.isKeyEventIdValid(id)) { + throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + } + this.id = id; this.relationshipType = relationshipType; } @@ -37,9 +45,6 @@ export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidRevokeVerificationRelationshipEvent { - if (!tree.id || !tree.relationshipType) { - throw new Error("Tree data is missing one of the attributes: id, relationshipType"); - } - return new HcsDidRevokeVerificationRelationshipEvent(tree.id, tree.relationshipType); + return new HcsDidRevokeVerificationRelationshipEvent(tree?.id, tree?.relationshipType); } } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index 14ebbcd..0d4aeea 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -4,18 +4,12 @@ import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-veri export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent { static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { - if (!tree.id || !tree.relationshipType || !tree.type || !tree.controller || !tree.publicKeyMultibase) { - throw new Error( - "Tree data is missing one of the attributes: id, relationshipType, type, controller, publicKeyMultibase" - ); - } - - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); return new HcsDidUpdateVerificationRelationshipEvent( - tree.id, - tree.relationshipType, - tree.type, - tree.controller, + tree?.id, + tree?.relationshipType, + tree?.type, + tree?.controller, publicKey ); } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 979bc73..0bb5bc9 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -73,13 +73,7 @@ export class HcsDid { */ public async register() { - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } + this.validateClientConfig(); if (this.identifier) { await this.resolve(); @@ -124,13 +118,7 @@ export class HcsDid { throw new Error("DID is not registered"); } - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } + this.validateClientConfig(); if (!args.newPrivateKey) { throw new Error("newPrivateKey is missing"); @@ -173,13 +161,7 @@ export class HcsDid { throw new Error("DID is not registered"); } - if (!this.privateKey) { - throw new Error("privateKey is missing"); - } - - if (!this.client) { - throw new Error("Client configuration is missing"); - } + this.validateClientConfig(); await this.submitTransaction(DidMethodOperation.DELETE, new HcsDidDeleteEvent(), this.privateKey); return this; @@ -222,12 +204,6 @@ export class HcsDid { public async addService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { this.validateClientConfig(); - if (!args || !args.id || !args.type || !args.serviceEndpoint) { - throw new Error("Validation failed. Services args are missing"); - } - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidCreateServiceEvent(args.id, args.type, args.serviceEndpoint); await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); @@ -242,14 +218,9 @@ export class HcsDid { public async updateService(args: { id: string; type: ServiceTypes; serviceEndpoint: string }) { this.validateClientConfig(); - if (!args || !args.id || !args.type || !args.serviceEndpoint) { - throw new Error("Validation failed. Services args are missing"); - } - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidUpdateServiceEvent(args.id, args.type, args.serviceEndpoint); await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); + return this; } @@ -260,14 +231,10 @@ export class HcsDid { */ public async revokeService(args: { id: string }) { this.validateClientConfig(); - if (!args || !args.id) { - throw new Error("Validation failed. Services args are missing"); - } - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } + const event = new HcsDidRevokeServiceEvent(args.id); await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); + return this; } @@ -283,13 +250,6 @@ export class HcsDid { publicKey: PublicKey; }) { this.validateClientConfig(); - if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { - throw new Error("Validation failed. Verification Method args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidCreateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); await this.submitTransaction(DidMethodOperation.CREATE, event, this.privateKey); @@ -309,13 +269,6 @@ export class HcsDid { publicKey: PublicKey; }) { this.validateClientConfig(); - if (!args || !args.id || !args.type || !args.controller || !args.publicKey) { - throw new Error("Validation failed. Verification Method args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidUpdateVerificationMethodEvent(args.id, args.type, args.controller, args.publicKey); await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); @@ -330,13 +283,6 @@ export class HcsDid { */ public async revokeVerificationMethod(args: { id: string }) { this.validateClientConfig(); - if (!args || !args.id) { - throw new Error("Validation failed. Verification Method args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidRevokeVerificationMethodEvent(args.id); await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); @@ -357,13 +303,6 @@ export class HcsDid { publicKey: PublicKey; }) { this.validateClientConfig(); - if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Relationship args are missing"); - } - - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidCreateVerificationRelationshipEvent( args.id, @@ -390,13 +329,7 @@ export class HcsDid { publicKey: PublicKey; }) { this.validateClientConfig(); - if (!args || !args.id || !args.relationshipType || !args.type || !args.controller || !args.publicKey) { - throw new Error("Verification Relationship args are missing"); - } - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidUpdateVerificationRelationshipEvent( args.id, args.relationshipType, @@ -405,6 +338,7 @@ export class HcsDid { args.publicKey ); await this.submitTransaction(DidMethodOperation.UPDATE, event, this.privateKey); + return this; } @@ -415,15 +349,10 @@ export class HcsDid { */ public async revokeVerificationRelationship(args: { id: string; relationshipType: VerificationRelationshipType }) { this.validateClientConfig(); - if (!args || !args.id) { - throw new Error("Verification Relationship args are missing"); - } - if (!this.isEventIdValid(args.id)) { - throw new Error("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); - } const event = new HcsDidRevokeVerificationRelationshipEvent(args.id, args.relationshipType); await this.submitTransaction(DidMethodOperation.REVOKE, event, this.privateKey); + return this; } @@ -496,7 +425,7 @@ export class HcsDid { return ret; } - private static parseIdentifier(identifier: string): [string, TopicId, string] { + public static parseIdentifier(identifier: string): [string, TopicId, string] { const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); if (!topicIdPart) { @@ -535,22 +464,6 @@ export class HcsDid { } } - private isEventIdValid(eventId: string) { - const [identifier, id] = eventId.split("#"); - - if (!identifier || !id) { - return false; - } - - HcsDid.parseIdentifier(identifier); - - if (!/^(key|service)\-[0-9]{1,}$/.test(id)) { - return false; - } - - return true; - } - private validateClientConfig() { if (!this.privateKey) { throw new Error("privateKey is missing"); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 7465b9b..d70d612 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -402,7 +402,7 @@ describe("HcsDid", () => { const did = new HcsDid({ identifier }); try { - await did.addService(undefined); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("privateKey is missing"); @@ -414,7 +414,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey }); try { - await did.addService(undefined); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Client configuration is missing"); @@ -426,7 +426,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey, client }); try { - await did.addService(undefined); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Validation failed. Services args are missing"); @@ -446,7 +446,7 @@ describe("HcsDid", () => { }); } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#{key|service}-{integer}"); + expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); } }); @@ -632,7 +632,7 @@ describe("HcsDid", () => { const did = new HcsDid({ identifier }); try { - await did.addVerificationMethod(undefined); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("privateKey is missing"); @@ -644,7 +644,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey }); try { - await did.addVerificationMethod(undefined); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Client configuration is missing"); @@ -656,7 +656,7 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey, client }); try { - await did.addVerificationMethod(undefined); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Validation failed. Verification Method args are missing"); @@ -832,7 +832,13 @@ describe("HcsDid", () => { const did = new HcsDid({ identifier }); try { - await did.addVerificationMethod(undefined); + await did.addVerificationRelationship({ + id: null, + relationshipType: null, + type: null, + controller: null, + publicKey: null, + }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("privateKey is missing"); @@ -844,7 +850,13 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey }); try { - await did.addVerificationMethod(undefined); + await did.addVerificationRelationship({ + id: null, + relationshipType: null, + type: null, + controller: null, + publicKey: null, + }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Client configuration is missing"); @@ -856,7 +868,13 @@ describe("HcsDid", () => { const did = new HcsDid({ privateKey, client }); try { - await did.addVerificationRelationship(undefined); + await did.addVerificationRelationship({ + id: null, + relationshipType: null, + type: null, + controller: null, + publicKey: null, + }); } catch (err) { expect(err).toBeInstanceOf(Error); expect(err.message).toEqual("Verification Relationship args are missing"); diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts index 9ec6732..5068fd6 100644 --- a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -12,6 +12,54 @@ describe("HcsDidCreateDidOwnerEvent", () => { it("targets DIDOwner", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.DID_OWNER); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidCreateDidOwnerEvent(null, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if publicKey is null", () => { + let error = null; + try { + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidCreateDidOwnerEvent(identifier, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#did-root-key"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts index 44a1b97..49d66da 100644 --- a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -12,6 +12,54 @@ describe("HcsDidUpdateDidOwnerEvent", () => { it("targets DIDOwner", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.DID_OWNER); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidUpdateDidOwnerEvent(null, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if publicKey is null", () => { + let error = null; + try { + new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", identifier, null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. DID Owner args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidUpdateDidOwnerEvent(identifier, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#did-root-key"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/service/hcs-did-create-service-event.test.ts b/test/unit/event/service/hcs-did-create-service-event.test.ts index 7886b55..b6c9111 100644 --- a/test/unit/event/service/hcs-did-create-service-event.test.ts +++ b/test/unit/event/service/hcs-did-create-service-event.test.ts @@ -16,6 +16,54 @@ describe("HcsDidCreateServiceEvent", () => { it("targets Service", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidCreateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidCreateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if serviceEndpoint is null", () => { + let error = null; + try { + new HcsDidCreateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidCreateServiceEvent(identifier, "DIDCommMessaging", "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/service/hcs-did-revoke-service-event.test.ts b/test/unit/event/service/hcs-did-revoke-service-event.test.ts index 54c904d..f4cb007 100644 --- a/test/unit/event/service/hcs-did-revoke-service-event.test.ts +++ b/test/unit/event/service/hcs-did-revoke-service-event.test.ts @@ -12,6 +12,30 @@ describe("HcsDidRevokeServiceEvent", () => { it("targets Service", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidRevokeServiceEvent(null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidRevokeServiceEvent(identifier); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/service/hcs-did-update-service-event.test.ts b/test/unit/event/service/hcs-did-update-service-event.test.ts index dfe36d1..ba5b257 100644 --- a/test/unit/event/service/hcs-did-update-service-event.test.ts +++ b/test/unit/event/service/hcs-did-update-service-event.test.ts @@ -16,6 +16,54 @@ describe("HcsDidUpdateServiceEvent", () => { it("targets Service", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.SERVICE); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidUpdateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidUpdateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if serviceEndpoint is null", () => { + let error = null; + try { + new HcsDidUpdateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidUpdateServiceEvent(identifier, "DIDCommMessaging", "https://vc.test.service.com"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts index 960a173..917a2de 100644 --- a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts @@ -17,6 +17,86 @@ describe("HcsDidCreateVerificationMethodEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidCreateVerificationMethodEvent( + null, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidCreateVerificationMethodEvent(identifier + "#key-1", null, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidCreateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + null, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if publicKey is null", () => { + let error = null; + try { + new HcsDidCreateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + null + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidCreateVerificationMethodEvent( + identifier, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts index a2f17b1..4532254 100644 --- a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts @@ -12,6 +12,30 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidRevokeVerificationMethodEvent(null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidRevokeVerificationMethodEvent(identifier); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts index 529d607..4fd5388 100644 --- a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts @@ -17,6 +17,86 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_METHOD); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationMethodEvent( + null, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationMethodEvent(identifier + "#key-1", null, identifier, privateKey.publicKey); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + null, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error publicKey id is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationMethodEvent( + identifier + "#key-1", + "Ed25519VerificationKey2018", + identifier, + null + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidUpdateVerificationMethodEvent( + identifier, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts index ef99213..3a31216 100644 --- a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts @@ -18,6 +18,114 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + null, + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if relationshipType is null", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-1", + null, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + null, + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + null, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if publicKey is null", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + identifier, + null + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidCreateVerificationRelationshipEvent( + identifier, + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts index 7da5937..d0008ea 100644 --- a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts @@ -12,6 +12,42 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidRevokeVerificationRelationshipEvent(null, "authentication"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if relationshipType is null", () => { + let error = null; + try { + new HcsDidRevokeVerificationRelationshipEvent(identifier + "#key-1", null); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidRevokeVerificationRelationshipEvent(identifier, "authentication"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { diff --git a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts index 85fcf7f..2829700 100644 --- a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts @@ -18,6 +18,114 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { it("targets verificationMethod", () => { expect(event.targetName).toEqual(HcsDidEventTargetName.VERIFICATION_RELATIONSHIP); }); + + it("throws error if id is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + null, + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if relationshipType is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + identifier + "#key-1", + null, + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if type is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + null, + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if controller is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + null, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if publicKey is null", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + identifier + "#key-1", + "authentication", + "Ed25519VerificationKey2018", + identifier, + null + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); + }); + + it("throws error if id is not valid", () => { + let error = null; + try { + new HcsDidUpdateVerificationRelationshipEvent( + identifier, + "authentication", + "Ed25519VerificationKey2018", + identifier, + privateKey.publicKey + ); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); + }); }); describe("#getId", () => { From a10ddf231e18b3636dec4489fb85a42cd0af1e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 10 Feb 2022 16:45:12 +0100 Subject: [PATCH 077/133] Change the way errors are tested. Don't do validation in catch{} block - if error does not happen, block is not called and test considers itself passed --- test/integration/hcs-did.test.ts | 127 ++++++++++++++++++++----------- 1 file changed, 84 insertions(+), 43 deletions(-) diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index d70d612..239c416 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -90,24 +90,28 @@ describe("HcsDid", () => { await did.register(); + let error = null; try { await did.register(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("DID is already registered"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID is already registered"); }); it("throws error if client configuration is missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); + let error = null; try { await did.register(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("creates new DID by registering a topic and submitting first message", async () => { @@ -162,25 +166,28 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); + let error = null; try { await did.resolve(); } catch (err) { - expect(err).toBeInstanceOf(Error); - - expect(err.message).toEqual("DID is not registered"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID is not registered"); }); it("throws error about missing Client parameter", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); + let error = null; try { await did.resolve(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("successfuly resolves just registered DID", async () => { @@ -212,34 +219,40 @@ describe("HcsDid", () => { describe("#delete", () => { it("throws error if DID is not registered", async () => { const did = new HcsDid({ privateKey: PrivateKey.fromString(OPERATOR_KEY), client }); + let error = null; try { await did.delete(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("DID is not registered"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID is not registered"); }); it("throws error if instance has no privateKey assigned", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier, client }); + let error = null; try { await did.delete(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("privateKey is missing"); }); it("throws error if instance has no client assigned", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier, privateKey: PrivateKey.fromString(OPERATOR_KEY) }); + let error = null; try { await did.delete(); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("deletes the DID document", async () => { @@ -288,6 +301,7 @@ describe("HcsDid", () => { const didPrivateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey: didPrivateKey, client: client }); + let error = null; try { await did.changeOwner({ id: docIdentifier, @@ -295,9 +309,10 @@ describe("HcsDid", () => { newPrivateKey: PrivateKey.generate(), }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("DID is not registered"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID is not registered"); }); it("throws error that privateKey is missing", async () => { @@ -306,6 +321,7 @@ describe("HcsDid", () => { client: client, }); + let error = null; try { await did.changeOwner({ id: docIdentifier, @@ -313,9 +329,10 @@ describe("HcsDid", () => { newPrivateKey: PrivateKey.generate(), }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("privateKey is missing"); }); it("throws error that Client configuration is missing", async () => { @@ -325,6 +342,7 @@ describe("HcsDid", () => { privateKey: didPrivateKey, }); + let error = null; try { await did.changeOwner({ id: docIdentifier, @@ -332,9 +350,10 @@ describe("HcsDid", () => { newPrivateKey: PrivateKey.generate(), }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("throws error that newPrivateKey is missing", async () => { @@ -345,6 +364,7 @@ describe("HcsDid", () => { client: client, }); + let error = null; try { await did.changeOwner({ id: docIdentifier, @@ -352,9 +372,10 @@ describe("HcsDid", () => { newPrivateKey: null, }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("newPrivateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("newPrivateKey is missing"); }); it("changes the owner of the document", async () => { @@ -401,42 +422,49 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); + let error = null; try { await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("privateKey is missing"); }); it("throws error if client configuration is missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); + let error = null; try { await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("throws error if Service arguments are missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); + let error = null; try { await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Validation failed. Services args are missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Services args are missing"); }); it("throws error if event id is not valid", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); + let error = null; try { await did.register(); await did.addService({ @@ -445,9 +473,10 @@ describe("HcsDid", () => { serviceEndpoint: "https://example.com/vcs", }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); }); it("publish a new Service message and verify DID Document", async () => { @@ -631,36 +660,42 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); + let error = null; try { await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("privateKey is missing"); }); it("throws error if client configuration is missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); + let error = null; try { await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("throws error if Verification Method arguments are missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); + let error = null; try { await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Validation failed. Verification Method args are missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); it("publish a new VerificationMethod message and verify DID Document", async () => { @@ -831,6 +866,7 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); + let error = null; try { await did.addVerificationRelationship({ id: null, @@ -840,15 +876,17 @@ describe("HcsDid", () => { publicKey: null, }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("privateKey is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("privateKey is missing"); }); it("throws error if client configuration is missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); + let error = null; try { await did.addVerificationRelationship({ id: null, @@ -858,15 +896,17 @@ describe("HcsDid", () => { publicKey: null, }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Client configuration is missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Client configuration is missing"); }); it("throws error if Verification Relationship arguments are missing", async () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); + let error = null; try { await did.addVerificationRelationship({ id: null, @@ -876,9 +916,10 @@ describe("HcsDid", () => { publicKey: null, }); } catch (err) { - expect(err).toBeInstanceOf(Error); - expect(err.message).toEqual("Verification Relationship args are missing"); + error = err; } + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); it("publish a new VerificationRelationship message and verify DID Document", async () => { From 94f5bcac994fcfdee12743ab25c09149c93e1c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 10 Feb 2022 17:07:02 +0100 Subject: [PATCH 078/133] Make all imports target specific files --- .../hcs/did/event/hcs-did-event-parser.ts | 2 +- .../owner/hcs-did-create-did-owner-event.ts | 2 +- .../owner/hcs-did-update-did-owner-event.ts | 2 +- ...cs-did-create-verification-method-event.ts | 2 +- ...cs-did-update-verification-method-event.ts | 2 +- ...-update-verification-relationship-event.ts | 2 +- .../hcs/did/hcs-did-event-message-resolver.ts | 2 +- src/identity/hcs/did/hcs-did.ts | 20 +++++++++---------- 8 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index 45c50cd..d311c0f 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -1,4 +1,4 @@ -import { Hashing } from "../../../.."; +import { Hashing } from "../../../../utils/hashing"; import { DidMethodOperation } from "../../../did-method-operation"; import { HcsDidDeleteEvent } from "./document/hcs-did-delete-event"; import { HcsDidEvent } from "./hcs-did-event"; diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 32a3fe4..3eec216 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; diff --git a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts index 5f68545..28c3eb7 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidCreateDidOwnerEvent } from "./hcs-did-create-did-owner-event"; export class HcsDidUpdateDidOwnerEvent extends HcsDidCreateDidOwnerEvent { diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index b8872a3..3f6beec 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationMethodSupportedKeyType } from "./types"; diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index 3bc2d5f..22ba8ad 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verification-method-event"; export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent { diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index 0d4aeea..897ea63 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@hashgraph/sdk"; -import { Hashing } from "../../../../.."; +import { Hashing } from "../../../../../utils/hashing"; import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-verification-relationship-event"; export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent { diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index fb38995..828931b 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -1,7 +1,7 @@ import { Client, Timestamp, TopicId } from "@hashgraph/sdk"; import Long from "long"; -import { Validator } from "../../.."; import { Sleep } from "../../../utils/sleep"; +import { Validator } from "../../../utils/validator"; import { MessageEnvelope } from "../message-envelope"; import { MessageListener } from "../message-listener"; import { HcsDidMessage } from "./hcs-did-message"; diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 0bb5bc9..cffa8fd 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -8,20 +8,16 @@ import { TopicId, TopicUpdateTransaction, } from "@hashgraph/sdk"; -import { - DidDocument, - DidMethodOperation, - Hashing, - HcsDidCreateDidOwnerEvent, - HcsDidCreateServiceEvent, - HcsDidMessage, - HcsDidTransaction, - HcsDidUpdateDidOwnerEvent, - MessageEnvelope, -} from "../../.."; +import { Hashing } from "../../../utils/hashing"; +import { DidDocument } from "../../did-document"; +import { DidMethodOperation } from "../../did-method-operation"; import { DidSyntax } from "../../did-syntax"; +import { MessageEnvelope } from "../message-envelope"; import { HcsDidDeleteEvent } from "./event/document/hcs-did-delete-event"; import { HcsDidEvent } from "./event/hcs-did-event"; +import { HcsDidCreateDidOwnerEvent } from "./event/owner/hcs-did-create-did-owner-event"; +import { HcsDidUpdateDidOwnerEvent } from "./event/owner/hcs-did-update-did-owner-event"; +import { HcsDidCreateServiceEvent } from "./event/service/hcs-did-create-service-event"; import { HcsDidRevokeServiceEvent } from "./event/service/hcs-did-revoke-service-event"; import { HcsDidUpdateServiceEvent } from "./event/service/hcs-did-update-service-event"; import { ServiceTypes } from "./event/service/types"; @@ -37,6 +33,8 @@ import { VerificationRelationshipType, } from "./event/verification-relationship/types"; import { HcsDidEventMessageResolver } from "./hcs-did-event-message-resolver"; +import { HcsDidMessage } from "./hcs-did-message"; +import { HcsDidTransaction } from "./hcs-did-transaction"; export class HcsDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; From 462a2e2e1ef327602fad8ef9aef44772d298ed1b Mon Sep 17 00:00:00 2001 From: vijay Date: Fri, 11 Feb 2022 19:22:26 +1100 Subject: [PATCH 079/133] updated demo files and added change did owner step (#15) * updated demo files and added change did owner setp * change PRIVATE_KEY_STR to OPERATOR_KEY Co-authored-by: Vijay Shiyani --- demo/1_generate_register_did.js | 14 ++-- demo/2_add_update_revoke_service.js | 54 ++++++++----- ...2_add_update_revoke_verification_method.js | 72 ++++++++++------- ...update_revoke_verification_relationship.js | 78 ++++++++++++------- demo/3_read_did_messages.js | 8 +- demo/4_resolve_did.js | 10 ++- demo/5_change_did_ownership.js | 78 +++++++++++++++++++ demo/5_delete_did_document.js | 24 ------ demo/6_delete_did_document.js | 32 ++++++++ demo/config.js | 8 +- demo/demo.js | 24 ------ .../hcs/did/hcs-did-topic-listener.ts | 6 -- 12 files changed, 262 insertions(+), 146 deletions(-) create mode 100644 demo/5_change_did_ownership.js delete mode 100644 demo/5_delete_did_document.js create mode 100644 demo/6_delete_did_document.js delete mode 100644 demo/demo.js diff --git a/demo/1_generate_register_did.js b/demo/1_generate_register_did.js index 43891eb..0adc8f0 100644 --- a/demo/1_generate_register_did.js +++ b/demo/1_generate_register_did.js @@ -1,24 +1,24 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); async function main() { /** * Client setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); /** - * Build DID intance + * Build DID instance */ - const did = new HcsDid({ privateKey: privateKey, client: client }); + const didPrivateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey: didPrivateKey, client: client }); const registeredDid = await did.register(); - console.log(`PRIVATE KEY: ${privateKey.toString()}`); - console.log(`PUBLIC KEY: ${privateKey.publicKey.toString()}`); console.log("\n"); + console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); + console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); console.log(registeredDid.getIdentifier()); } diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js index f4c97c0..a3bcca4 100644 --- a/demo/2_add_update_revoke_service.js +++ b/demo/2_add_update_revoke_service.js @@ -1,59 +1,75 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); async function main() { /** * Setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); + + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + + /** + * Build DID instance + */ + const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); /** * Add Service */ - let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - did = await did.addService({ - id: did.getIdentifier() + "#service-1", + const serviceIdentifier = "did:hedera:testnet:z6MkubW6fwkWSA97RbKs17MtLgWGHBtShQygUc5SeHueFCaG_0.0.29656231"; + + await registeredDid.addService({ + id: serviceIdentifier + "#service-1", type: "LinkedDomains", serviceEndpoint: "https://example.com/vcs", }); console.log("\n"); console.log("Added"); - let didDoc = await did.resolve(); - let didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + let didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); /** * Update Service * ID must be same as ADD Service Event to update it */ - did = await did.updateService({ - id: did.getIdentifier() + "#service-1", + await registeredDid.updateService({ + id: serviceIdentifier + "#service-1", type: "LinkedDomains", serviceEndpoint: "https://test.com/did", }); console.log("\n"); console.log("Updated"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); /** * Revoke Service */ - did = await did.revokeService({ - id: did.getIdentifier() + "#service-1", + await registeredDid.revokeService({ + id: serviceIdentifier + "#service-1", }); console.log("\n"); console.log("Revoked"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); + + console.log("\n"); + console.log("Registered DID Information"); + console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); + console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); + console.log(registeredDid.getIdentifier()); } main(); diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index 10e54d0..2d89b52 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -1,65 +1,81 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); async function main() { /** * Setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + + /** + * Build DID instance + */ + const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + + const verificationMethodIdentifier = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; + const verificationMethodPublicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + const updatedVerificationMethodPublicKey = HcsDid.stringToPublicKey( + "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" + ); /** * Add Verification Method */ - let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - did = await did.addVerificationMethod({ - id: newVerificationDid, + await registeredDid.addVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, + controller: registeredDid.getIdentifier(), + publicKey: verificationMethodPublicKey, }); console.log("\n"); console.log("Added"); - let didDoc = await did.resolve(); - let didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + let didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); /** * Update Verification Method * ID must be same as ADD Verification Method Event to update it */ - did = await did.updateVerificationMethod({ - id: newVerificationDid, + await registeredDid.updateVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey: updatePublicKey, + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationMethodPublicKey, }); - console.log("\n"); console.log("Updated"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + + console.log(didDoc.toJsonTree()); /** * Revoke Verification Method */ - did = await did.revokeVerificationMethod({ - id: newVerificationDid, + await registeredDid.revokeVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", }); - console.log("\n"); console.log("Revoked"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); + + console.log("\n"); + console.log("Registered DID Information"); + console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); + console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); + console.log(registeredDid.getIdentifier()); } main(); diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index 945e6f9..6565cbd 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -1,69 +1,89 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); async function main() { /** * Setup */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + + /** + * Build DID instance + */ + const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + + const verificationRelationshipIdentifier = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; + const verificationRelationshipPublicKey = HcsDid.stringToPublicKey( + "z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk" + ); + const updatedVerificationRelationshipPublicKey = HcsDid.stringToPublicKey( + "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" + ); + const verificationRelationshipType = "authentication"; /** * Add VerificationRelationship - authentication */ - let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - did = await did.addVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", + await registeredDid.addVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, + controller: registeredDid.getIdentifier(), + publicKey: verificationRelationshipPublicKey, }); console.log("\n"); console.log("Added"); - let didDoc = await did.resolve(); - let didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + let didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); /** * Update VerificationRelationship - authentication * ID & relationshipType must be same as ADD Service Event to update it */ - did = await did.updateVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", + await registeredDid.updateVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey: updatePublicKey, + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationRelationshipPublicKey, }); console.log("\n"); console.log("Updated"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); /** * Revoke Service * ID & relationshipType must be same as ADD Service Event to update it */ - did = await did.revokeVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", + await registeredDid.revokeVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, }); console.log("\n"); console.log("Revoked"); - didDoc = await did.resolve(); - didDocument = didDoc.toJsonTree(); - console.log(JSON.stringify(didDocument)); + didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); + + console.log("\n"); + console.log("Registered DID Information"); + console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); + console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); + console.log(registeredDid.getIdentifier()); } main(); diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index ad76e87..bfd9460 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,6 +1,5 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); -const { TEST_DID_STR } = require("./config"); async function main() { /** @@ -8,10 +7,15 @@ async function main() { */ const client = Client.forTestnet(); + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + /** * Build DID instance */ - const did = new HcsDid({ identifier: TEST_DID_STR }); + const did = new HcsDid({ identifier: existingDIDIdentifier }); /** * Read DID resolver setup diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index 13847cc..14fa757 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -1,6 +1,5 @@ const { Client } = require("@hashgraph/sdk"); -const { HcsDid, HcsDidResolver } = require("../dist"); -const { TEST_DID_STR } = require("./config"); +const { HcsDid } = require("../dist"); async function main() { /** @@ -8,10 +7,15 @@ async function main() { */ const client = Client.forTestnet(); + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + /** * Build DID instance */ - const did = new HcsDid({ identifier: TEST_DID_STR, client: client }); + const did = new HcsDid({ identifier: existingDIDIdentifier, client: client }); /** * Resolve DID diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js new file mode 100644 index 0000000..a5e6732 --- /dev/null +++ b/demo/5_change_did_ownership.js @@ -0,0 +1,78 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); + +async function main() { + /** + * + * Change DID Ownership, works under the following assumption. + * + * Current DID Owner transfers registered DID PrivateKey to New Owner using secure channel. + * New Owner performs change did owner operation with existing registered DID PrivateKey and new owners PrivateKey. + * + */ + + /** + * + * Change DID Ownership performs following tasks + * + * It transfers the ownership of DIDDocument and HCS Topic + * It updates Topic AdminKey and SubmitKey by signing updateTopicTransaction with both existing owner PrivateKey and new owner PrivateKey + * It also submits Update DIDOwner Event to HCS topic with new owner PublicKey. - of course singed by new owner PrivateKey + * Eventually, when DID Document get resolved, Update DIDOwner Event translates to DID Document controller/#did-root-key + */ + + /** + * Setup + */ + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); + + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const existingOwnerDIDPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + + /** + * Build DID instance + */ + const registeredDid = new HcsDid({ + identifier: existingDIDIdentifier, + privateKey: existingOwnerDIDPrivateKey, + client: client, + }); + + /** + * New Owner PrivateKey + */ + const newOwnerDidPrivateKey = PrivateKey.generate(); + const newOwnerIdentifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + + /** + * Change ownership + */ + await registeredDid.changeOwner({ + id: registeredDid.getIdentifier(), + controller: newOwnerIdentifier, + newPrivateKey: newOwnerDidPrivateKey, + }); + + console.log("generating did doc"); + const didDoc = await registeredDid.resolve(); + console.log(didDoc.toJsonTree()); + + console.log("\n"); + console.log("New Owner Information"); + console.log(`DID PRIVATE KEY: ${newOwnerDidPrivateKey.toString()}`); + console.log(`DID PUBLIC KEY: ${newOwnerDidPrivateKey.publicKey.toString()}`); + + console.log("\n"); + console.log("==================================================="); + console.log("DragaonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + console.log("\n"); +} +main(); diff --git a/demo/5_delete_did_document.js b/demo/5_delete_did_document.js deleted file mode 100644 index 0b275bb..0000000 --- a/demo/5_delete_did_document.js +++ /dev/null @@ -1,24 +0,0 @@ -const { PrivateKey, Client } = require("@hashgraph/sdk"); -const { HcsDid } = require("../dist"); -const { OPERATOR_ID, PRIVATE_KEY_STR, TEST_DID_STR } = require("./config"); - -async function main() { - /** - * Client setup - */ - const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); - const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); - - /** - * Build DID instance - */ - const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); - - /** - * Delete DID - */ - did.delete(); -} - -main(); diff --git a/demo/6_delete_did_document.js b/demo/6_delete_did_document.js new file mode 100644 index 0000000..dcd749d --- /dev/null +++ b/demo/6_delete_did_document.js @@ -0,0 +1,32 @@ +const { PrivateKey, Client } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); +const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); + +async function main() { + /** + * Client setup + */ + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const client = Client.forTestnet(); + client.setOperator(OPERATOR_ID, privateKey); + + /** + * CHANGE IT. use values from step 1: registered DID console output + */ + const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + + /** + * Build DID instance + */ + const did = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + + /** + * Delete DID + */ + did.delete(); +} + +main(); diff --git a/demo/config.js b/demo/config.js index 47ae150..be8f249 100644 --- a/demo/config.js +++ b/demo/config.js @@ -8,10 +8,10 @@ module.exports = { /** * Account private key */ - PRIVATE_KEY_STR: "xxx", - MAX_TRANSACTION_FEE: new Hbar(2), + OPERATOR_KEY: "302e...", + /** - * Demo flows 2,3 and 4 use already created DID that should be set as TEST_DID_STR + * Fix Transaction Fee */ - TEST_DID_STR: "xxx", + MAX_TRANSACTION_FEE: new Hbar(2), }; diff --git a/demo/demo.js b/demo/demo.js deleted file mode 100644 index d5b8329..0000000 --- a/demo/demo.js +++ /dev/null @@ -1,24 +0,0 @@ -const { TopicId } = require("@hashgraph/sdk"); -const { HcsDid } = require("../dist"); - -const didTopicId = "0.0.12345"; -const privateKey = HcsDid.generateDidRootKey(); -const network = "testnet"; - -const topicId = TopicId.fromString(didTopicId); -const did = new HcsDid(network, privateKey.publicKey, topicId); - -const didString = did.toString(); - -console.log(`did: ${didString}`); - -// console.log(did); -console.log(`did-document: ${did.generateDidDocument().toJSON()}`); - -const didFromString = HcsDid.fromString(didString); - -// console.log(did); -console.log(`did-document: ${didFromString.generateDidDocument().toJSON()}`); - -console.log("\n"); -console.log("\n"); diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 008e59b..dbbc99a 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -37,12 +37,6 @@ export class HcsDidTopicListener extends MessageListener { return false; } - // const key = HcsDid.parsePublicKeyFromIdentifier(message.getDid()); - // if (!envelope.isSignatureValid(key)) { - // this.reportInvalidMessage(response, "Signature validation failed"); - // return false; - // } - if (!message.isValid(this.topicId)) { this.reportInvalidMessage(response, "Message content validation failed."); return false; From 02fda3412180f3c772c3cda92053a51ae1eb8ef3 Mon Sep 17 00:00:00 2001 From: vijay Date: Fri, 11 Feb 2022 19:23:46 +1100 Subject: [PATCH 080/133] Task/more tests (#17) * added few more unit tests * remove commented test Co-authored-by: Vijay Shiyani --- src/identity/hcs/did/hcs-did.ts | 2 +- test/integration/hcs-did.test.ts | 61 ------------ test/unit/hsc-did.test.ts | 161 +++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+), 62 deletions(-) create mode 100644 test/unit/hsc-did.test.ts diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index cffa8fd..0527383 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -452,7 +452,7 @@ export class HcsDid { const didIdString = didParts.shift(); - if (didIdString.length < 32 || didParts.shift()) { + if (didIdString.length < 48 || didParts.shift()) { throw new Error("DID string is invalid."); } diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 239c416..3908c70 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -22,67 +22,6 @@ describe("HcsDid", () => { client.setOperator(operatorId, operatorKey); }); - describe("#constructor", () => { - it("throws error because of missing identifier and privateKey", () => { - expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); - }); - - it("successfully builds HcsDid with private key only", () => { - const privateKey = PrivateKey.generate(); - const did = new HcsDid({ privateKey }); - - expect(did.getIdentifier()).toEqual(undefined); - expect(did.getPrivateKey()).toEqual(privateKey); - expect(did.getClient()).toEqual(undefined); - expect(did.getTopicId()).toEqual(undefined); - expect(did.getNetwork()).toEqual(undefined); - }); - - it("successfully builds HcsDid with identifier only", () => { - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier }); - - expect(did.getIdentifier()).toEqual(identifier); - expect(did.getPrivateKey()).toEqual(undefined); - expect(did.getClient()).toEqual(undefined); - expect(did.getTopicId().toString()).toEqual("0.0.29613327"); - expect(did.getNetwork()).toEqual("testnet"); - }); - - it("throws error if passed identifier is invalid", () => { - [ - null, - "invalidDid1", - "did:invalid", - "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", - "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", - "did:hedera:testnet_1.5.23462345", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", - "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", - "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", - ].forEach((identifier) => { - expect(() => { - new HcsDid({ identifier }); - }).toThrowError(); - }); - }); - - it("accepts client parameter", () => { - const client = Client.forTestnet(); - const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; - const did = new HcsDid({ identifier, client }); - - expect(did.getIdentifier()).toEqual(identifier); - expect(did.getPrivateKey()).toEqual(undefined); - expect(did.getClient()).toEqual(client); - expect(did.getTopicId().toString()).toEqual("0.0.29613327"); - expect(did.getNetwork()).toEqual("testnet"); - }); - }); - describe("#register", () => { it("throws error if DID is already registered", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); diff --git a/test/unit/hsc-did.test.ts b/test/unit/hsc-did.test.ts new file mode 100644 index 0000000..86e7a3d --- /dev/null +++ b/test/unit/hsc-did.test.ts @@ -0,0 +1,161 @@ +import { Client, PrivateKey } from "@hashgraph/sdk"; +import { HcsDid } from "../../dist"; + +describe("HcsDid", () => { + let client; + + beforeAll(async () => { + client = Client.forTestnet(); + }); + describe("#constructor", () => { + it("throws error because of missing identifier and privateKey", () => { + expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); + }); + + it("successfully builds HcsDid with private key only", () => { + const privateKey = PrivateKey.generate(); + const did = new HcsDid({ privateKey }); + + expect(did.getIdentifier()).toEqual(undefined); + expect(did.getPrivateKey()).toEqual(privateKey); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId()).toEqual(undefined); + expect(did.getNetwork()).toEqual(undefined); + }); + + it("successfully builds HcsDid with identifier only", () => { + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(undefined); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + + it("throws error if passed identifier is invalid", () => { + [ + null, + "invalidDid1", + "did:invalid", + "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:invalidNetwork:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", + "did:hedera:testnet:invalidAddress_0.0.24352_1.5.23462345", + "did:hedera:testnet_1.5.23462345", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknown:parameter=1_missing", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1=1", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:hedera:testnet:fid", + "did:hedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak:unknownPart_0.0.1", + "did:notHedera:testnet:z6Mk8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.1", + ].forEach((identifier) => { + expect(() => { + new HcsDid({ identifier }); + }).toThrowError(); + }); + }); + + it("accepts client parameter", () => { + const client = Client.forTestnet(); + const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + const did = new HcsDid({ identifier, client }); + + expect(did.getIdentifier()).toEqual(identifier); + expect(did.getPrivateKey()).toEqual(undefined); + expect(did.getClient()).toEqual(client); + expect(did.getTopicId().toString()).toEqual("0.0.29613327"); + expect(did.getNetwork()).toEqual("testnet"); + }); + }); + describe("#parseIdentifier", () => { + it("throws error if topicId missing", () => { + let error = null; + try { + HcsDid.parseIdentifier("did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID string is invalid: topic ID is missing"); + }); + + it("throws error if invalid prefix", () => { + let error = null; + try { + HcsDid.parseIdentifier("abcd:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID string is invalid: invalid prefix."); + }); + + it("throws error if invalid method name", () => { + let error = null; + try { + HcsDid.parseIdentifier("did:hashgraph:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID string is invalid: invalid method name: hashgraph"); + }); + + it("throws error if Invalid Hedera network", () => { + let error = null; + try { + HcsDid.parseIdentifier("did:hedera:nonetwork:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID string is invalid. Invalid Hedera network."); + }); + + it("throws error if Invalid id string", () => { + let error = null; + try { + HcsDid.parseIdentifier("did:hedera:testnet:z6Mkabcd_0.0.1"); + } catch (err) { + error = err; + } + + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual("DID string is invalid. DID string is invalid."); + }); + + it("should get array with NetworkName, topicId and didIdString", () => { + const [networkName, topicId, didIdString] = HcsDid.parseIdentifier( + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1" + ); + + expect(networkName).toEqual("testnet"); + expect(topicId.toString()).toEqual("0.0.1"); + expect(didIdString).toEqual("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + }); + }); + + describe("#publicKeyToIdString", () => { + it("should get DID Id String from publicKey", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const result = HcsDid.publicKeyToIdString(privateKey.publicKey); + expect(result).toEqual("z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB"); + }); + }); + + describe("#stringToPublicKey", () => { + it("should get publicKey from DID Id String", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" + ); + const result = HcsDid.stringToPublicKey("z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB"); + expect(result).toEqual(privateKey.publicKey); + }); + }); +}); From 9ad8a2d967f603b0250caffd87a744cd8dcecd7f Mon Sep 17 00:00:00 2001 From: vijay Date: Fri, 11 Feb 2022 22:56:11 +1100 Subject: [PATCH 081/133] Task/update demo files (#19) * updated demo files and added change did owner setp * change PRIVATE_KEY_STR to OPERATOR_KEY * updated documentation readme file (#16) * updated documentation readme file * fix typo * some formating fix and added language highlighting * added few sequence diagram Co-authored-by: Vijay Shiyani Co-authored-by: Vijay Shiyani --- README.md | 428 ++++++++++++------ .../sequence_diagram/did-registration.mmd | 30 ++ .../sequence_diagram/did-registration.png | Bin 0 -> 169386 bytes .../sequence_diagram/did-resolve.mmd | 26 ++ .../sequence_diagram/did-resolve.png | Bin 0 -> 131877 bytes 5 files changed, 337 insertions(+), 147 deletions(-) create mode 100644 documentation/sequence_diagram/did-registration.mmd create mode 100644 documentation/sequence_diagram/did-registration.png create mode 100644 documentation/sequence_diagram/did-resolve.mmd create mode 100644 documentation/sequence_diagram/did-resolve.png diff --git a/README.md b/README.md index 5f07845..46189ff 100644 --- a/README.md +++ b/README.md @@ -6,29 +6,30 @@ This repository contains the Javascript SDK for managing [DID Documents][did-cor ## Overview -Hedera Consensus Service (HCS) allows applications to share common channels to publish and resolve immutable and verifiable messages. These messages are submitted to Topic. SDK creates and uses DID topic on HCS for publishing DID Events Messages to resolve and validate DID Document. +Hedera Consensus Service (HCS) allows applications to share common channels to publish and resolve immutable and verifiable messages. These messages are submitted to Topic. SDK creates and uses **Private DID Topic** on HCS for publishing **DID Events Messages** to resolve and validate **DID Document**. This SDK is designed to simplify : -- Creation and initialization of the DID topic on HCS, -- Generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of DID documents, -- Creation (publishing), update, revoke, deletion, and resolution of DID documents based on DID documents event/log messages recorded on HCS Topic +- Creation and initialization of the DID registration on **HCS Private Topic**, +- Generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of DID documents, +- Create, update, revoke, deletion, and resolution of DID documents based on [DID Document Core Properties][did-core-prop] event/log messages recorded on **HCS Topic** +- Transferring ownership of DID identifier and DID Document to another party. The SDK adheres to W3C standards to produce valid hedera:did and resolve it to DID Document. SDK also provides API to create, update, revoke and delete different DID Events Messages that represent different properties of DID documents. ## Usage -``` +```sh npm install --save @hashgraph/did-sdk-js ``` ## Setup Hedera Portal Account -- Register hedera portal Testnet account https://portal.hedera.com/register -- Login to portal https://portal.hedera.com/?network=testnet -- Obtain accountId & privateKey string value. +- Register hedera portal Testnet account +- Login to portal +- Obtain accountId & privateKey string value. -``` +```json "operator": { "accountId": "0.0.xxxx", "publicKey": "...", @@ -36,193 +37,301 @@ npm install --save @hashgraph/did-sdk-js } ``` -- Following examples use accountId as `OPERATOR_ID` and privateKey string value as `OPERATOR_KEY` to submit DID Event Messages to HCS. +- Following examples use accountId as `OPERATOR_ID` and privateKey string value as `OPERATOR_KEY` to submit DID Event Messages to HCS. -## Examples: +## Examples -Sample demo setp by step javascript example are avalible at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `config.js` +Sample demo step by step javascript example are available at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `config.js` -- OPERATOR_ID=0.0.xxxx -- OPERATOR_KEY=302... +- OPERATOR_ID=0.0.xxxx +- OPERATOR_KEY=302... -### DID Generation & Registration +## DID Generation & Registration -``` -/** - * Client setup - */ +```javascript const OPERATOR_ID=0.0.xxxx; const OPERATOR_KEY=302...; -const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); + +/** +* Client setup +*/ const client = Client.forTestnet(); -client.setOperator(OPERATOR_ID, privateKey); +client.setOperator(OPERATOR_ID, OPERATOR_KEY); /** - * Register & Generate DID - */ -const did = new HcsDid({ privateKey: privateKey, client: client }); +* Build DID instance +*/ +const didPrivateKey = PrivateKey.generate(); +const did = new HcsDid({ privateKey: didPrivateKey, client: client }); const registeredDid = await did.register(); + console.log("\n"); +console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); +console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); console.log(registeredDid.getIdentifier()); ``` -### DID Resolve +## DID Resolve -``` +```javascript /** - * Client setup - */ +* Setup +*/ const client = Client.forTestnet(); /** - * Build DID instance - */ -const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; -const did = new HcsDid({ identifier: TEST_DID_STR, client: client }); +* CHANGE IT. use values from step 1: registered DID console output +*/ +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; /** - * Resolve DID - */ +* Build DID instance +*/ +const did = new HcsDid({ identifier: existingDIDIdentifier, client: client }); + +/** +* Resolve DID +*/ console.log("generating did doc"); const didDoc = await did.resolve(); console.log(didDoc.toJsonTree()); console.log("\n"); console.log("==================================================="); -console.log("DID Event Messages Explorer:"); +console.log("DragonGlass Explorer:"); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); console.log("\n"); ``` -### Create, Update and Revoke [DID Document Core Properties][did-core-prop] +## Change Ownership -#### Service +### Change DID Ownership, works under the following **assumption** -``` +- Current DID owner **transfers** registered DID PrivateKey to new owner using **secure channel**. +- New owner **performs change did owner operation** with existing owner registered DID PrivateKey and new owners PrivateKey. + +### Change DID Ownership performs following tasks + +- It **transfers** the ownership of **DIDDocument** and **HCS Topic**. +- It **updates** Topic **AdminKey** and **SubmitKey** by signing updateTopicTransaction with **both** existing owner PrivateKey and new owner PrivateKey +- It also **submits** Update DIDOwner **Event** to **HCS Topic** with new owner PublicKey. - of course singed by new owner PrivateKey +- Eventually, when **DID Document** get **resolved**, Update DIDOwner **Event** new owner PublicKey translates to DID Document **controller/#did-root-key** + +```javascript +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; /** * Setup */ +const client = Client.forTestnet(); +client.setOperator(OPERATOR_ID, OPERATOR_KEY); + +/** +* CHANGE IT. use values from step 1: registered DID console output +*/ +const existingOwnerDIDPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" +); +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + +/** +* Build DID instance +*/ +const registeredDid = new HcsDid({ + identifier: existingDIDIdentifier, + privateKey: existingOwnerDIDPrivateKey, + client: client, +}); + +/** +* New Owner PrivateKey +*/ +const newOwnerDidPrivateKey = PrivateKey.generate(); +const newOwnerIdentifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; + +/** +* Change ownership +*/ +await registeredDid.changeOwner({ + id: registeredDid.getIdentifier(), + controller: newOwnerIdentifier, + newPrivateKey: newOwnerDidPrivateKey, +}); + +console.log("generating did doc"); +const didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); + +console.log("\n"); +console.log("New Owner Information"); +console.log(`DID PRIVATE KEY: ${newOwnerDidPrivateKey.toString()}`); +console.log(`DID PUBLIC KEY: ${newOwnerDidPrivateKey.publicKey.toString()}`); + +console.log("\n"); +console.log("==================================================="); +console.log("DragonGlass Explorer:"); +console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); +console.log("\n"); +``` + +## Create, Update and Revoke [DID Document Core Properties][did-core-prop] + +## Service + +```javascript const OPERATOR_ID=0.0.xxxx; const PRIVATE_KEY_STR=302...; -const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; -const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +/** +* Setup +*/ const client = Client.forTestnet(); -client.setOperator(OPERATOR_ID, privateKey); +client.setOperator(OPERATOR_ID, OPERATOR_KEY); + +/** +* CHANGE IT. use values from did registration step +*/ +const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" +); +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + +/** +* Build DID instance +*/ +const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); /** * Add Service */ -let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); -did = await did.addService({ - id: did.getIdentifier() + "#service-1", +const serviceIdentifier = "did:hedera:testnet:z6MkubW6fwkWSA97RbKs17MtLgWGHBtShQygUc5SeHueFCaG_0.0.29656231"; + +await registeredDid.addService({ + id: serviceIdentifier + "#service-1", type: "LinkedDomains", serviceEndpoint: "https://example.com/vcs", }); console.log("\n"); console.log("Added"); -let didDoc = await did.resolve(); -let didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +let didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); /** * Update Service * ID must be same as ADD Service Event to update it */ -did = await did.updateService({ - id: did.getIdentifier() + "#service-1", +await registeredDid.updateService({ + id: serviceIdentifier + "#service-1", type: "LinkedDomains", serviceEndpoint: "https://test.com/did", }); console.log("\n"); console.log("Updated"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); /** * Revoke Service */ -did = await did.revokeService({ - id: did.getIdentifier() + "#service-1", +await registeredDid.revokeService({ + id: serviceIdentifier + "#service-1", }); console.log("\n"); console.log("Revoked"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); + +console.log("\n"); +console.log("Registered DID Information"); +console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); +console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); +console.log(registeredDid.getIdentifier()); ``` -#### Verification Method +## Verification Method -``` +```javascript +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; /** * Setup */ -const OPERATOR_ID=0.0.xxxx; -const PRIVATE_KEY_STR=302...; -const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; - -const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); -client.setOperator(OPERATOR_ID, privateKey); +client.setOperator(OPERATOR_ID, OPERATOR_KEY); -const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; -const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); -const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); +/** +* CHANGE IT. use values from step 1: registered DID console output +*/ +const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" +); +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + +/** +* Build DID instance +*/ +const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + +const verificationMethodIdentifier = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; +const verificationMethodPublicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); +const updatedVerificationMethodPublicKey = HcsDid.stringToPublicKey( + "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" +); /** * Add Verification Method */ -let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); -did = await did.addVerificationMethod({ - id: newVerificationDid, +await registeredDid.addVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, + controller: registeredDid.getIdentifier(), + publicKey: verificationMethodPublicKey, }); console.log("\n"); console.log("Added"); -let didDoc = await did.resolve(); -let didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +let didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); /** -* Update Verification Method + * Update Verification Method * ID must be same as ADD Verification Method Event to update it */ -did = await did.updateVerificationMethod({ - id: newVerificationDid, +await registeredDid.updateVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey: updatePublicKey, + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationMethodPublicKey, }); - console.log("\n"); console.log("Updated"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); + +console.log(didDoc.toJsonTree()); /** * Revoke Verification Method */ -did = await did.revokeVerificationMethod({ - id: newVerificationDid, +await registeredDid.revokeVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", }); - console.log("\n"); console.log("Revoked"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); + +console.log("\n"); +console.log("Registered DID Information"); +console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); +console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); +console.log(registeredDid.getIdentifier()); ``` [did-method-spec]: https://github.com/hashgraph/did-method @@ -230,94 +339,119 @@ console.log(JSON.stringify(didDocument)); [demo-location]: https://github.com/Meeco/did-sdk-js/tree/develop/demo [did-core-prop]: https://w3c.github.io/did-core/#core-properties -#### Verification RelationShip - Authentication +## Verification RelationShip - Authentication -``` +```javascript +const OPERATOR_ID=0.0.xxxx; +const PRIVATE_KEY_STR=302...; /** * Setup */ -const OPERATOR_ID=0.0.xxxx; -const PRIVATE_KEY_STR=302...; -const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; - -const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); const client = Client.forTestnet(); -client.setOperator(OPERATOR_ID, privateKey); +client.setOperator(OPERATOR_ID, OPERATOR_KEY); + +/** +* CHANGE IT. use values from step 1: registered DID console output +*/ +const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" +); +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; -const newVerificationDid = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; -const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); -const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); +/** +* Build DID instance +*/ +const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + +const verificationRelationshipIdentifier = + "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; +const verificationRelationshipPublicKey = HcsDid.stringToPublicKey( + "z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk" +); +const updatedVerificationRelationshipPublicKey = HcsDid.stringToPublicKey( + "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" +); +const verificationRelationshipType = "authentication"; /** * Add VerificationRelationship - authentication */ -let did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); -did = await did.addVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", +await registeredDid.addVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey, + controller: registeredDid.getIdentifier(), + publicKey: verificationRelationshipPublicKey, }); console.log("\n"); console.log("Added"); -let didDoc = await did.resolve(); -let didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +let didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); /** -* Update VerificationRelationship - authentication + * Update VerificationRelationship - authentication * ID & relationshipType must be same as ADD Service Event to update it */ -did = await did.updateVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", +await registeredDid.updateVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, type: "Ed25519VerificationKey2018", - controller: did.getIdentifier(), - publicKey: updatePublicKey, + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationRelationshipPublicKey, }); console.log("\n"); console.log("Updated"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); /** -* Revoke Service + * Revoke Service * ID & relationshipType must be same as ADD Service Event to update it */ -did = await did.revokeVerificationRelationship({ - id: newVerificationDid, - relationshipType: "authentication", +await registeredDid.revokeVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, }); console.log("\n"); console.log("Revoked"); -didDoc = await did.resolve(); -didDocument = didDoc.toJsonTree(); -console.log(JSON.stringify(didDocument)); +didDoc = await registeredDid.resolve(); +console.log(didDoc.toJsonTree()); + +console.log("\n"); +console.log("Registered DID Information"); +console.log(`DID PRIVATE KEY: ${didPrivateKey.toString()}`); +console.log(`DID PUBLIC KEY: ${didPrivateKey.publicKey.toString()}`); +console.log(registeredDid.getIdentifier()); ``` -### Delete DID Document +## Delete DID Document -``` -/** -* Setup -*/ +```javascript const OPERATOR_ID=0.0.xxxx; const PRIVATE_KEY_STR=302...; -const TEST_DID_STR = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29637350"; -const privateKey = PrivateKey.fromString(PRIVATE_KEY_STR); +/** +* Client setup +*/ +const privateKey = PrivateKey.fromString(OPERATOR_KEY); const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); +/** +* CHANGE IT. use values from step 1: registered DID console output +*/ +const didPrivateKey = PrivateKey.fromString( + "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" +); +const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + /** * Build DID instance */ -const did = new HcsDid({ identifier: TEST_DID_STR, privateKey: privateKey, client: client }); +const did = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); /** * Delete DID @@ -327,19 +461,19 @@ did.delete(); ## Development -``` +```sh git clone git@github.com:hashgraph/did-sdk-js.git ``` First, you need to install dependencies and build the project -``` +```sh npm install ``` Run build in dev mode (with sourcemap generation and following changes) -``` +```sh npm run build:dev ``` @@ -347,7 +481,7 @@ npm run build:dev Run Unit Tests -``` +```sh npm run test:unit ``` @@ -355,23 +489,23 @@ Run Integration Test Open jest.setup.js file and update the following environment variables with your `testnet` account details -``` +```js process.env.OPERATOR_ID = "0.0.xxxxxx"; process.env.OPERATOR_KEY = "302e02..."; ``` -``` +```sh npm run test:integration ``` ## References -- -- -- -- -- -- +- +- +- +- +- +- ## License Information diff --git a/documentation/sequence_diagram/did-registration.mmd b/documentation/sequence_diagram/did-registration.mmd new file mode 100644 index 0000000..59e6d49 --- /dev/null +++ b/documentation/sequence_diagram/did-registration.mmd @@ -0,0 +1,30 @@ +sequenceDiagram +Title: DID Registration + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hededera Consensus Service + participant HMN as Hedera Mirro Node + + +alt register a DID +App ->> HSDK: Build Client (Set account that will pay for transaction) +App ->> HSDK: Generate DID Private Key (DPK) +App ->> SDK: Register DID with DPK +SDK ->> HSDK: Build Topic Create Transaction
By setting Transaction Fees
AmdinKey, SubmitKey
singed by DPK +SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) +HSDK ->> HCS: Create Private Topic +HCS ->> HMN: Propogate Topic +SDK ->> HSDK: Request Receipt for Transaction +HSDK --> SDK: send reecipt with Topic ID +SDK ->> SDK: Build did identifier with topic id +SDK ->> SDK: create DID owner Event
with identiefier +SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK +SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) +HSDK ->> HCS: Submit message to Topic +HCS ->> HMN: Propogate Message
to Topic +SDK ->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) +end + + diff --git a/documentation/sequence_diagram/did-registration.png b/documentation/sequence_diagram/did-registration.png new file mode 100644 index 0000000000000000000000000000000000000000..9e537fc01b5c70ff1d5cefc1f3367af76d1ff3c0 GIT binary patch literal 169386 zcmeFZbzIYJ|2A%5BBG$6geZ)mq~ZW+6(k)<3nL^1#^{tbkaTqDDCykjQ35I@ARr?K zj8M7;(lO$9a$om#-Ou-XUw=H$-@oe*U(Ch%IrAOI`#8>^Co1wZXPM3(IdX(XQ9)My z$Pp?y_}6m!BzT9tc4i6uIqIY?|L_Q|gJt%}k?ThkWglq1FkDDH5q+t7(7(>5e)yPQ z1>L4!#YML<{)S=6O2~wq?a;8(xX-w4L*S{?D)tuMt_Q0OANDK)28NT2{mHXFJ1pl5 zNd^Y%UcJLwsybTJJwzgrnVIVPk)x;YA31j6<&poqyw7n=RDs@#>Ob%N=fkIwM+km; zNB{drN2us7+{ZlO`@06gPsIM_IY+2IU3``vB%-o#;=kLw|Lyd3_(KN!VCw(=?4`&t z1$w)Le(L|(@55fc3cq+CHR1f8jAnA%j%HQ-&1Ww_PnMg4 zYW`*-PhUNnuK4Ykio=cnp3UE&Cu3-O&jSLx{&Oo_Hv`jkgZf_M+yDOTGxO1Z7Vdwo&_4_J-@Eyr6Zcq z{x947kB|Gu$Nd?L{1cq~ITL?*n16zkKf|>D*o}Xp%D=Y9pOf-WI`HRA{3nb0e@F)) z@Q*lL2R9E77LV_1ZEfWh5GYV%+Ns%}n4U&>d)H`bY3aJSlwD?IL>Ln8?-$>^vK=q{xG>ntk-fh>sAnuY3*zFB_woL5k5 zrDN#+ygqauSB*<_>JY`Za_3bfOKuK1xsG~o4jk-nO2^-GNF~>7j?hpx$Rwiwc~&cu zU7hz=dU8ppl(6wvKmSoypRHf63q{R(NF=iDs&ZlT^Ed-@x-0emG|Df$Aaq4`b$fln zgO+L01mc6by^Z+wg@JA{=b4{`@bm#>R^oymy-K0?=CH`5v*?At;y1Hk&|3{N#Xl0u zhpN}P;Yr>bx|Ds&61kDlsC3l#U^vNl-+i7~VDu2_*bNu?K-GvUs4-{rUW+hr>D9u6 zG4X#KcNnMc4P z*&C0(a_6hlPLX&=qB!x)$E+leR&70GhQHCR;a+V-dzH(4ta{a-(+KQ>pyCl^q+(S% z&A%o#1$rInSWhF;-^}K_aL-byeJb8=5fW&okQxE)lvsU-E&O`c_CP~bvUh)LoK}R6 z(YX5@QowPxlZio%j4E)p}xX4fx02{&Lo>K>HP{g2G(+thRF{CKu^cz~Kevi#XvfQu0R~?ilX1o4Y zo`Qu|oM7Q!nenT~boVi4k^D%R!^3eu`%Hr}{g-=7pH{8cX1X@MQVW#cgu@;_-}?P) z15A}35of?$6m5A$;zc2=^N$C%m)fpcB>a;7-iNTWp^(dyqt26TtFbi)`xF%`OXrY= z`ZA*7eCD!(qr%k8W+WF_%^I8H7O3l35LZLVP$%Sm zbW%g)3f60HZ*x@G?Ary(?|Rxq-iV*u+tbP9nY1uGjmXfCGuK<7=s-31fxoiV`_MDj z;ev{BrT;<^uJ=&UDMlgeYI=iCo_QB5hp}w%Hw(;M=LKC;R*32sf}fZ8eVxT0?hG>Hd`xIvQ%Fj2ng9dKHlbI)w(E)NV7K+>WZA+Uy=CRX0(5vi7_B%HmQrDlR zQrANSR3UQFonY=rlL+=l z2gJ-##TCo;*qb^*F*9qaPjp~sY5#4*?l%EIM$kXj?~eg2fC12>Q!TqQ(TF2>PGo8q zD+ZT(OK91syGtR8uY8CAuM-7Zo17ZL@7S#mix-a7^maX{}{^<)mTQ$+HCi*2NaWB8KkW5l?osa|ci#Vk60ztdb%rUZdOuEC0B5zgsB=|RGKh8)_OCtHFGYIj<} z4DkkqE{4M*zDE>xL2sm~@rkKuxJD;)CA~0cS${hMcG>ypycI5Fqb zE?&d9u8bb+69>ysaZfOoXxbn;G((qj^o(=Ni_Tyh_d}MXymiqh!tgzP*YPg#vDuU63`3O z3MsU@q?8Zq8obG*xVqM@TAd>$wo$!Q>%^f08t+&Xnb5HfGj5Q(Wzi z71!NT#dJ$QWiYJH02<~gx%ZahyT9wnUGi)$sgJ1Jl&FTiR@?cFl$24q3K&_&LanR( zl@oNE>ui&h1g8!Mqn040$gK!yP$u8o6hk$+KcUH3)}!ey#is2a{%r}`-o4D+8Fr9O}sN#*sf_xL5g{7lLGmUgPvUWkayIy8WHL9F44eKH97Q z-g{uneSp4%wZM!C|9R)H`0qLoI9A1i)@J`+*Z(t@eD#Sy?;51%)_G!f4}xO=<7Ena1!#*F@Ny?pY0t!_j)&I^8@tp&i`obkMEgr z0z_BaAN~06`ho;)KBk9y|G9vFPA%~8#Q=tf@YKs?{#{>Spv}xPQBr>eTK`EEbPpqg z7-Np^zv~MIwAt;a$o5yr^A}L_Djx!-y0tI@`8RzLgo8GbU(^3IY5&Iz+}Ec2T?5N` zdZkFg##{R?{<=cabJZL`a?T)fHMUh?{D!o+zKyVH;d zANkeoCaF2hVe*k5r|Jx-gB`Ki5Tfr@guf_vGFwrV825^xY*JYkH*bf~-ZBMm>C-Tm z)9pj6QL^3E)>#xOyuZk^qlbCSWPpr~Hx;eiuX|Qfm1!=vy1uTBxLhQ~a|vO1lr{eG zIMmyYYN{iwrolLCrKi*Xo2&i%GA4--dLm5ldPSE z3+QxR19(HQvLhCi{MDLYPRX4}tx%S?8nW`;F}wNJgL4B9BIW|iY?3Wlt0}7kOgTB_ zil*7!53*y|U0lpv*840PO-31-%L!&9-Jay?mB^Kt^8su*BhmJk!& zERopT7qbgQ;(vR-Et}P*%QQJvl~0|e^R%uv(Bk8pA*Hv>2cB5@HzarPrlN zcrVusmwAmVRTsIsxwLg5T%Bi?U#NxmoxS|KfuSSYo>do3^_wJY^Dw4&dJ6H1e$aYA z<)h;RbQ#jL*8Aub0x9TC7^D7j)d8Q+^~A`??y?iNO=ZkXkD2%F<4<1BwTi_H=QJsa zvo9aJprS+N;^(o(V}en6a%?Wm@!bKWf z_-p#M>(Nw5I=`F3{KpB97kAc`gTkRcL9!kzuV4=_=~>XX9GBA-?~N@4sI$Y>-yP$C zt5Z#P*M~!;XdWw+yoH@H{22lL5|U%2%-=zy$n>dbq4O3KwpOxoUh_Y`O zpv{oQq+dCat{D8&%i{{6A?wu{Bt9Jag<9hOW^4q=BYP>ybI7so&welj=--KJNV-q& zcQRxZ=<8(JCAaTmuEPl$QC}l~lV)+)khv8By(M=P8OeSx`ICy;cZ_b4gRU|4A{VTuMWCjruU^ZGx__Wz@0+r0^|r7WUA%7Iqr z?)v_roBW1$--6k?Fo>^iH+W;nDU9SwBAXKyLZ0dZE~Y(2Vapsu0!3 z-sw(%(Grea*`8+8b$739)2?R!%8QEGkg6@2;BVq_!u3-!*o01b{GmL`Xf^%(d4d0hkf0seLWoOO*!B8Y3v3( zR&?b@f;}=L2p5*@yWh1u*IyKct=n(HNghTtox-DD;W5$C!fhJJPn#nM*KarEE#6TI z>h{gXn-6-eNn_or(uJ+9N^t=o7a|Tb`s~blQf9N{m{tq_kBsb7^{`Rs)Ed|1mPQ%YXEG>B;!f7t{tLr zdMX_UB0etYn*E&+*NF(qAhp1!`H5zSW||^w`N)@+Sf@@_E0K{GVIc2kpt)&fWn~=& z*LIoilbm~RdcH761N9jFN^+xr@Z`CtT^j=yfi-&@c^i{)$%DN*qn03VjBi`Qpf>QU z9o1h!CTaq*13R0UANAyYO0wZxlT5DAWn?6`XecV^GeL>oz#`7T6<@P8c6VcYx~?j8 zY;)AtRD7W@V%U8;4S%p7AY2toKPgW$XoJ`7H1Ei_yH$PbV851PTLN}@car-Q8ruEC z+vMlxTGuZpbOx?k=v%5vZGS|wY}c?lG%Rlzaq(a=X50J5Go+9hddpee z#D!V)SyPxx=yhfK7W{f2Vg&bT<)rv>!`(z@@$CtYgnRDmycXkjtJ97YlrXS}e>~*+s zqn>ttkBokhOS_@2^H|zJfF9L8F8DRm5)S3-jfVOxi69*tFHaBT6-e1lC%RR#zWDiz zrV@w4;lF-;2+|&7<@f&PyVNY!6KVl3m@^(c$9IU43f{KOQ^mFyMjc|m%k-+QBho^}vn z=lyG=SEz=JpRcBb`#oC76!8XjHWhtMl7wcN?MnM>=t-vMQmWmVyUS(fO0r4zmyvt7 zMc5$O$y0s>EH9?yG-Y+c;CVrmDetNhdA2amjc`zZ6G<@4t@`pjunRk_BR2m^ye#VJ`|=+QjS2Dpd; z3M9)_6n71QKy8Dv>S0&X8+`rwHwN{HO~xR)$p>STLrwyyZvi78MO@gdu%71#>9ez< zzWdwpHu!-#VTZ9)|4;zd**vE#IEAx%uRUSZY1Bmc`1r^qT=pz`1I_~vv#6uVV@XX( zy`hfY%&NTcQ#5+b0Q=hWXAD@j(d+fJu_ET$TFIu%nKmYA)Dc7c08sp;MFAbylX+1e zV70G@9ozO64{|A1BJ--w8aq}T#2!tN=(`&pA)!+}E==(UnS*^*uDyMIqR!-rX@OYf zIlp;{oyx&4B^I5f=UK&sT9uuMfrP+L8Q7ANxR@TcwDfzT4szDRE+?$$-f+`iVCLe) zgIFlHlb7d$KQpcv0M7&0Ui=)8+wAVAq*Ub98o3QWSK(hQAH88anrU)5sHcj8)L4Jo zoaEAXW}}H&U|@UN$XK4$B~n?H!+)`6Q+vKANBIraJ2Ya!CG~xtl>GetHIEQ7b5qk( z0YdHm&RvnS+sn;Ht}g2C70XT4%n+Yc3p5c`k+ah?)ENQId2;uzv?9IaIoqmPCXtDy zeTto%tGLzit zPLbZ_SBaAKnU^T*FZixc@m(0!_2_xCzpqE-THS9Zq-<0i(O9kOhlq z=*c{5B9VZyA#u1=M@Y@2z~JAC`RB=>nJev8G=m z+m$UKG}LPh5K^w8C83F(XpPX)VYg8te4u)347C8p?4n@-tJ2b#>2dA)CJZ0$Ms!#t zxp%{k-REc$COu{yU0Mj{u`L99-r)?Sh%oWN;+l(1Qi@EcBRQ-;$G_`%d=+h3pX5m- zp%}J3Ur?DDT7d^8mcfnT&1YP2P3iT7u9@bN&f13FFks%>2FvDuX1eCsa06&Hz=H#~ zkvpQ7>^iu;F&3f<=B$n^_xNDmDDIxFz>Vd#?y&bGTdK)Yy^?ty_r{-gM{ne49N?+> zD+uUTJ*RdTeb24m^(@GP zSqQwCW;0Y#7h5s1mXIi77wWycOmW>D4kH=)qLupb+S@`d2T7j$rXWHLWp(NCu}#k! z9AT2QZ@gST9N4+qAwJ+z*vlVwHgO7fv5b0b_2d3)lOK6HY;JscQ8=$0>EFKsmimDi zdzO{pXj|fau8|{lTZVQ|g=MbFb8lVMAi3D6?x?Uy10!x^{<+RV=4zt-*Q>Z1 z_pfKNNB}D&uY9b{@%uq8A1!QHHpKmkouel}j+1%8(bIb70$uBKK?`|^a&VoYBhTzE zH=iRu({-QZ$E8|%9~u4)AYdq$t`ucKMuRh$6`5Lo*UD_Bi7VtqJ&jwHXlIFeyM6ta zo@eUyaxy=;RB@%CZqt`2W0$<{x)rJ1;cS=W@?h5F#}CB;HC=fcN}TB4@A@SJvyEXl zdCCUq&eg!kO-KZEM7PLd>dY1#lidIUf?&_;k4QH@#i%$VpALA&hdXJwuEPBnNcLN) zT^v>)m70d!Mm3b3t(-e6Cn8IRm}y)*)?%Nk-%|^idQGh&1Q#G2M-XJ~e)K%)D^zPg zW&6kZedE38tQZBBtl_-a%;{6gc0o(E6b3GM&l4Z8HxhsM`yM1Nq=w*%>h_sz=;-Kj zs&GQ&M+CE>ifvnT5CC3#;BP9%Lw&1-BAtf;tax^#-&6pY0B=wS6d*P|8P`R-WH>dm zid3DCm3z0J=19+4pzi_2 zmiVC#M63oRo!RX1tKyN0>rYXZjiF})`y^{LC6*gxhD3XX4Q(q0H9YrXbdo?mM8*dU zg`BAQs9$)0?Ds)Id2sOA%>_+)Jq}6E`;Z{IGA!rCgT19{{i{7+SfzHAc=-5SRvsRE zWaDf=j|t5ZgR4`dp8tzD3P!T6D_GMe*!fwnm zbxLf!Rop$nb`r_H&GqFY+#6r(O{o^kxD~LR4-?#~7*{C+`Aw&a*z9ecPRiOW(Ig*Y zipgzOL#7J%2lKcVpJMasz#0pBtR)M(En07y7;g6U?%5yhl~o z(S1Xprl6SY)J*?79u_1#lZuKcg}{4mc0crpEGsM9qoTDQBB1_FGz%2;km-(Nx3Y$UX( zdtoeVddOpb{d~G?qas)0qA73TUI}l z9hw|$Ti+y6tm0=jnYL5rcX#Fm+yqS4gw@p{gE@qCUiZ7tTVYk3ga$3?!+7W`(-WnIz&1gAitCxKfT~(|`-s=J4ny*zg zB!RyRH1OHB*AXdG?3e!inbj8ZjWceyZSOJhrJS-FK=5fNkSm5+rQy)+>&Ogr>{0`^^cybx>C>mGpHsW5-_ZrvrtIKP4N!A86sVZ<= zs92dD8Uc$)=sE3(e)8icJ^G2=EK`?e=$6FHeWw6Z4STyZ`1m ztX;2@wTy?J_24V@Qa|7eEX*>glxcllOSsgs{Rp$WF+Nl9s8A}Y)o&5r$?znZh0($Sd_ zXJ}F5ae1J>Xm#kTHikCqR|V6c+j65tg-S4Q*2slfnwJb;BOio@!oW;*jasI~0GP2) z<~%j@DDXsQ9<_5M3OVe zVy+;!ccWbc&Z!3=Ld+tm@c3)5J*qQKn5D%tIn2S3mPJg*kDqk5RM0`+A0AIdVJsoR zBib|9vO*)oRO$mpe=!APnDffp?P|9_FnbI$f!sqVJ77FvHXKST^&%^tn~}UA`)C%J zlIhxa_UpZj6>&U~S3N>*%~q~cnm_+2^FVC9C>Xzw=#_;*x646l33 zaOHVbs$ZZ1B$Q7xcf91>F1liXH1S#&JOY&$db>T;yI z+|ERCH;2x*VNyF^ddFulP$iky4^ehG=M`KRD#n{YOmL-qD=)n|Gk3P?2{WRTuH_uO zv1@H38`hTC1n;wL7)= z7ISWqBWWX{Ro7s_%H7JQ1tRFuh@USeW5R|`b0;DM9;Fc=cpI!ma;DVGi9D%|j{=X8 z20@Le>x*-t-A+aM`QI7%^d|bAZSPZxXizyY7j$+vOY*6j&*(U)m|^!zSfnP0QrYY$ z`1&2dZ6R^K&s%`o7>7fvIu(U2yPf6N*CFbqNzc9ZdIGt6Y59Kg71eA{A*#Dn+8c8- zJn~oPGJ4xZM(5?|=C0+%>CcH<1%HrxDM494pm%)R73o_X%8qg_XTm8Y#nP?Wp{~_O zM5`c`w4N&6pirW+B>MHTBaMhoG6p3C0A*{9?FWF%pip|0eoq}ewUk$%+Nj_AvBCUGS<2#Mo5C|O-+xui>FTWrfY&tTi9g}6{5Yk(_{o{_u z>DdDhQc3eQ$^gIwj4cvfJ~3a*_5u*jp6!)1hWNu{l{0@&od5xciTXz6je&^d7*V za0V$V@rJo99y3X};S`s?9tQ%W3iR=n`OGHE=r}3)oTg6<$0fFY4wG~9Y@G?3bwua0 ze8;dZjHOcbGPJ{FNZ!=vJTys@&J;Zepa;!EgBO6ZL2e4my3W z*-LjvA9uO#(mwB271pTIi<*;4KOv8pzxD>E$P0(8^lWH)YNnm(osIMQahkp6Rqc4F zeB$HoINdc-BlOpB-XA2_GQ|4bnj5}9Us((}DXpt?(zx*Vs%Uem+ARwuKHv~7eepX~ z{Jg6G&DuFNR)XmIiECvaVnQ2+7!dihRDqeQmNaw*GF^|1v`)FGWTZH+pCdesiQKMo zb(XU6=(D=i_TUujtX#R}T8vn-Ul zDy=ZBrS*5crCv2_(fM7gYH9YcVDru4O(!BTCE(h;6gf9Sv_j*2CgHBo0>JGm^(pc}I9 zl^arJ+cO=r7JF04`BNOKB4fu7)^eZJLQ7~+E?N_oH_H7H7?F*Qf_1I2v>UAMOk%b! z$E6ufMqop63`v%k$1SftA2k)1FnA$qqRKYuD$hqHP)WMM$33DvQF>hRzatwbT7Hz1M6|g z;DxXhtH)c&G_T=tZZ0Pi+;Uf2iE%vax6x3$YJhdKMy5f4U&jX9TA7X-hDXZ1^^{ zJ=4&_c2~?tG%<58taANo-+zoKFeU-zoY)iNJjQ5|J4e&c2$|{v$ws<@7;}1%f3-@o zR6BMNoAPoH*!QRTc%iV}p)xG51Hp(K7^-V9kUW$aL$)^3-{VGNOuY#taTES}!lmN+&SU0K!b=oEfGbl7Z zqMkGcydD4H^0#uBEn(O#i*v|GL9z4JuU;l+ocW@hbmXvL>xDhDbWtJdcax8991Ey} zI{Z_4{ipK!Pr>~Endfj9s)aaYk_4}+KYmreEBmn)H^M!wt(P35v>VO0LZ^OANXtdo z#iT68mG}IuS3fT!2}>++G8aD0;B5hC1KTD&Y*C>9#D-ODN>7)v>&!)-UxT7? zrKzruV&j`73B*?`x>FE%)dqKAYNUSh1$TyM|yYRd5zNSPQ= zE@j#~PtmsI5HB2Iv%O5sF6?B5j&V)Z7_a{gNz7>7?$z#tHj6p)DeOEw|MEWc^t*$a zufe3tdOjCTgz3HFo?|@3)yh5&?%-ZW8^jLPJL2k^wLVNv=^E=+hz&e=XJ=qjqgcpa zu2eMXpPwdVXO8AeFtTeT?+x5IW8&SmA^0eFKHtPJW*yO++}T%o*UGx0)Dk}C%ceYQ6_F?TJF5hm2u*RK4LayI-(T~y6 z>NydMUVI&a5feFkJp_M)v`RN<5RsdS32krYZ}Wqp=Kg#&RPuu@Q!`&%0(11vh_rgP4naJJVGwdT>b%5 z#z3sg3XorKC45fZz8Ei<`PHM~sY!;E(595U!p8LrXOEQ$tqX5VKkCbHi*Q+(8kIxc zeEr}?+^wVNa<;wthx7e4KdRQoCPxI{cD6`dyt1iWc{z4Mui)tS+TT>XGU7Mjf>eE| zVg>qw^nTi77ZhTFlh8F;pnYWz_}PAU7o!KyAs_Pn76(#eX?8yta`N7FxSr^dglor+ z0_NWtd;42VR0IV;K9hS7iP1VF?p?+`F=s%Ig%xsuFP>M3(msDAE8zZ1z}q{6_%uG$eeob< z>QR2FLDJ;p2fp|84#~|tH(LQW%?g_hBL*uw+3YXqfphgpUG+~c!1pqOa3$W}7CZR| zu}(ui2OQ5q=Wpe~Z(X!C3@pfElZfY!61DhpOI#CIv6;Ce+zfL1Nsg=S3>~_=cHW_? z(>GDc7AM|TX4-v>D{UzoE0%~CuW7=Lz!d1LDqn_LGdNF$n9JQDN2< zUJ>c$sm^?t1nLkcgYDF5jY{ee$Kj>5S(LZG+VjiPRSGo}i1zkwpq37wlzd}qpw^t% z@L7GY^=emx6)X-v!jPNKSD1LWrpcSoUX-Y7>JCnn-1EeettgU7j3DW}du(#D>8fTQ zLw~NyY+Gq4c}TCDtB91BKl_XXB`Rr#VVJgTwT14OX9=; zp%BYkP;$1Hgxl6e7%a`HS=VSu5~jW4P4bEvE=^X=7mMO|UdOf)HEXbW-9mcvi?ll| z*|@HL50X8)sR)b1m5XZRVKu@Y#?iW=q0jPAnRCe=q(GZ2FCDhjO{!tLsoA6-!kxo! z#s-A-)8IWMx%Hbz5tE1I6`_$pn`#LjZbPryepKl#JPmQ?bs$Admjge1Hb1kt!{Lbm z#TUOFOX=JbxIubPFDm*}#hc>{d20_EixRZ~?Y({Yz+~x6&;Y|z8~V*Ue-9EJ zg7)w)v*$sGF^RAzV9*)s@A+`IB;zw_&u%~(VZ|rXX_CYjvgCW!6W<_NesC~ASCrct z*p5*rCuMkSczW1o%?=Ok`jOaVb?}iV?24!<3 z5hjbi?GlKdKIXmghbU6fXOA@jN1JGdWIn3{E&gq5q~(Fovb7rGMkFZy~K6K#jrI4(LplsV8gHDF8?;{>86Y%(h9#S?j=V>?J~ zKlh?j{DW2BI&LCvhQHyT`4LjgtwDBBj+Tl z?p1H{xU$yN`RJJ?dS2GcT70{hLcnRfazWs}HSOsw%D$2E6+&vh?d|PFjA|*_%vC7y z7+onkii#cheydm5Laz*4p~B2{%=~d~@g(tPN$X1Bo+O?Si>PdfaT!a#+~>4yLVWOp zi?(`$-!U;kZB)Sdm~8U>o=%rHOI>yS(0#RE6Dq(f>x-5h3~cGPO~<wJi-i7==y5e}y>`Z!sc7&gK?(>=YQzwcho0MPu(3qT7?S$xK9(ywK@V-~QYY zI0NajQvS!=%?|T@<=@V{za!0W^-SD+f}N=N^fh_rELYDCR?n)tNk>!>cHJM_ft9!^ z&>FRpDZyRPTC#%MxpAilLNaPi4A=0EU$b~S|1s}c?ugt#$9w%rDolTH(bJGhpMt$u zL`H*wk(lA^rI@LK3g3Qi|Dt4mO{q($#vyuAPA`r>M};q;9D?Y5(EF(9vb4h`)n46R z0|y2>2clG!v}TOF{s*n62FHWr#xl2Vg$8Hgt_t<(ndG5vZf{gi_ z7d*83^I$-`!Xn&MJf)Rk*XbaB&#kPTu&25%?2p|**Bw+^C{rZd!q9z)0$?#HqtczR zF?~o=C+~f0Bq`@}Q-cHo^XZ^$%Nl7)yG*z8xbtErYY+8RX9LEiq zCzFagV{u*6uBjHvZ&CFSFZ_4C-656zfw2fOK?1SDP#&b`W!o%`m}{5hF-hh_Cy~_f z=p??3MGgKgVYQIXSbPXcR#6&}N}S2fSp1MT?ONQ)5L9N!bE(=?%Z@=Bk!#(xI~Waq zVY9MO@LtuBYtQsiB@9lDSKs0Y45 zqTDozkH%*HoHWAu0JT$TFg2*QSXtv3RHb)o4Z%>}tUgyR%OG8@CGEL}7?KYpmuK^_ zd5hv0+pIr;yI@*a5OKv!M^`Q6^KHr-Uw>9bz@Im)@Q#Tsdfer4NNe8{7ikVU!{y@G zz9((?TlRU_h7OlH&Ai+J4#69^=A_6Z)IVG|e;_Kqu)X4#AVCn-lW>zYFmPJQUf!M? zc8|R`Dm`thDV5mCpq$<`jo{6S6hOUpnx3ps*`~9O=SIDgKs5+|D9(I^tq9Z-bXac^ z?)8YK0-i`18e6H{)EgsUYE9phrcjgT)KaV^8HSZ_=|PK@w7Rx@I+@Gdcgq*_DkkhK5gEti=%lDS8k(KC3unE

67+E@XrEu^Y+d6t>P-&7F%Q{Y?@GItlrB+fiuOh;{L3J6goZfnU1cljRKWCPD`E+5XBG3KlXvK@q;8E%J&#f)e6`OwWt2|xp zo&KI(CTtK6y($M^0n$Sj0HtUhJ9gpsLvVS|TRI9=1PCVs)o8Ro916dL(vXian6%m1 z|LlXlbMFftDRjdmE#`V|3EK``A(=(-#feS7gXvoNL5>_X0@9W(F$vw|N@RED0FY|V zv=$9HwhdV2VPo-vkJvBf6%Ypv_c3W$2`x>{r-0xIsHjgJ9L5>hcf8?n^yN#u*Pz2g zwV?VI(;hFKs*I9+QBW(_zV9E&)F`40QsY=V8x`R3T9>m>#|<8ruXR@RvS&RXnQFpM_zTY_DP+cs!`u*;i?tCn^j8=O02Y%FtQkvMU{4h;E3?HMd zmt#x>q}%~qZ=2% zkdYVjA(#_~DZ_>IaEpjp(f#Zr3Q^~p9~gapFIm>qN`Ogn8DjK3W_5*;1S-#&lmn;% zUAiLS+r1;l{+$lAR(+St2$Fj{VReF>F%+$mBz4NdoI~#2?Y%=)qssd^AegoGB$vf8 zql^SkN5%i{qs*c{$)k7t5;M3J! zZG!OV+ASph`(Z*6idEK4PSn3GVnVLs+FVayH1Zk*#7Y{GNV71>4JY5=;9x#&%sZCt zL{_(<3whZ$%K=%nkzCR)EbhS%IQw_GUHyO>2ekCOzZlxROpxt%;jdX!7oYj~CP8+l z4;xRzCN+dk2Lvx>oA2-M;G3^`R!9RLwLRe%;ItM4W+B02V`0{>{zr-owz!xu;(Opt zGLN?b^xGSNx@uIl*4ox)16YyxFKf1QiZ9+nfbo-~HB=mi4wccKfRi=se1o-m ze`mfrIT@(C`GJhvvlIMRz^$Wy_BK72N@?|CRh!S=x(>;@q!WN&3*h~k zp>UO%l%kb2Aa{*#O;*6b$^-}yRIb=nn%f}vdijPqJhcp*4D0XHRmauMj2Mn1BYzcY z>hukiD)wq)CWub{=LXt=iaj6jY&Je0ck3@SE*}iPAuk*WrH8&NDd`X!G5`MFoGZcJ zp9YW`u|-XTNy$U(k(E;ldVZD~X$ zI=^ZzcX9JjE1U>;U#{S|kbshT#;3p==#o{cf4-(pc#)HrSHf&t@#V}Vc;f6xO?8yW zp*H+bzU@j-gM~Sd`imQPV8mtAbsGPJ|6s;vGF0s z?B2P_RSsbw*A?SBSZ5L1Ib^0EF4wTh3$O>(IgqLOcO|*%k3!r}n*oqmk>Qj8b@50v z%pFMa0S%DWg%c1^NDHOiDo!X@OS1q5sTkRa_u;&{&ttR_7Tya!4~}Bf8#n#&@qz2- zqo*nklrg0!V#j%@t!E;ap;fo7ch^|ZdRCc zm~l!*p9+cvyqS(Z0BAF0w9FUO*;bSB@#1lE^$i6`Iv%*mW(*{V^}}me%WEZ7hU4(;erjxMJgl6uSlwCr z%xVFea^uy<+1nU%4z(h1AHX0WZ`w$DtXYObMMk|!4(~azy`%sX=fki>PzoKwa?n+0 zwrnkrV|@?yZI!|^_hm&`)6^i5Pz?K}7|~@lf;*>q?cN3g_yPC=pf@>ac*De?uF5c= zNA``z*G8`bF1zsIsC(nwfOx6W@MexQz(aPgGCHmwP`ytY4;utAhCK^+8;7u|BLLD? zqzDt8(!RiQAcjF1>I5Kt*a0?8H5pfJYpafVcWp0Aa=izYq?~H!p~IJr2k=8*j(Bp` z%DGT*Or9UwRE9#{Hd`b@IF{594WIB#vnEzU%*97ZnAq+Z7~$iw!KvN`nhx6Wh zxv_bpnXTKVAyB}kQ?mSD94z5sXC5w1T*a6KP~EfX%M@62jY zP}aC`Xe2Apyo3POtH>g?kZE(M3&(Au9*PfGRHAjFOP>REi&gMDhIsFvuTDLlfBOm8 z?ZYcCFmld-TLeKy7X)1M_{PVOrzRjW>>QQoKJ@{8>?&aXm1#nh0O!}RoFOEW8F_R- zmXMy~4McKvayL^B4mSo{TH$mdCsMugrU}4=VvPb}EoKG}zW@1`rxT(QE_Auh z}PiEIb=bxbiJVl00^kES3c znI5pGq@K_%%M3CLVR#i29Vn^YtPrRWZW*P}74jx6RIGKxhhnpNmrpkD?XxmlC1t_{ zIQFh-Pohu3JG+Q(kY_LhF4qtx`n`OBoB)vr^WbG2{a+m!eB5y7{65YQpI2O6wM7(^ z@wG3g;TK-8cHd^-{P643CyBh=+|r?; zPyWB!V`46A>+c>U-$@d83oSztM;x8#1&(Q!6*lqG74g@c)xCMM{tlP>>8-cmwnc%6 z)8$9S@F)o?FBuS$#y_DFpv1`p8j#lax`>b@=AFa+p8#CJ9gnTxbaf4pIycMMmQ6AWi@n)3$14QEGI)_neL=3`X9f)a^du$UkrSs+I1tG3cR8#>=$}+XrInnT&M0{ zSYx@{txhW{8gfwhJQPI7PSyskfa=#)pgUEY!deILa+V{J0rvyJb04yJ1)qNfIn>O* zY{b1{2m4j?-f`V4nbTVw`G=8giiui7>$H5n>E>6zG$8T3dj3d@%=HHFup8&49tGT| z1FsZ6n-K3GdVKDLSGB%A<_8MXA)Z?seH|E4WK#Oome$#x%JrZzscK2{VYE#HgQqXh{K^iWrD z+o?M6)QU%$0`6b;JDihqVvk(GUri8zKl2DZEH?n32v*dEdTmWN$8T2js`Pr@G35&$hMu5iwfQB&HF4#QmVI)}N#I&u@+KfqtLD8=!}c3v z2<_c5;vZT{}WNaQ1a!7yXQ~CH-eMVju~<>YlC$o%K+NpB24!y$IZ& z6ix>os?>k)^s$sfLuK&o)^F*<&Y$={JDOin?f*8{)YCh? zVJC;-jd}^#z_4_=o==V{aZ$<@>FVZ}SwH zWr`3XNrq6yWNgbk&+{CyDMOi~B6DnWwt1Gh5-Jihj}ehsgDFGgyPn?X^ZT6h`knJS z=dZko{XF-5uXV3=t#w`Ne=oAw!-_&B1XdJIq+8pR$=c+Lxc}plc6@bl{d8tV{nG+b z>8z|E)80NVNPUosU#2P- zMw=XSG0P^@b|=a$Byehi4}w>u%GpqwCqqzlR!H`sF~Aw845vh_ou{}A?5V57Gvd;7 z#Q%dx2>AbnXHmuTgVg~c3yX{Az2Hy$Uko~<**{&hyyL^g`V>Ldx(UINe*e{}fK4__KhMZ`cYpj6#JUMm^%oXO9!d|ncd-}TUh#-kgs7M>p8#Be&XC~M8YDkVj`^W!pDd1%Z&-+r+ z!$HVtXMW!GK`X-o9{Q!0O*SXQ zdxRn-Z34O)+-LzN<*9Rthl&MDc9%Ahj}!M^ODhu5G0N!P&iLO=GlAEHnCmrXXSr+p zfA}yA|JF{%34*^itp;91faJgPA|f)K92;=4NmA9^PhP+vZg7FeDEmQ#l_(pE<19zC zlH0-dO1)JZ{?O|ym{mLWE55bu?d^=-#^&bkz(n)?eKS*fME3CKH6UZVyEiSQxcZd+ z8v227Ss^)X02!mRgB6gFrinUEf}WZKbg&}$P2&-gjr@lA%Wcfuug>?|B*M@ZGHdJy zTCh!1Q<}M1NlVM;o6=%Wn+JtgQMwu(GY!De9 zWkDbSH1DO+7k;-sdA^~fvmg<&@G*XQZTntsz~iUCHMk;09eRES-v3~uXLrPbIAcX4 zaChx2`|JFE&$-d7J&Zl&b#sGemrFy0kaLk{yQWi7DOy@udh7OkU^M>}KF_nw;Fj$T+=`UD}T_2ntgFiIA&BJDyw z_6finx=Tt*)`4y5S98W!_jDvBs{^F29&estzC)7GbvkHUdv^;2n%bLvzqvqs<+n6) zoZM%38B;W}p~DhJalrNQsgLj*Vj0{A4*Bz}bB+YLNJXwJ7@_;bz&0u*rQTprAjiT&>Saz7>XeQ&SY-tEsn?7IsNkzhy& zjOvsp<5^*Auf;S+th5a@K2{;>b6NKeoPh!TX8kSQO}9<=MrmahJg(y0c~D`p1#mI# z==aQVJwP`l+7DDSK{H9J6LV^0B|4dxMe6o6W^4kOIA81@#U25}A3mQB`0*+$KU!%xUgfki@L1E#12^9B$0$-Wsigz!FS4@j{l9tvI^H2v za4&Y(7$>dF;ixks&SW{dno{;@KoU1ikW5fJcmWB}XubQVBxU}yb6G1ihFzmgN*K9c z_q^VpdC*8BSN#68$kl`8JaZXH@1_$Ng}YKBj!d5-5%a$HuTk)H&N9C;CRp(bmhQ|a zt-OM`lDDi_ih;tVJZKC*k?8Tv-%Dxl+&*;6tLSp`4;#w@!su3*>3e%nzQ(q^ZnS2r zPi_XI4jq`0fpE_JxD<3R0TIjJ&#X*Lo8$oAvKj#eF|peLYEO)upT#CAH?n#6h|~jC z);!}(uIZ!80^It%MBW5Zz{X+|&&dS*^2xgj>AF3)N~{m9Qsx|kfl=E+P_n*(7q`wZ z^H>zV+Nq;;fMNWGqAt8XyggJz=w4c0k41E}Jeq-}+o`8`eZhb4%Y$iBCQPlkyDIxn z#QCh3QavjODtdl_ajoomY_YDS*W6o&zPuWZ_H#cHZVK!oLW+b*1$9o+(I3j3(Q_A? z@~&=!CMAN62CNnrnlUHwy>m`POH}vC{_a^YEE^G#JK7#HHvt7lm-bU7Tm03W#v7pb zAf>>&pGzYND4J1Nu$G0`C3%eekVP#bvzT9cdzFoa{nofZSi@6N_u*`f7}Ft<%@w&5EmP9;(De7V1SHWKahzai*r&nmcM= zo!*A7J|m2otDAc$*t}wffDzrL_kLW*I+>&z6?+tE7QbYX%G-=q6Pv*@^8T4Cf9dk} zp>l=lg+-9k0D#lAVcIvH)jj{tx#Q**u@9?o>U|!+T}2f1?z<8uu2!xVDUY9EzVx=> zM%vuqqu9atmqSh!p#C>wt`gn2mcb&m10Lo|7oThbZL4*^ed1A(JUB3TW&E`mkFo3oP7EI+H#lF>f)qf6)2uqsZuO3VN z7&M}9*yO78dZ-C#L_=p+OT$aPi(uPvH6`B#vpU)RGF~X_F>VZF3J(|qUjH0$PcFkD z+M{SrHQqJ2v}-Qd<#u~Q{_~u9vA3u?p?=@vA=SU?8M+@->29XtSL^Cwi?&Lsa+SiQ zx3TIunu*eaKtrrw3oaqZi^WL?9yHm7jqdf&u%Ky^c~>v0dmyrP70)YU%YW%gPhOTD zRJuI}F7NiOnUUhbsMzs_MF8R112A!*PB*=M60^udo5ZmoKG~JvboYDH($p}G8WE|ATIjXg^1mNGAB`B;M}#{0LV0}jB-99EmIr+3Fcuii zcN(GAaOpMxYqqa^m$MjGtLG7e-vr1rZHHE-H<@5`1X5_h{Cua!rLsh0`_AljqR|9g z{Vd8MPPmwYRA3o(YTj8fo7)3vNa^pZQLd|rHuZ3!fz{GK{HoAUA>%f+w=r6I%kstQ zs-PJ=wMw$C{oo&I%i0S!QZKe`=)HU^pXq-TFR9(6Pr@TIYGg~vXT1-qb^sPDQ_!=I0UaDNMr*%Vrw?|kAn7OgB@6dUz)75DX_QVgN_dMz*)&oYR; zyKy(^J+Tp5S!x;GjRlQrCw;1<`ft)g{nVSE4R*=Jx%)?FIq?aCWqfvJHUd?V)FXu^AKPTYt_v@gxm5>GPTV)-d6B`0yGRF5T!KPgGNyWRW9*0c zGX-{!a7UrtY$2cxHQR@LWd`C#k^=Ey}aSt*L~QA*CxTrk1v*j5TBNu9EQ6E)*sdlJl5FMjDt7^59p>E1uRV$IOSyXf2 z?w?S3YtJ}E3a6Gr^mx4h2D+t^5%Mv;o%X>x0izrQG>6#H-u9 zCPPY@x@d;Divwb)Z!^QHiNNP(&eQx1${Ax(m7f<~{i8qRe=L{2wfeJ^?cg5$O~B?!nSFbHISpqNzU0#${&j4P%wh(}z(C9OkwDJ0$%FIz8)pOD3UcQc>oBA-{>ehRHXEkQ~8T8%yu_U#vGUZkM z7zCepx*e$;Nw9Q&gE*A@0FkR}D6awwtMlbnsw{mmvTdrxUPt1+wjIf6&z3lojhlJU62P--y=tecCi z`)BT4ve-l;zMop3LVLN=MGhS3KAKHj+{~2bJ{)1?#3P*zlJIGBK4;b`z4u6xwbN)m z=d64rC8t%0$+=+0KQ&L@JkVoZ?Z`2$;MON*`g(itzms%`gZ>ZK_0N8GYvReV3;xmJu@#my`GW&yur zo_zaGQdv%n4pwN3zC6GoEYIjc&vp_;zNmWNZL0W5h+v4+^=oulL?{I<(iHlW8Eo+v zxm5eeGI&wM2gHwapl6SlNZ~&_(oFN%V z93}XZ^puuv+oVzRyck&ynP>bk%PdLI^}Z{NVq|OrjrUZU+R5H55#CYY82*s!OEw!W zjz5kFZx?-OtE<_AL$FMyh9OGIN@Ssdt!8_0c1y#(ZC%IoZf}an6Lv=U zRxtglY%nh_HO}HEgs@GoR}&A~l%KvnH7{>qM5ctT&dy6QnhFx$44u zxr5>(TX~t@w>!ulY_koLjEC2JSrYyf%=rCH%gL9y^5UL<-s>!>;X zMfjsUtpqf0j?cae*B?%aLAeC0G{&P;uAY3$ z{DAoTW20t*5ES|dra$=lsx@9o?lA+IL_dX)S8p8cb!qB! zhlg{UZussfcRVo#xosYOQW-CSpC@QETpY9#dB@#I`olMt(;cZE5U(lT%;4x@ec!fq zO^9}}mrb<|Kd}E!7V65t_c&Fj_KdrWA=iRQ4;Jr|7*V@&qEPv~PP7_+vs^!8q&ej2 zbWE4&8uYebGBXK*W#Nf^@s7+=VCRy38o0POMWEE5ByuN9HDYc{-OOw1BID0UX@R%F zOVXPYD)(jmS`9lKzEx)#-dp;458WSLcj@Nbwey}INU^y7`&uk_1VVW!&lfdou!4IS z^Nuo0wiRmyZei_M_!~-uX*+Mx{qykYKA; z@+=5qdPS)5epZ2YeN&8_CXtJO74ugL()NzX7#dc=KmKS+VhJ@#xpA?LF<&zlNrLg^ zsude=hG9}NA2Q8&YXXKemp2Zi4J5l8Ob&kzdOK*X@WiY&-Gb9dazbBw%u}OWF7inn z;^tAzo}pD;_FE)`Z3}IE!6#Yn?-w{IR_)InwZ^wwzDkp0RUV`dzJ!yj$|aUS8I6?KB)9MIY9~ccx);qf%9qfAdQ5Me3a-sq~pV46SxE^giWAc26W#0~a9#w}g z@40nRc#*)9GxOnHJd~Z>*7_{s~;>OU5vTB#l?w_Pd zNGi9=a=5j~WAMxdV*U)AN^O(5$}O*e;_5pYL(h@rEqk(6WYD`PhL+N*QNqNpmDt-h zww17zbquxeY^isNUgc!pWoJp0?04%6tyg3@S}(HHc?F*eybvN1EXAUEiA^?GgOj|E z$b(Pz{>#p-t}Ukhbvj!%$AQR^K6&xs-lnK+KU4PQEE+L=ic0)Y z-Y+rb28@JkibvRRJ}rw8pqY@ zK=pvk8Q)FJ*)4XwF|j%1TXyfMv1%zhQB`*0KbLwPqGRa3pI|%d=08qdgJ-+dEjiU$ zAXKC3z{xeQOF$_3#vukx%ZibRZzYkar4O*z{m6#8yxr{(Z^GfWHz8j=Vb6B(tk3G@ z`)n_bi*tOp5LR8<)kRWH?zL_UE#hDdB-)|IVFFZjWfJ$)vu~;RPVQ* z>v+adYtP=+R~EA`LQ-K*6*9zg$>XYABU9?-{;>OGACuYzcUB8RL` zhU#QX9>>oJ$IzvyyWTQ=Ok;Gci@gDj?!l75SR<9$OE)_xWiOXK8c)3Rb`3?GrBIu1 zX<R*S1O%}H@j`l&7V#3eMVcn9l_dJ`g2{5$&TE6Q@J$R)>%>qHm3tS_5wG~ zi{4!P*w-qw_;HDD+W1PJSB}Eh=Y5V(r7ju#{LMAGMb1N3Yjb{)rkFijuJyG1(>}h} z+{5jq!8vMoY)g~Lu*=M(EF-u`S&4RJc&Dp;#ocf zf1aIo70t*JbUiQ@w$$+uEnqaM95F3W3aJ9wgaNB_DK@Q2tAA!Q@CD+2DGEH+xqc{P z*~*gP&}gA5N6=psVTz}a=-FvlT560Zh2HkTHRDGQdOQ3vu=^&xWRgyG8@u;7|F7?I zTM4~nD%LRU|I3^P`*ZAdpX}bdhwxl^LchyAhl`eqiv#%ME|LEr<$8)p zhXxy`uK1Y$kfpI~u3SP=D)N9YLrm$z%`!b~r1p(hIVjJE2ZHo59SdCY41bms`*{vU zM#*gjIh~&IagQ*l5~3Y$2-W;Dzg>=2QJ~ANrbl8d${^kTxGA590m>2&Z`^)JLPS1- zlP}<>W;Z`?gGSP~eU-=cdB-g7uA%wYhz%Eek1S*m@> z&&d?}`tLWJ^uK*tbNs8jz)X%@ULssDebE!J!5!_J zyXql5+VcH8-ZtgQ28QzeN;j2C1mlXR*E8fEm7_b&Tt_6Xj66*k-9k1_b~WvMs=iI> zc6Wo?6PY*5{QO@+O(l@) zJ2bLlf3eim%N^tKy0@p$uJ@tv?s)(|=r+Aw z`b711b>zvz^7%)IEz)8OiiJ#cSkDar+?=J+xcE?Kgi(`Zp1MOK8cy(d#za+ zvYc*zm(xtk8n?_QdO)52>(j8wH9F0KuI}!ws~Q+#*#1)t=Ps00MR=>1**0A5c8zD~ zIO~FjHyc(A;kdWg#*4<*wzK2N8g6}>P(B^lNXgn_D&#+$ufzEY&W+lSJ^S|c`GO_A zRG~D(RUL2a(%SJ>pzO&|UfGct)xNa7o;v|63rsFVXakrZ6aeLbt9@G28hHHF2H;re zM&G-b>*RQlD-|yJe489O`1Q?|gk5YHqsa+S<+x z_70V=HcHHW1|mdqyP#dw)zq!}9r+J--*IbXqKki4Zu3((fMv)56t6LPN?(+Yk0(ZE z)%8A}+Z~1gjjTvv5_SC|_$hwSSHjyQeqSqyA8^ z3|G}|QrBC}9eZ`EWq&apr|dRXk%`W_Iswy(;)ZvcRmoN1jmm>_qO-`rrnneT*sGiG zxqY_>RIV7&iZRd)dnXjbli0a@9dexB$WgP8nAkjPpE7o-d!$l#s}O!s&fUDPZAB_* z)Wd%0ezprz41zX0KDOk%NU7UKXygO53?a5#Ey?(vh@X}ZKHA}(Y3b2@_};b{_)GOZ zwHQ(|?44MGV{RP-9qZn$=jFzt&sT;DKOv)3AQgy_+Js&n2k3rn1_?rkEXRWH`N8z0 zFJOhOpHz+V5wR%4VnhyTzrrCm{R-3b8|hvk`qS)!taMV$eHKmKE9Cy8D|w zT)Ao&r;y1{Pzl*xFXSjNF*a`6F}Gy^rP(-;6spK_#37&Xo*tg@(%C_iLc|LoW`FZP zn|+R&ixT)gZ#KwGZD?AVhaQ^sChC(c24qG5-NGSoHeIz*uCI`TLW&&*-QVOt@CEMv zi8n3y`AazEa3b{8&fMC@_J_wpgrCkU2c1@+>%-I9)!__-Gukyf>$;+o!-)K@;(2ox z0eBikhL2hoc+(WCdQBaSE6CgYV_xS(8{X{|_#jyRZ0b*!=%aWSUZ*)J)T#x!T@^et zGh3jLIoJd&kV#a&#x-R9i`tn#yyL-q^{h8GsCU8c1;W7Sz!FxBe=OXNkIIo(FDiho zJxvN{A_4K%%*j6JQ}9S+wt8>sc#%iH`uEWrbK1$DK7}x=DJ6fKtr)k93q(nZMB-gN8m6l<@i+5oPUM$B1fzc(ps=q+CV zPaV#;@QdM+jV4%nCwX{l7OfkYWCLXB^cyeTuJMA#2c7r=@hn$ckt(LS39IXM&dk80o9U@(=V{zhnNg04=KpEM z@A+%y3#A&nluz25c8^Zvn%yrsuilS~=04*z_WW-`G&uT1vZFIh6>ylPaf>hC4m*}MR*-hp)nJ7$l0(nwW64EpNw<6!c;%fBtf;miD6F$3yUB^9q z^aym-qzv@*>?S5AMq7dcc9VC0R2#pP^ZRb*I#H94%->q<%f8k9RJdVt^R}Nkw2un$ z@i|6(5fBh?YYQc+zq4VpYq2(3KD`5!jwe!eATDlNV;8+4Q)uj(E>-^Czx?yy=BK>| z_Zr4gRqldiEiJ9t#lApe?#hvdYKeodX$o(!K4#56#Rww=iuRcv%OCw%e&q6-Y_dqx z(Pi}-l$$jDfChkyhn7K0Wxw;~1t6qJ_%JXq6$pzmr)$15O-=q5-N#>9D|MgIG(EOy zw8Z`B__*ZEBI~FuAsQ=L6UvKbLs8BYkynX81?MKHetJPs`gKz^GENSf-gA+*cn{s_ zq?njXTc$993bA{UGs@^K0u+!;2FWQXrqAy0?@M^j%3nc7c`YOx`UWqz5}d3BmEhi3 zxj%P6gIf0+%s}%QtJz<|4ryNLm6)(gbYaCT`t*vAjYC=TM@4UMFNj0G_;lt0n+<&6 z5_y#~)W;NHr-j81a)cpMw=!f@%5ar3= zP#XINwfuT0{!aHMSHdmR7I~86GiOdAf3|Ck5D_guEUfC8R~!b2rLau=EYmxADYA z)c=59FH$RagRyj;Tg5TI7ZB>gwUaW##3xQ!A#?bU(PqEEuTM<6R=Oh;1tHV=9*~bm zu}b?CvETg~?+e5Z)?izN2?C?XJ^>iK)ImU8*0hKnEt`;A36wwaJsTP_KCRDxMQTHA zJ9_)n)!zX(wY;y2A)?J+I+Upcn7pe_g5A(Zu<&4V z(D@$30eN*k)@j;fI28_9Wu4OB^oGH;$`gHyXU` zz2VFneuCnl8!!)^15;<<^u0Z6k~1yGe*(Y^(?4B3$s+dNeb5pLCnOZhuFxjpr}-EP z&g0OzY7K}(J@goyl1CZhr3c6pjp0iM)0lM=|As~ruk-*NGtbwaNB941WiuRDIOivq zv^@kIFAT)lZ(Lq4*~9*;7l3by942aEO@+6R0(^-AT}2Z_6w}0iVCI<*73e}ubZSB| zx@0>Yg`NFN(I^8Z2xyBxY5X0G_wr-G{n0YxkMBa#=klJ&*1%mjJXyEmlpT0bJ$>;H zqp4rmz3*7iwjG5~YHjogLc}Yn&tX=hq)~V`ejIftz!+ir9+9QuwR zB0gd6D2cPu{iB_y-nA$RXjZZ$dV=qy$eswy3rY6@4`63>lc$PAVqYd(ClqhwVR#rG?9^1iScP|40pF!|U*@nL{5*gm zkG2rk=Mvm()Wn|-alku&hO!9w4Y_-4E;KrvDX<;>7cL=L&5fAAgECXZjS2pBWA%+a zDLul^zrWHa9eqB$D*KKhM|Bm3pM7H^al=gn&!4!vocmy^2anjzKMXCzY9aB(&ELzp z4BDxbKfFUmtFaNfC4j)5bAwlBu7dSVcoKgv%PNIM%oM*Q*Zu{@Ax`>Qwdbc5n-XcQ4TSRCoz`S$ww&&M|ElUS{)ZQ!0% z4w4ALij`1k(#unGk~NSx%fl`3BJ8@P5sEgLbFt?&`|_!v0`uD&*A3G2ZJ-gZJWOQj zQEa2c@}p*f#`~VupnV+l(d$hH0i|mGoUHtbDx#-kyQmlx8pned<%B1O*Fjikp86YU zFtNc8L>Vb{GIo+5JWu)jD&WdxQcem^TH~LLMaqxyZY|%0qCvd$Ac-x0c$AQ4Iw;6D zHW4fadu^XYwGXsQ8_UIr7zsCDWZcq8{C5ibuX|)>n4Cv|@XFe*jq4}=PLqbjp|_4@ zNObAypt1OLGIS!peiJLCKlJvW>%>a5o0w^d*n^7g%qFfo_$ds-c@VelSOzugq)GpVJ4i7T%H&DxpK)^ zU328iTD;;AR+zXVoz7Ly3KT)`DM=Pp=8`Vw%{M3IB#ZF1tVH_`^K!{@2vrFPQB|HN zSHv2HRjub_Mw#Rjw?4M?@XGyqDRcPN{ldssI4E`8v6Ah7X=9ho1X}SH$-i<6kxQbc z03!X7IJXV=g5D#Foaj2Gf{Ke09$Z#57=`{P+pMz;{MR3Iu$zv)mAT4F|8b!O0)WmD zx?FiryH|`l4yke#EGUXuJ{ByYG}Y;=<84^MipKV)6wi6ovnal}MYxJ?Yw>tq5OKWc zfLx=)_mTHoBTEh{SOcW#%)!w-(XcXZH1&l^mNRZ>ipC#WEr zi=z#@7U7eX6aP6}B4iX#tc|8U14Z}tk$811869sKwQ0^N6fx;09P{S9hx^PVG!=30 zBXz_5g(Y25DK4a{I?)z$Q&aV-wUN1Cl}43wM^A_lx1&n#EE+i_WJuN?OH{Ap;e@P5O_=njNN&3iBQa;sOw}*0fmc9M4H;b|zf>=TLeTkf~ zlk$0&y|>1fn-b65ETj}3=$$kp!C7jR5*pz-r2#EbBOZ^sisnfquUnQ{we=fHH`Hk@ z?lAhSn9HBXn@-_7;eX9>Ao)%&(e?Od2{9FM1~m#Lu^_48X*g^4#b4rhAZXr>RN_l~ zf4INk<3|CJP2TLY#5vSK{!|#*V3nZ)w6|^C0sd9eR??$UCT!1f=~UK!pZTx#t(z~B zn8>s7?*tP`+NaX3@JZeZ=57@2=j{&`zX!aqzbsLRFxSik=p*bc8YQ?WaLSCKl!KZ5 zbU{+YX?xc@Q%v}mH8+gsZV)_+=c30Q5uOym+*BPqfPO6Y_o%F&SKkfN>{3?HwW?lq zY7d|fAS&1}i&Kxd7R}Yxlj*}}QMg=&r6(-~XKfu*Hkzyo?pld_<*2}bQ``UJOXjnq z%|WpX4P73q#gYDj;Jv??17x~*WbPJ3Twk+p2H&~;H(-j9ShVV;g=}} zw<7149Y(kpKd+OM6$`qhs8KwtCrdwCZdtj!Nor0$I%jsKH=!HGKbH9M%~j^hH95ll;XC;0 zs+D+=vvXt_*QTxoa@%T5(n}L4sR}9Sv;3<_2N z=i*qWdk6np=x)^Ik2x>{d9at=ljuG71xZcMks`H_DkPsoaI0t}JI2L*zU4wRSFn_1 zFnMc6sNv%)tm*Fy>U|r`aA{_*@(wg)@Tx`OG!*ku=|O`QFqvv~ib)>;~5F-=78bc`t~ z;~&ya^9A8?rk=cRYJ5$LGX--|MYF~_t1OJzh;($SG{7=_*Rcs>(v)^2Nv>Yxgxgj=?dm-XB5P?%FQF0|Fwb5+k!?0-(VY6KruQp6~>ZFGus(;rp5sFtmfi8lJRwN>dA2wVrNDovAk^EH_*vOvFY#Y z=9|A{0V7&p%FU$|{c=r>gA3hlcuXl}xO0|>1%Z}_wyfpD7$_yWucB*e1lmZF$Ao!o&QJ2?ECAQ4^#`Z13h7^gT|tc zIX6<%h$==vvJ?LcNQT!{zoc5It%lUV7Z~&ICv_C>zWKFFzw?oQ zR>5BwC>#O4E*6<2&=)wb5ezoqC3*&KWPm$VgW1&1$7D2KC_diBXynqyGl^Zt%KZ=iWK%=vhB_%;EvVnL5eytYcmQ z1q5lzu7Nme5=0tG%tdd1Rqg)I^@G-hdN=E|x|LMhrn>^vj2)+3(KB!3o=(2_an#^a3tX4qfRU_26{s$nj;|x*I`Cp_ z|6G5+mGl=iJ)L?ii8oTZbNHk0H=d}jz4dT@F$JRlL z-xm~F{^!cZ>40_cG?dRZ*mHanU-o9I`ew%SsA>u;cLK5h&(v98^3v{20%OPdP!+T&EVi5i;67hX{>{>Z(bGsTi_Z; zAfa&7lRtt(NJs|1Aj*zFOToFE%Q2ls2peS;z7p>&!depChBczr97uwFKU9LjD2T1?h zCl#yWJBWKZI%R)wf-Zl_u30vw?jG2fx-iz%Wy>*Tyo6v==!)YzyXPx%Le+B%_VuHY z>@s~yNO3IA86MQma}9-_?;y&!AkSwWY#UCmjm|=b_iaRhlxJWkFA; zsx$_0YY;b|zu%T{+qAi;2UK64mz`R2>`OJUI~&1JzuFquC#sFyly+FKyEI0xazpZA zG&q3fm4X+8(C?AB{lt3QkQ$E3%fZDz<~DE#7~M0?U)l>~MDB)krJ2ybfeccEPJ};! zNkCs#3waDX%rmc8L39jF1JS1=^bElYifPUuzQpL#YrsAEtCL5am_=n&AlOF@zoLI{ z1+Q^Qa?hlhz9<6zP93$z(@1sre60x4q(^E=SzBYm5u>@TSs+kD_hF~-!!ttkRTZ0w zXO~Q`z8-F_oNTXwQmwK3->t>LAMig7kEDuJuI%&%#jW+=fgWp9j$!8%6F1e<#b3Rj z#C)h5{RS4TY|;O=uvu+es89`(I7qdLR*?`R({2c@!#R(5gT^@5wqvCHp>k$~LCas$ zMM)LOQ8I??EQ&EdxC^5li~kzCHewO+h($2N+azeKjfHE&16))VH*-~A7TYg}4^0_* z>o*M59l@7&ZLh`A28L(^r9=ulfP0-l%6TO4)hZ{}gA7@RTvFR2rueFYuFB(4v6UjE zSt}H2ct~6Z?~Fu{|1A7%?68`|G!M}wP58XW6itkWNd4TOUdJ4=DyW3PVs++PsWl0i z8#$O8e0YAIA#|s#{_mZrgIv`o|HsnE^}G4KN2PB;p|tw2e&UPCormSh@bdDEy+UuPHW3AE`l0rfCL(g+xYAgb^YVG!QEdl$n}4f;bV=Z$Rw3o9LZu_MLV zcDG83iV$g*$+>rrfG*f$(%|8aP#OW!YP=A-`{?1rGQghd1NS#sD$%|@%WM6fP#N)< za+>b{0`sY=5oIahIbMb<&Nb#u&hb=}_cYtSAGlugY$>T@BVs7YxFBr5!9ksdk3gVm z{?QiT)GG6`qj?ExFFi41CUq|QV+;1{K~TeE^%pWDA4U$FNmu@(YsltDg)$H3LoBp^ z^c#O|oV#z*uZyx6zqtCmLLzT$7=(5l!7$^#TRDbhL0+*RoWIPK`NyK5RCKQ{^7JD{ zp&Aj}jz;t`T#hb4?tao z^1kwY$6z=P#6WvG-WyeFiM%6s+|A`_JVWb1-YVZ0T-qdzQ+3G>`jti?b$CTkup9il z2%^#S4WJzH+Hx`;ny`U9l~0J8*kW%WQeVFUBQo7U&8x=HGH3*;ZIobqzfb*@G`g~w zYP${(h4~@!0On)7X*t}~fEk^MFrU}30SYu_c7?0@7p6SEB~F_tVdA6zw%z;Ky9Wa zh@G@e2#*J;(tLxeL-o{@S-O;Wfjg8lJl-6`shB{3Nr|78FE=0l=E69D9F0gv)A#1J zDNOC3qu*Ef2&=vT6zsK|psr|%D8FflNWo=!VwW@~+Y2-MvbCBdw=y2zd`=d6=kZ zzii)ue=~W_Zej;PoJLo?GlYPoc??E5pS=Q|5z~jB&j=~eA-vld08Fk>Z$fdcS@Hy{ zM2~sjBr{3TCTNMlKuPw+jI+ya0YJp82orQd$fT1H1(_y)PJBC`qrn9Sb71~|ERZkz z`OUwB#)9XghnMQrAs~5OStju;gLmg71jXZV^Kq^A_%Bb%LQ4yvhWU{wkzg9!COs3= zmF11>O7gxp&CLJ=TgNr$4o+wEk0;~=|)P>dVk zXp8ZRMYp72M3wu0fZ@yy-i5KDcqF?0j;+CX9+@yisX*g5-t9PvH-S(?cAW{_it+A` zlYS1wOX=|tFx_CzU_NN1gwt2~R+Y^-X3m;&tzu}vav(K%{I1Sm17xhU?8Fm9({YBNS$wN@no33+-D8(VM) zQm`E9&na4gsd8)bZ7}!jt4rFfKc{$juXOr8uwdVXBqJhA436)#6|v-;b0C)H>#Tt2 zqk(FTWR&7VN`B#1sthJv)=wh(RA4 zBaVa<-xT_Jt`St)YlN6U)S#o$=5yBx@s{Xw*IvZk=_j=iZJj3R`kLKEJ> z7sE3{38A2{WJN*6Xr+KctLonc3uZr+n?+j8FJ?th*fN_U`Fs7jIr~Yg6a8E@(3OvC zW%KD*@VKGldOGlD8%wU**E)HcjPnY4se-n*H>v83JU_%4D215m*h*58@KMV1GCSd) z=eo|X+7w;kMVpyLP}J6jU)#2G?E~F+#yO=-y3Z=Q@+U5^&oXK`$B2)5);aGnPjl%8 zAIfQeVTP5sT0IPy%|BQ|X^XBg+_QSIv5S#^Ta%U`DE4NPlzZ{AZ1DD0O$J7wxyxDS z7^O5ShUbftl|5MICc(3~^M%Nd_J-IER0c{~RSJ(+s}l6nB)ptO-4@l_@UVp6X(fKP zGN4fW7jY=OOXuR$$-AMQX;m|(P0edqTSb3l7JgIQvmJGN`7(_dUb_}2!xBZEO3?;h zfAj)kWQry6E9arL7yq79<1Nn-RJ4(3orP!TOGuvu<>|IjCKqSkD^}Ho@Zzp(KZ)4z zdbzzmF_b?`D2~QIh2L`*M82l(I9+EsxpTvFel|RsP+{l3&80#Tg~XodIs*ZsRix`A zXn5$=N*R11ts*SCcp5_L!LnLhdyO~N*ueL3jDv&f@VQdxAwBQy>=ltruWxkkQ$}i& z12jgRl;;s^GY$hx+CIwO)Dum(Hc>1c*>|KVx(gqEKnQEex-TxG;{`pdD|2A zhY$IIf4|@tN@*2t!XclQuko~bl8ye_yEJ?@I6QMGsAAE0)k-VANb_Q&4oFch>45x=0JK&uL9g8-m(N5c@QLsAnFlTX8&; z{8L%&0@0RDa>xckIX23hzkMI8nmqJjunZyq~_2&gy5zgbL1~7I=5l%er5ctc?cWY_^s$hpbKv zie5&Z+d{FAC@)X-vp>@4rChz`nQFv_VzRZ+a2x3{q6 zBIUL&h4(<$+*5y6C-)pbDvZuDSa|qztGGh0;Q@)5XXptkDytJ1h2XPhDkdi`&>WoI zi5QbS^I$BM;$nDp-kP@-0g(!^Riv!vy`R@#*Uko+oiB^nM;1sNkG3pv$TO8d&ijCp zC5Ob-`c*66!&ZDZ&!&rf7MEvo-wxYj7@KGhUI( zBC4?6Z4~m8VXw{;5>()d1w+w|FaTu-}^D*iY{;oBw)P;%Klg) z*;vOAM1@jR^dUkQimFDxd6yY01)Uz00Xq2c#O}rWz8d z1@QA3Jv|N`&O_t_|oT~YzRjCd=Pf3RC%c}#IXI0pU2 z*DcU{ z)fs*ErtCgWlVXF71G4+}oYp8BZnvMaZ4z$d7yWE>`@uk{&C3b<4SqJM6|8z?|4Mlxh2{PZ6fX5O*BXgiP8*$|7Lo1FzZ)(hOa^C$0|E;Guq4U zJ0zBlFf>%ZZsPH2naRw>f8Hyqur=b)pXP->yYyYX(&SQ$G^`>09-tKSZ0E}yu7HWXcY^?xZXf> z_1C+RfL*GF_!wI4PWv@XJa>FyZ|CS}*p_JS%jR#OJ8Hem$RwR`bCE287?>hF1WL1bmRyl+a zT2>N52vIW1PJ<$?-{bNgzt`vcz5Q;#&wpO8%6UGY=Xze(<8fb)6(!HF@HDpm1??@X zHlXj|lhEyb{=62ZdUpTYLaV@v}`@{rK9=Q}{ zw2AZjW7&%MncYuMj!A*W+t?(*F!SD)dFIzTlb`G5dMksPV-tavuF(Uu0GO1wxXLQI zJ&#t%`_&%#eOjOMPAVt}uh@Q?dW7PcfdKRb1c3bg4`ejEqRfs3zB>pM8ghs-g7Rw# z@`{E0x`i8E-vyrU8qs@&H{QgcE4T+&P(W?9DTUlQJ@JP*e_BU@OyS;N$;L(@fBWRL zTy0nwzdTM=K|lNFHB8|q?K+H@0hvEN^lC3Z_Q>3=2lk`%s%ynr1ejS{yAB;XN@BeM|dAwuvVRCP;?a=($ShJe%8U!H4BuLJ71&<(P zq3gMv@^IxWMh!j{aQ? zZd*ZW!mg650*UPd$IOGv?!ymDLQjrdk1W=!@&B_g=(egf)yk#^EaJ+$`wOf+8C|o- zrGI~Q2s01pusmsLbGDMDZ&QPF2lp&PcZwRdQn0)L`U3m1%y0A}{^gC2q=s$j&sJ@# zTF?MY77Bb{Gk_|G9pKYFBi5+J0CpQSqj8D%U zt_uv394nMgK_2C#f587anUx@L_xqQ?9sbq-fB#BUN6d_qYzKH3g9&q?4PE5>(y5s=eo4eo^XBBh8<~r=`l1R1Ny0c01?@Avw zU`>Es=s9{ZE}H-ek4|a%J2Q5f$e&X1Uw_I6?t2CF`ZAi&{&%Q%$EQzZ@01%a*-T(M z?lJf+aR;RC)MT_XSifqrWg5$Z>%dfiv#kw2&YAGJAwbH45xzK2;T&1!Y*S#`3~ioT=w5dvdJt4=)#M=IJ= z=TeotVXSElnf&)}CDT|WyvN@G_k(nIeX_%Ypz2Scj7Py`FzujIFhw;0NGQ8AN#cjj zkjo)jIp^B7Yl~k!Kly(`DttinMnMs=@~YCh>Sx6(qVeg60ZW!Vg(g9`WBb+BC!bcr zA!Gb~bn6;m)8ln6y>B!`3sbrZjfXEwx)0%7yhh5Pa416(Kjn(09%D@mg;Enr%#`L2SnFe)ggqnyoW`7by|o1?`eQrnGPOO zNHtTJy^4~ukz6qN(mfmH&We5_A945e3y5z!54adh0n)LvJQP#E_)wK14KPS$+SG!u z<=fKC991bwW`$aBcT&i~34rvr-{C_iP$*0*qZ;-;#in`jpNPkMyi#=vkvl+ZYnoCW z9@(7MQLTm1tVqUOeCam-11WS2ntW3VQUH&p1Yhu zxS8LQoDQqiKY;vI1_|&jO!TXNT2=mv#S1ed zvAiGVR!z;|`7Pr-$bh&Smci{0xo_hz_tgc^pn@1#NNcLr{M7`$s(cx!=ekSJ;aJ&B?Hh#hGmsAGMPWH!-OF*$LtIAMd}La_!Gw>Y|(? zjX@}&2S~q3rbk;K?#v;Vxe5+DbJL+BaAxeLGf2;TRjlf%xBC53vS%(&~+`)V; zFw4heT|a4M`?QVx4aN~M*i}9HKJguZUf_}6dXH2bYg{VJQ>*v_EPKn3s)t{DSO{zf zHYBJk!#CG<#$Kp!3Y_lHG|;X`{XIgS%foBBK->75q#I+u$2}P8*rrcPPj`JZP6G7v z2@|Oil=YJ!JQX^g60m(<%ss>W<&eDqDjVZZ9FP2AfrE}xuO=(1`+T)tjn)S1_D)aP z_~EOG%z=Z~ya16Yc(o%hisj2a0&c%%H6oS&d|xf6xk?+B#?k>pegECX2Mr#>UBJ|+ zg+saXu`JKWFK-oQ1`L-j63%1Hnl@4Re>(AncIzBGV!zu8&vh~ZM;=2lY(xxOLaH($ znpr9GG!P8c-|2jKi3mwZW?TOWi&Ze4G|C|0+x1jQ?>rk3Bc=V&5T)u1MCL0uogIH~ zsJx*9g}mTKYak^~75E)NUTg^&XcrcaX_~XAA6^3GbdwUL^Yw!s+9jp-fv--kxlL1S zB3n)r?KFq>@OAa+m{7y9>?CTl;srFTg6}gUk!lg+i8Zf&yzR-uxq%&-ZlBS_yFBg_ zy2g%UaF6;)mmaMcKT=3qdjW2M4^GjF3&20gwbGdjPQL;yb)g{BF*Wk%_rMkL`NatE z1-68HCd<^`R13T#z*-SEnc#-i~2+ikLnL zWskO&IKE92!=*A!q(#>@AY2CZsN=?zN`xmzRwq{+zJreU5gDW7G8^a3BQ{dV>Vie;x z`FJX*=&&U0i$9Q$skX_mg8M)}*qQIk_eF6mL)xIl>OFr#;i~Dw7o5*9YqI4 zB%dOICiI6~_}U3L#9EiNTu^=ZdeGhJuk=nS&xK0)sF8fA@nAM&^&!C#3#H}D9*3-U zO3hz?|LT6%*t=70#!Iq6ipdE6Y|It)sML>;VIvsf7?V;dI^hAhU;3ZuNvda~|e6*}3|dyI?JgEW}sR8nyAZioX%spdG|@wX%*9=O|m( zA!+i#7$0LWov+~)G!5qy6nFQ7SwSsdIG$#2 z$p>4;hQx2Fas-r4-sRQJ3`n^?KWTv$ZC1wevuhOKDm)bTI^##_XkB2V>C0pPcJo$- z&GYz~1^$7OLKwrZ$KYH+aW+oed;afw;oqh#4nfh8d0Z(4NhgejEf#+zmqdS?ONGj) z(s8c$um*b9{qj$bU{<2;q$Gq8F$hir0)Sq_7_G7GV7zby7HuJA$^sF)9&in8U__Y3JN5a~) zMq2|ry;(uXEIlnHMmOKGQ%V=vDg+L4|D5Losuj13AQMh4nKw`~BMe~t zIi4y(EYVL)8uS|**T^|Hzr#Z;iKNqiLWHOqSMCdid||%)zEQC2KDGLX8jn4 z7FJqto?mjYrQoiLC`Jn2m{ZZI>K+;h0h&xao)YVOy8~i)_=nCAF+}DxgFjGE2{K`6 z4pGoM>RQ<6d?8$}sV$$UZO{QWog-M281)USE~#QV!7lLgL+>^9n;7QH2{Ex7B6#QB zx?vo5GsB`!#Rmv`<_sRZjUO=qZOBzpf_K}^q7C>4$JinpY5r{7>H z4yl<@Kx~k)3x&n>B5tiSb6dKTe@jn;@Rg9uX3iz3(08qNFl#uHKzHaadlPk*uqG|3 zJ@CtH&$npt?WZ!-?M2YYsLb-tpM(lUsaOW}r6uzy#f-3R0; zEfGU~7Au^u!HJ(9K%v7WSJJKY&!x8V>(Eu_;g}P-c+G=^U(sL;J~H$FK4wV0*x7QM zQ6Fn}df^?B-m-9!F+{&3GTJ{bSAkp@e~N00t#V7s3u8A^e>P&dQV^)wSM!H8x$=dZ z4mA~YcL>rFh~bRvQ`h4Kje$De})0`Z1>FWexTb4C4 z-hf5+AFp}lvhARl)Qy0v&=Uq);Pws1n#o}(tf}%M%r6NG#ovnb<)ex_^x7hLdE|K% zhjM)@?G)o_TKgK~1-H}Bs-hHQ1K9ZmyeyTPt~|aa0OUP2KVg|+j8cLSPIxGXOGs6< zh<>5uKNE89@%rw~mnvVc4WA*H5j4+Hh^f4#ac6ImDt_kHzwsg>ib{v3x?J3t@Rik{ zRZ#k2nk&~S=6R-k(w^mea=Slc57MtV+1I-;G2EjtRgq5!=e=@qFlP+2zf+_|Ui^24 zLPy|+ke83jnMGFSB*v$azV|F-;=+ydgu51_Pxoh^yf#;&3m)QEMNnmBtf@HgSyQOA7N)o z7CabDO72k#zpWpOSOHJH@!No5hb6$>jkll4t;!_Qn)UQbf85-|Kt6s&!)r`6vMo}r z(*kgStnvDN4mO?+)}GbS1KaKNz;}QL7{VU~@@#|EUTkDn+xa4KYRmu7mGj3zCsnw7 z=Tp1|GE?L~Nv<+Wu)kJ(YyK$w!KDfDSNA~D|GXpx39@1koWo{z-zbU+3C}2Fs`skH zeQw|Yt^aQzL&p%c3rvDe`nEi234B7sPDy#f8kb3;4?H^GcVo`;!siRiXHoMzL60~4 z7Ga?u8^#yGx?D37C`(RN6B^M?dPQicS+n_ecv;O=f6DL$yJwEYg%aVR9M7ScZHW<$ zBH0wX{{#cJBWy!uj=${WUeGm#d%}2y47c-Y^RXVUrS5YBurF-eSkuS-LZ)GNq#cr( z+wDjWn+Ib#Z4Y1B{V_RZ$ga_QDLKin{sK9Zz&~q?#aLX=5{;AEVyH>{#!qej>@we+ zV?VSl%cR2&0xR$79FnuTJoV$5d<{1b@3yudt6dJ?^YpapDBo{YrNrV#TppSmgZk&8 zKCefa-ZxJiFXR^5?0&4Gn$TYDnS|ak^3`g(a(I|Cm%XlAWz*&M{Q?bLaDT(75U3Bk z0MSAC705sTT?LMSTEQ>3CR7W&YlnZI$yjI_^C>-rl9m+_64c*q(LeT69M5TN}b?b_2Hy4ziFn4AuLClWsME~ z5J!HVGX&%`Aos3=Kx=w?yB?B9RYA`FZGY)=8|@@CI183eDg|i%Tn#ipuT{0o)t1D9KSE#XB%6ylI43S2V{^h|LaSwcmbu#`Q`_$ukRu`r9oZ!BSGH+ok)M@l^+njzin=sW`7aT3ab#Bc9t{n9v5CYg3^VK zixz6Fn4h2v8vXPXisiHhABpm$feMD5fEX~vHc;O)J^w)o`7uWjTm&1%Pw@96DV%Q} z!85Vu7_A*5>xzuyDo6S%^Gk7YrTv~}1)A5VQtm3n!N+_RB#yVlx z2<39Y)0Cemd5L?`I0Vz%ZA%J{tr%JrLMmyO9BqZZG~4GT@MzXU*EOZf*QFai+R;LI zD#to%Y{wFYwb?qz4~1kB3qhXNDd9NXqbEPt)CCUu_45E{}T1;l&PATtAE5V*gM8tj-j-vgP8YmAQSDES> z7Lj`CUZ~qIsKv#NjsxtU8pB>%TFNqx5gu>a6F73L-&f&mJJn{~Ty!q(xen)iZwQ73 zPtuXa%)q3AyN@=8Oj&R<z9cD1U4&dOV>Pf=v8|X}{&3j?H`m~MJ zz<6K;fzxS516NttfW&d>*X-brI)q7uDRsfD1O~aMKUIzz4G3$s@;m9B=OI$9zlPTm zjD-Cp#Tu%nHVwir!dqy>K9Wo^cL$?=lhhkrc=NUh2WoY-i7ZRHI+8dRHm1lZRrikE zq+S%bA*i}Rje##9(W}0<+#{;Yo5gIF%EF0dYM z)A_r_46NwnV%9oi#C6y)Pm#QAIdqUHyb+T^WkytN(jY{qw@`A;ET9A=G;H?byryF} zv`aIitVS4nOh(0Vj#dHutdgLHiYMV4Rh)zGQUr_|P}0ks=}34`&pUL^Xr;}J;*Bsh zt&V{Mw+>2~TKV%LaFLnrtZbX0r^x_zEgxuQALgsfgZjUD>{UySQp4-i`t`Yl5YADM)D9r* zCwtM_w1rgj0Z6l5e+$f{y&an@_ZtNwClSkrDL2I9g@4D5MTx7(!#vwnc+~z4_Plv^ z5+%E^RzzdWp4JYfG5fiCu~&(?@@*Or4_y9!dMha)x277x{g@4~jx^SSRd#n6xaxbk4S05i6WvAZHZa0#6`O)ha-vPNIm1}2u z9Re4<@Sqo9?Yv<*Y8rQ-F0AN4>0nh;+#gPRtfZfz&&G6f3X@Vj3Ebx-uWo zZwg4MeS84#>S(exs5)7Qfba8>b;@)(lOI^#kEUq_$6T6fjdiT7>d;%symN|YS zg>;N@4j7!E+X_%o1m^ujSZo_ja%|nzGFdw21d27*Y0Aw(2@F=^83b!M=ni*}RTSwx zd1I(%njS=%jwu1XW5aX{sh>e0d{e5~lYKg-eWjB8iW_w}f&A-{LgPAs~dA@Mk zoOIT_Rg9m7#nQ5=VA#K6kDeK)`7qY?vtlZzGof2f+g?h=%*f5D0Dt<~N&PQ&=403+ z*u4}0RbLFJJwoKhWMiz@Sm*nKr)Zm|$wfLcELYH^iYPA25<=s203;-|cMR0#i{}$M zbED4{#$2apAv!M78x&nio+#F)c1xmvddY(;{b^{Yu>pDSSH4!WSf8^#V7X4K9_2>O zfaV?~p4rG}xOd3k#NN|9#R?gJA@m3Qj<4HQOO-!;a$30;B-8u+B$z+`Lwa_LLDaQ? zW4r5hW;q`Y%fm*)MOS5`&rxk*^QUbl-Ratt;4^Kp)1-cyHM(hPBJmHFT}9Mr|IEcT z>~)M)2(ty{<)nzz795eQdg1qU7O(kmkrmCH{Dtk(5b5=W6FkXfmb~27G}I?UHS6Rh zJR9Y#w_R=x(97rl;_&_&wF|>;-d1#JzIUKR3IYC0v79umtr}Z=w9NkR8Sm45J3}H^8h#S|Asaz z5N8OFQ2-v}zkIJeVE7uav$p!>FRf1&sbSh*{$JkHnFF81t!!}GlnhTpCP+*`QR(m%6y~qxcG%ce<}YA7_sc$yV;&j;T14@ zKIVup!|PeK>X!cix8U0T|D)CpRMvkTGU+{kb=R;m%7^=3MBDAqoAnhSIt6;OKe<6s zU&@GczX?FWpI!E5TUpwl-G9mr?9~5i{*a9~vqh7gOK9)O_>JqX-;QvU$;p&Y5Xk$f z?Npz}t66^pB}wgts8V({(vl*+AEB)JR+R>}a>DQX@@ZxMjQlHOQ8Ax}80O{7Vx{rIi9_q6`L02)4~1 zlm_bZHQ?QOiDX;V<^x~I)jPhW0%!{xE@_RE&p_oJyaJujp%RhnrVG?YXWq0PX zu<8(=lc0V`!s=GV8frewn`gG(+q8<_X!gy0QIxQIc{BvIKAb*iQaE^zud9ElsKpz( zR^NcK*jU`a*6T7v0VWls{L}d+x&L-R-XjCDZK`&vh}az!dcJO*8TR#(L0; zzV+VvJOf<58ycHMDTElb{Cq)}lbd@JNJ~TlKUjf|&mXy$R$U4RA0hX{6a86I$L-HN+=NzBg_+PjeZ9@t4|+p2ISO(SwcKssYrntoKU%JCH*N6c zw(g_d*V*3gbLS{_^pt8q83I;*OS9q@NL0GNn(*z&iQ&!*1Q2K~d#U{oIY~(nD{X@& z8h{o-n-&0OtsQcmMx|~GBC7&xV(+2^iomHSmoA;V#cI?HQ-G?>@|1(XL89`x20{r{ z(uwMGkaFjjJ`G3oJ&2L(EnUUvg3fH&vmArF`0I_{~!9KAJde^kGEzS?-$Y9V9Y@l zAeE=$TO7mRBttl#ZW*0N#X~hnaUHpg)YIE|*v^8(dM#|o3#LJM=1z-Yd#2w^D|v=) zEWYee)#GIirtVKhBb5IbU&A_DoQd^)5U@16ocIvPZx+vK1#CS=t7*67I=l~)K#r|K zK4ReK*igv&kLedFb7o{vV*XY=6%J%*yAB?7oJCJJp`Z4bdGd`b|a_5*D_jCcFEzQuW zs3!AFhI^%qrd5Y7HhyTh{QKRHjnk3KePDI<--jE|-j$t`E%czc_MiG8u{{yWe_In^ zSX)OMCb^mdYm|w_q!&;oVos;~QA*+(;=PQ|on1eg+;dd>_j|!zS2VsRnuaHlJvbP1 zsXk*>C~B~S7@@6$KH0F_4z%ThOt!^Nq~r%CSVTZdy`+A+pLCG{0}aqcUk^Q4dshNi zM)y~<<#TO-x2FYP0PpXsD8`{I4qZ+nldK>KIOpGl0lA|(-O&H82uk;1gP945BgJUi zPaDaZWPHve{Z}SOzYMimJD+uxbS;HnuGpxNHNFbSH+scN$-DKgwlACth9>G2S;rOu zKAyY%KLk%=KN2W)Fl3UCF~Nz&hi>R3k)k9M;ucCWr<-upwAUDPN|Yf4XirHkV8V90 zN3@!utiB1f4jSawg=Lx7&$Sq=Fx30FD}P^KUW+7G0ku>5)bZmTXFI+;jga_FL(8O- z*f494<$%Zlu!yvT?b8i2x1i%DcG7G2(GvrPQ-x$e&1VhQzlC77;M_(0&Jf zk1Fj`*ub*catT}q);P_Z+fMqypFGe)^D1e%I8@Dwi|Cg$RSXHKgk%<3u5FC7#cKAS zC;^p2giee$8a}`9o`ki+>>e@3k}&!rScXlklshF26Jad_#3TKs8-t(VuvsM#p0(2%pB;nk@< z*-D3t$raO~O@1&$yCki0l0dLX&wfn9x_foV*S$3r>5N_^47*DfC*O;0#sF|&(Ug-V zIIqXdE-20A4GNj#RWP4%jo;B=kPtMeEv1Oznpc3DgI1FeHtj9!kRV?%rzg!4X?ZDD zG)79y^j0GSfjWWZ9Hlu%I8)+iP=6Lqla`s6F%?+){9hemzIWub>r3_wg<%eVdxha0 z2HouY-LXuMO^~p%aK@Ae|NJv8jyb0gI6dYZwqz;5jalZ3n@g219ZsrJlhdC6CrN@H z&u1we2JhBmx*tG(fVyxBw7r`A|?xy&c(&m zH1_(T|DHp(KW=3DMr)yDkL{8@Qyso-@{fqux>YH3j6`So8J^GT(3?MN6Q-yqRqP|i zH&2gGmk2P_`qh~^Gj5m0GyYaMFxr!AtmO1~#P#e&qR`aBmLrDQ-_d@a?(z)XdmUN~ z6DGF(?!%+L)@%C5@l2zp@A?Y6zBPGDhV-uFGmWtElWOfE(AtRopKAjG4j#U{?N-q6 zDI-rS#iZi~dItQrReQN}Y!^<4%BQrU|M9P;75I*Msy(Er<8z4aC1De2)A)vt6CO>o z(N7!LoJ=akTA1!fLE=eDL%U`WQIqe>JbVYGHd#+Rd}2xtOc4AZ1P{sBQejC1bfU{h zY%XMAI(&*ifW|e)Vui|$o_T>rmMys}{!z8zK4wofPgS#y)$vT{&)mX8U#OPD0e1COySLJ4}$Nwg&x-(83rbUH^)k3nu zxvI&9Sij%5>m-rSJ@$XRYq@Qua{Hd1lPX(Qj4UZGZbv@u;N=03Y}(6@l8)7XL-uww z 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 literal 0 HcmV?d00001 diff --git a/documentation/sequence_diagram/did-resolve.mmd b/documentation/sequence_diagram/did-resolve.mmd new file mode 100644 index 0000000..bee2749 --- /dev/null +++ b/documentation/sequence_diagram/did-resolve.mmd @@ -0,0 +1,26 @@ +sequenceDiagram +Title: DID Resolve + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HMN as Hedera Mirro Node + + +alt resolve a DID +App ->> HSDK: Build Client (No Hedera account info needed) + +App ->> SDK: Create HCS DID Object with
DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) +App ->> SDK: Resolve a DID +SDK ->> SDK: Extract topic id from DID +SDK ->> HSDK: Subscribe to Topic +HSDK ->> HMN: Subscribe to Topic +HMN -->> HSDK: receive all messages +HSDK -->> SDK: receive all messages +SDK ->> SDK: extract all Events from messages +SDK ->> SDK: proccess events +SDK ->> SDK: generate DID Document +SDK ->> App: send DID Document +end + + diff --git a/documentation/sequence_diagram/did-resolve.png b/documentation/sequence_diagram/did-resolve.png new file mode 100644 index 0000000000000000000000000000000000000000..770b4bac3a5170529d03139b4eb4111d0c43d8bb GIT binary patch literal 131877 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
IDZ(w{Y&;eFZpJ+RJjziLkIdKsEb^x+bv5F<>@ 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 d&SxkX6#cx{nHuf`$A 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

^CkWF6Qfx96Sx*5X3Q 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 wo>7ZznklINI-eqG35ZGpDC5KbhqrhHT{lGQc~ Date: Fri, 11 Feb 2022 14:52:21 +0100 Subject: [PATCH 082/133] Ignore event if operation or target type was not recognised without throwing an error; bug fix --- demo/5_change_did_ownership.js | 2 +- src/identity/did-document.ts | 20 ++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index a5e6732..ac5f514 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -72,7 +72,7 @@ async function main() { console.log("\n"); console.log("==================================================="); console.log("DragaonGlass Explorer:"); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + console.log(`https://testnet.dragonglass.me/hedera/topics/${registeredDid.getTopicId().toString()}`); console.log("\n"); } main(); diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index abd0d00..b4fe1dc 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -210,10 +210,7 @@ export class DidDocument { } return; default: - /** - * TODO: for debugging - later we should probably try to ignore such messages - */ - throw new Error("Not supported event detected!"); + console.warn(`Create ${event.targetName} operation is not supported. Event will be ignored...`); } } @@ -283,10 +280,7 @@ export class DidDocument { } return; default: - /** - * TODO: for debugging - later we should probably try to ignore such messages - */ - throw new Error("Not supported event detected!"); + console.warn(`Update ${event.targetName} operation is not supported. Event will be ignored...`); } } @@ -348,10 +342,7 @@ export class DidDocument { } return; default: - /** - * TODO: for debugging - later we should probably try to ignore such messages - */ - throw new Error("Not supported event detected!"); + console.warn(`Revoke ${event.targetName} operation is not supported. Event will be ignored...`); } } @@ -368,10 +359,7 @@ export class DidDocument { ); return; default: - /** - * TODO: for debugging - later we should probably try to ignore such messages - */ - throw new Error("Not supported event detected!"); + console.warn(`Delete ${event.targetName} operation is not supported. Event will be ignored...`); } } } From 29215bdf2aa454e70ff56db77f586ddc0363238a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 11 Feb 2022 15:20:28 +0100 Subject: [PATCH 083/133] Get rid of unnecessary hierarcy structure --- .../hcs/did/hcs-did-event-message-resolver.ts | 3 +- src/identity/hcs/did/hcs-did-message.ts | 27 ++- .../hcs/did/hcs-did-topic-listener.ts | 183 +++++++++++++++- src/identity/hcs/did/hcs-did-transaction.ts | 175 +++++++++++++++- src/identity/hcs/message-envelope.ts | 10 +- src/identity/hcs/message-listener.ts | 194 ----------------- src/identity/hcs/message-transaction.ts | 197 ------------------ src/identity/hcs/message.ts | 41 ---- src/index.ts | 6 - 9 files changed, 368 insertions(+), 468 deletions(-) delete mode 100644 src/identity/hcs/message-listener.ts delete mode 100644 src/identity/hcs/message-transaction.ts delete mode 100644 src/identity/hcs/message.ts diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 828931b..491b587 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -3,7 +3,6 @@ import Long from "long"; import { Sleep } from "../../../utils/sleep"; import { Validator } from "../../../utils/validator"; import { MessageEnvelope } from "../message-envelope"; -import { MessageListener } from "../message-listener"; import { HcsDidMessage } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; @@ -23,7 +22,7 @@ export class HcsDidEventMessageResolver { private resultsHandler: (input: HcsDidMessage[]) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; - private readonly listener: MessageListener; + private readonly listener: HcsDidTopicListener; private noMoreMessagesTimeout: Long; /** diff --git a/src/identity/hcs/did/hcs-did-message.ts b/src/identity/hcs/did/hcs-did-message.ts index a1e3fb1..a565c8d 100644 --- a/src/identity/hcs/did/hcs-did-message.ts +++ b/src/identity/hcs/did/hcs-did-message.ts @@ -1,15 +1,21 @@ -import { TopicId } from "@hashgraph/sdk"; +import { Timestamp, TopicId } from "@hashgraph/sdk"; +import Long from "long"; +import { TimestampUtils } from "../../../utils/timestamp-utils"; import { DidMethodOperation } from "../../did-method-operation"; import { DidParser } from "../../did-parser"; -import { Message } from "../message"; import { HcsDidEvent } from "./event/hcs-did-event"; import { HcsDidEventParser } from "./event/hcs-did-event-parser"; import { HcsDid } from "./hcs-did"; +export type Signer = (message: T) => T; + /** * The DID document message submitted to appnet's DID Topic. */ -export class HcsDidMessage extends Message { +export class HcsDidMessage { + private static serialVersionUID = Long.fromInt(1); + + protected timestamp: Timestamp; protected operation: DidMethodOperation; protected did: string; protected event: HcsDidEvent; @@ -22,13 +28,16 @@ export class HcsDidMessage extends Message { * @param event The DID Event. */ constructor(operation: DidMethodOperation, did: string, event: HcsDidEvent) { - super(); - + this.timestamp = TimestampUtils.now(); this.operation = operation; this.did = did; this.event = event; } + public getTimestamp(): Timestamp { + return this.timestamp; + } + public getOperation(): DidMethodOperation { return this.operation; } @@ -75,7 +84,7 @@ export class HcsDidMessage extends Message { } public toJsonTree(): any { - const result: any = super.toJsonTree(); + const result: any = { timestamp: TimestampUtils.toJSON(this.timestamp) }; result.operation = this.operation; result.did = this.did; result.event = this.getEventBase64(); @@ -92,7 +101,7 @@ export class HcsDidMessage extends Message { result.did = tree.did; result.event = event; } - result = super.fromJsonTree(tree, result) as HcsDidMessage; + result.timestamp = TimestampUtils.fromJson(tree.timestamp); return result; } @@ -100,7 +109,7 @@ export class HcsDidMessage extends Message { return JSON.stringify(this.toJsonTree()); } - public static fromJson(json: string): Message { - return Message.fromJsonTree(JSON.parse(json)); + public static fromJson(json: string): HcsDidMessage { + return HcsDidMessage.fromJsonTree(JSON.parse(json)); } } diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index dbbc99a..1ec13b9 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -1,24 +1,113 @@ -import { TopicId, TopicMessage } from "@hashgraph/sdk"; +import { Client, Timestamp, TopicId, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; +import SubscriptionHandle from "@hashgraph/sdk/lib/topic/SubscriptionHandle"; import { MessageEnvelope } from "../message-envelope"; -import { MessageListener } from "../message-listener"; import { HcsDidMessage } from "./hcs-did-message"; /** * A listener of confirmed {@link HcsDidMessage} messages from a DID topic. * Messages are received from a given mirror node, parsed and validated. */ -export class HcsDidTopicListener extends MessageListener { +export class HcsDidTopicListener { + protected topicId: TopicId; + protected query: TopicMessageQuery; + protected errorHandler: (input: Error) => void; + protected ignoreErrors: boolean; + protected subscriptionHandle: SubscriptionHandle; + protected filters: ((input: TopicMessage) => boolean)[]; + protected invalidMessageHandler: (t: TopicMessage, u: string) => void; + /** * Creates a new instance of a DID topic listener for the given consensus topic. * By default, invalid messages are ignored and errors are not. * * @param didTopicId The DID consensus topic ID. */ - constructor(didTopicId: TopicId) { - super(didTopicId); + constructor(topicId: TopicId) { + this.topicId = topicId; + this.query = new TopicMessageQuery().setTopicId(topicId); + this.ignoreErrors = false; + } + + /** + * Adds a custom filter for topic responses from a mirror node. + * Messages that do not pass the test are skipped before any other checks are run. + * + * @param filter The filter function. + * @return This listener instance. + */ + public addFilter(filter: (input: TopicMessage) => boolean): HcsDidTopicListener { + if (!this.filters) { + this.filters = []; + } + this.filters.push(filter); + + return this; + } + + /** + * Subscribes to mirror node topic messages stream. + * + * @param client Mirror client instance. + * @param receiver Receiver of parsed messages. + * @return This listener instance. + */ + public subscribe(client: Client, receiver: (input: MessageEnvelope) => void): HcsDidTopicListener { + const errorHandler = (message: TopicMessage, error: Error) => { + this.handleError(error); + }; + const listener = (message: TopicMessage) => { + this.handleResponse(message, receiver); + }; + + this.subscriptionHandle = this.query.subscribe(client, errorHandler, listener); + + return this; + } + + /** + * Stops receiving messages from the topic. + */ + public unsubscribe(): void { + if (this.subscriptionHandle) { + this.subscriptionHandle.unsubscribe(); + } } - protected override extractMessage(response: TopicMessage): MessageEnvelope { + /** + * Handles incoming messages from the topic on a mirror node. + * + * @param response Response message coming from the mirror node for the topic. + * @param receiver Consumer of the result message. + */ + protected handleResponse(response: TopicMessage, receiver: (input: MessageEnvelope) => void) { + if (this.filters) { + for (let filter of this.filters) { + if (!filter(response)) { + this.reportInvalidMessage(response, "Message was rejected by external filter"); + return; + } + } + } + + const envelope = this.extractMessage(response); + + if (!envelope) { + this.reportInvalidMessage(response, "Extracting envelope from the mirror response failed"); + return; + } + + if (this.isMessageValid(envelope, response)) { + receiver(envelope); + } + } + + /** + * Extracts and parses the message inside the response object into the given type. + * + * @param response Response message coming from the mirror node for this listener's topic. + * @return The message inside an envelope. + */ + protected extractMessage(response: TopicMessage): MessageEnvelope { let result: MessageEnvelope = null; try { result = MessageEnvelope.fromMirrorResponse(response, HcsDidMessage); @@ -29,7 +118,14 @@ export class HcsDidTopicListener extends MessageListener { return result; } - protected override isMessageValid(envelope: MessageEnvelope, response: TopicMessage): boolean { + /** + * Validates the message and its envelope signature. + * + * @param message The message inside an envelope. + * @param response Response message coming from the mirror node for this listener's topic. + * @return True if the message is valid, False otherwise. + */ + protected isMessageValid(envelope: MessageEnvelope, response: TopicMessage): boolean { try { const message: HcsDidMessage = envelope.open(); if (!message) { @@ -49,4 +145,77 @@ export class HcsDidTopicListener extends MessageListener { return false; } } + + /** + * Handles the given error internally. + * If external error handler is defined, passes the error there, otherwise raises RuntimeException or ignores it + * depending on a ignoreErrors flag. + * + * @param err The error. + * @throws RuntimeException Runtime exception with the given error in case external error handler is not defined + * and errors were not requested to be ignored. + */ + protected handleError(err: Error): void { + if (this.errorHandler) { + this.errorHandler(err); + } else if (!this.ignoreErrors) { + throw new Error(err.message); + } + } + + /** + * Reports invalid message to the handler. + * + * @param response The mirror response. + * @param reason The reason why message validation failed. + */ + protected reportInvalidMessage(response: TopicMessage, reason: string): void { + if (this.invalidMessageHandler) { + this.invalidMessageHandler(response, reason); + } + } + + /** + * Defines a handler for errors when they happen during execution. + * + * @param handler The error handler. + * @return This transaction instance. + */ + public onError(handler: (input: Error) => void): HcsDidTopicListener { + this.errorHandler = handler; + return this; + } + + /** + * Defines a handler for invalid messages received from the topic. + * The first parameter of the handler is the mirror response. + * The second parameter is the reason why the message failed validation (if available). + * + * @param handler The invalid message handler. + * @return This transaction instance. + */ + public onInvalidMessageReceived(handler: (t: TopicMessage, u: string) => void): HcsDidTopicListener { + this.invalidMessageHandler = handler; + return this; + } + + public setStartTime(startTime: Timestamp): HcsDidTopicListener { + this.query.setStartTime(startTime); + return this; + } + + public setEndTime(endTime: Timestamp): HcsDidTopicListener { + this.query.setEndTime(endTime); + return this; + } + + public setLimit(messagesLimit: Long): HcsDidTopicListener { + this.query.setLimit(messagesLimit); + return this; + } + + public setIgnoreErrors(ignoreErrors: boolean): HcsDidTopicListener { + this.ignoreErrors = ignoreErrors; + return this; + } } diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index 5ee167a..40223c9 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -1,15 +1,28 @@ -import { TopicId } from "@hashgraph/sdk"; +import { Client, Timestamp, TopicId, TopicMessageSubmitTransaction, Transaction, TransactionId } from "@hashgraph/sdk"; +import moment from "moment"; +import { ArraysUtils } from "../../../utils/arrays-utils"; +import { Validator } from "../../../utils/validator"; import { MessageEnvelope } from "../message-envelope"; -import { MessageListener } from "../message-listener"; -import { MessageTransaction } from "../message-transaction"; -import { HcsDidMessage } from "./hcs-did-message"; +import { HcsDidMessage, Signer } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; /** * The DID document creation, update or deletion transaction. * Builds a correct {@link HcsDidMessage} and send it to HCS DID topic. */ -export class HcsDidTransaction extends MessageTransaction { +export class HcsDidTransaction { + private static SUBTRACT_TIME = 1; // seconds + + protected topicId: TopicId; + protected message: MessageEnvelope; + + private buildTransactionFunction: (input: TopicMessageSubmitTransaction) => Promise; + private receiver: (input: MessageEnvelope) => void; + private errorHandler: (input: Error) => void; + private executed: boolean; + private signer: Signer; + private listener: HcsDidTopicListener; + /** * Instantiates a new transaction object from a message that was already prepared. * @@ -18,13 +31,161 @@ export class HcsDidTransaction extends MessageTransaction { */ constructor(message: MessageEnvelope, topicId: TopicId) { if (message instanceof MessageEnvelope && topicId instanceof TopicId) { - super(topicId, message); + this.topicId = topicId; + this.message = message; + this.executed = false; } else { throw new Error("Invalid arguments"); } } - protected provideTopicListener(topicIdToListen: TopicId): MessageListener { + /** + * Provides a {@link MessageListener} instance specific to the submitted message type. + * + * @param topicIdToListen ID of the HCS topic. + * @return The topic listener for this message on a mirror node. + */ + protected provideTopicListener(topicIdToListen: TopicId): HcsDidTopicListener { return new HcsDidTopicListener(topicIdToListen); } + + /** + * Handles the error. + * If external error handler is defined, passes the error there, otherwise raises RuntimeException. + * + * @param err The error. + * @throws RuntimeException Runtime exception with the given error in case external error handler is not defined. + */ + protected handleError(err: Error): void { + if (this.errorHandler) { + this.errorHandler(err); + } else { + throw new Error(err.message); + } + } + + /** + * Handles event from a mirror node when a message was consensus was reached and message received. + * + * @param receiver The receiver handling incoming message. + * @return This transaction instance. + */ + public onMessageConfirmed(receiver: (input: MessageEnvelope) => void): HcsDidTransaction { + this.receiver = receiver; + return this; + } + + /** + * Defines a handler for errors when they happen during execution. + * + * @param handler The error handler. + * @return This transaction instance. + */ + public onError(handler: (input: Error) => void): HcsDidTransaction { + this.errorHandler = handler; + return this; + } + + /** + * Defines a function that signs the message. + * + * @param signer The signing function to set. + * @return This transaction instance. + */ + public signMessage(signer: Signer): HcsDidTransaction { + this.signer = signer; + return this; + } + + /** + * Sets {@link TopicMessageSubmitTransaction} parameters, builds and signs it without executing it. + * Topic ID and transaction message content are already set in the incoming transaction. + * + * @param builderFunction The transaction builder function. + * @return This transaction instance. + */ + public buildAndSignTransaction( + builderFunction: (input: TopicMessageSubmitTransaction) => Promise + ): HcsDidTransaction { + this.buildTransactionFunction = builderFunction; + return this; + } + + /** + * Builds the message and submits it to appnet's topic. + * + * @param client The hedera network client. + * @return Transaction ID. + */ + public async execute(client: Client): Promise { + new Validator().checkValidationErrors("MessageTransaction execution failed: ", (v) => { + return this.validate(v); + }); + + const envelope = this.message; + + const messageContent = !envelope.getSignature() + ? envelope.sign(this.signer) + : ArraysUtils.fromString(envelope.toJSON()); + + if (this.receiver) { + this.listener = this.provideTopicListener(this.topicId); + this.listener + .setStartTime( + Timestamp.fromDate(moment().subtract(HcsDidTransaction.SUBTRACT_TIME, "seconds").toDate()) + ) + .setIgnoreErrors(false) + .addFilter((response) => { + return ArraysUtils.equals(messageContent, response.contents); + }) + .onError((err) => { + return this.handleError(err); + }) + .onInvalidMessageReceived((response, reason) => { + if (!ArraysUtils.equals(messageContent, response.contents)) { + return; + } + + this.handleError(new Error(reason + ": " + ArraysUtils.toString(response.contents))); + this.listener.unsubscribe(); + }) + .subscribe(client, (msg) => { + this.listener.unsubscribe(); + this.receiver(msg); + }); + } + + const tx = new TopicMessageSubmitTransaction().setTopicId(this.topicId).setMessage(messageContent); + + let transactionId; + + try { + const response = await (await this.buildTransactionFunction(tx)).execute(client); + await response.getReceipt(client); + + transactionId = response.transactionId; + this.executed = true; + } catch (e) { + this.handleError(e); + if (this.listener) { + this.listener.unsubscribe(); + } + } + + return transactionId; + } + + /** + * Runs validation logic. + * + * @param validator The errors validator. + */ + protected validate(validator: Validator): void { + validator.require(!this.executed, "This transaction has already been executed."); + validator.require( + !!this.signer || (!!this.message && !!this.message.getSignature()), + "Signing function is missing." + ); + validator.require(!!this.buildTransactionFunction, "Transaction builder is missing."); + } } diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 94db601..9444eae 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -1,18 +1,18 @@ import { PublicKey, Timestamp, TopicMessage } from "@hashgraph/sdk"; import { Base64 } from "js-base64"; import Long from "long"; +import { HcsDidMessage } from "../.."; import { ArraysUtils } from "../../utils/arrays-utils"; import { JsonClass } from "./json-class"; -import { Message } from "./message"; import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; -export type PublicKeyProvider = (evn: MessageEnvelope) => PublicKey; +export type PublicKeyProvider = (evn: MessageEnvelope) => PublicKey; export type SignFunction = (message: Uint8Array) => Uint8Array; /** * The envelope for Hedera identity messages sent to HCS DID or VC topics. */ -export class MessageEnvelope { +export class MessageEnvelope { private static MESSAGE_KEY = "message"; private static SIGNATURE_KEY = "signature"; @@ -98,7 +98,7 @@ export class MessageEnvelope { * @param messageClass Class type of the message inside envelope. * @return The {@link MessageEnvelope}. */ - public static fromMirrorResponse( + public static fromMirrorResponse( response: TopicMessage, messageClass: JsonClass ): MessageEnvelope { @@ -118,7 +118,7 @@ export class MessageEnvelope { * @param messageClass Class of the message inside envelope. * @return The {@link MessageEnvelope}. */ - public static fromJson(json: string, messageClass: JsonClass): MessageEnvelope { + public static fromJson(json: string, messageClass: JsonClass): MessageEnvelope { const result = new MessageEnvelope(); const root = JSON.parse(json); result.signature = root[MessageEnvelope.SIGNATURE_KEY]; diff --git a/src/identity/hcs/message-listener.ts b/src/identity/hcs/message-listener.ts deleted file mode 100644 index 4322af8..0000000 --- a/src/identity/hcs/message-listener.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { Client, Timestamp, TopicId, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; -import SubscriptionHandle from "@hashgraph/sdk/lib/topic/SubscriptionHandle"; -import Long from "long"; -import { Message } from "./message"; -import { MessageEnvelope } from "./message-envelope"; - -/** - * A listener of confirmed messages from an HCS identity topic. - * Messages are received from a given mirror node, parsed and validated. - */ -export abstract class MessageListener { - protected topicId: TopicId; - protected query: TopicMessageQuery; - protected errorHandler: (input: Error) => void; - protected ignoreErrors: boolean; - protected subscriptionHandle: SubscriptionHandle; - protected filters: ((input: TopicMessage) => boolean)[]; - protected invalidMessageHandler: (t: TopicMessage, u: string) => void; - - /** - * Creates a new instance of a topic listener for the given consensus topic. - * By default, invalid messages are ignored and errors are not. - * - * @param topicId The consensus topic ID. - */ - constructor(topicId: TopicId) { - this.topicId = topicId; - this.query = new TopicMessageQuery().setTopicId(topicId); - this.ignoreErrors = false; - } - - /** - * Extracts and parses the message inside the response object into the given type. - * - * @param response Response message coming from the mirror node for this listener's topic. - * @return The message inside an envelope. - */ - protected abstract extractMessage(response: TopicMessage): MessageEnvelope; - - /** - * Validates the message and its envelope signature. - * - * @param message The message inside an envelope. - * @param response Response message coming from the mirror node for this listener's topic. - * @return True if the message is valid, False otherwise. - */ - protected abstract isMessageValid(message: MessageEnvelope, response: TopicMessage): boolean; - - /** - * Adds a custom filter for topic responses from a mirror node. - * Messages that do not pass the test are skipped before any other checks are run. - * - * @param filter The filter function. - * @return This listener instance. - */ - public addFilter(filter: (input: TopicMessage) => boolean): MessageListener { - if (!this.filters) { - this.filters = []; - } - this.filters.push(filter); - - return this; - } - - /** - * Subscribes to mirror node topic messages stream. - * - * @param client Mirror client instance. - * @param receiver Receiver of parsed messages. - * @return This listener instance. - */ - public subscribe(client: Client, receiver: (input: MessageEnvelope) => void): MessageListener { - const errorHandler = (message: TopicMessage, error: Error) => { - this.handleError(error); - }; - const listener = (message: TopicMessage) => { - this.handleResponse(message, receiver); - }; - - this.subscriptionHandle = this.query.subscribe(client, errorHandler, listener); - - return this; - } - - /** - * Stops receiving messages from the topic. - */ - public unsubscribe(): void { - if (this.subscriptionHandle) { - this.subscriptionHandle.unsubscribe(); - } - } - - /** - * Handles incoming messages from the topic on a mirror node. - * - * @param response Response message coming from the mirror node for the topic. - * @param receiver Consumer of the result message. - */ - protected handleResponse(response: TopicMessage, receiver: (input: MessageEnvelope) => void) { - if (this.filters) { - for (let filter of this.filters) { - if (!filter(response)) { - this.reportInvalidMessage(response, "Message was rejected by external filter"); - return; - } - } - } - - const envelope = this.extractMessage(response); - - if (!envelope) { - this.reportInvalidMessage(response, "Extracting envelope from the mirror response failed"); - return; - } - - if (this.isMessageValid(envelope, response)) { - receiver(envelope); - } - } - - /** - * Handles the given error internally. - * If external error handler is defined, passes the error there, otherwise raises RuntimeException or ignores it - * depending on a ignoreErrors flag. - * - * @param err The error. - * @throws RuntimeException Runtime exception with the given error in case external error handler is not defined - * and errors were not requested to be ignored. - */ - protected handleError(err: Error): void { - if (this.errorHandler) { - this.errorHandler(err); - } else if (!this.ignoreErrors) { - throw new Error(err.message); - } - } - - /** - * Reports invalid message to the handler. - * - * @param response The mirror response. - * @param reason The reason why message validation failed. - */ - protected reportInvalidMessage(response: TopicMessage, reason: string): void { - if (this.invalidMessageHandler) { - this.invalidMessageHandler(response, reason); - } - } - - /** - * Defines a handler for errors when they happen during execution. - * - * @param handler The error handler. - * @return This transaction instance. - */ - public onError(handler: (input: Error) => void): MessageListener { - this.errorHandler = handler; - return this; - } - - /** - * Defines a handler for invalid messages received from the topic. - * The first parameter of the handler is the mirror response. - * The second parameter is the reason why the message failed validation (if available). - * - * @param handler The invalid message handler. - * @return This transaction instance. - */ - public onInvalidMessageReceived(handler: (t: TopicMessage, u: string) => void): MessageListener { - this.invalidMessageHandler = handler; - return this; - } - - public setStartTime(startTime: Timestamp): MessageListener { - this.query.setStartTime(startTime); - return this; - } - - public setEndTime(endTime: Timestamp): MessageListener { - this.query.setEndTime(endTime); - return this; - } - - public setLimit(messagesLimit: Long): MessageListener { - this.query.setLimit(messagesLimit); - return this; - } - - public setIgnoreErrors(ignoreErrors: boolean): MessageListener { - this.ignoreErrors = ignoreErrors; - return this; - } -} diff --git a/src/identity/hcs/message-transaction.ts b/src/identity/hcs/message-transaction.ts deleted file mode 100644 index 5ef5ac7..0000000 --- a/src/identity/hcs/message-transaction.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { Client, Timestamp, TopicId, TopicMessageSubmitTransaction, Transaction, TransactionId } from "@hashgraph/sdk"; -import moment from "moment"; -import { ArraysUtils } from "../../utils/arrays-utils"; -import { Validator } from "../../utils/validator"; -import { Message, Signer } from "./message"; -import { MessageEnvelope } from "./message-envelope"; -import { MessageListener } from "./message-listener"; - -export abstract class MessageTransaction { - private static SUBTRACT_TIME = 1; // seconds - - protected topicId: TopicId; - protected message: MessageEnvelope; - - private buildTransactionFunction: (input: TopicMessageSubmitTransaction) => Promise; - private receiver: (input: MessageEnvelope) => void; - private errorHandler: (input: Error) => void; - private executed: boolean; - private signer: Signer; - private listener: MessageListener; - - /** - * Creates a new instance of a message transaction. - * - * @param topicId Consensus topic ID to which message will be submitted. - */ - constructor(topicId: TopicId); - /** - * Creates a new instance of a message transaction with already prepared message. - * - * @param topicId Consensus topic ID to which message will be submitted. - * @param message The message signed and ready to be sent. - */ - constructor(topicId: TopicId, message: MessageEnvelope); - constructor(...args) { - if (args.length === 1) { - const [topicId] = args; - this.topicId = topicId; - this.executed = false; - } else if (args.length === 2) { - const [topicId, message] = args; - this.topicId = topicId; - this.message = message; - this.executed = false; - } else { - throw new Error("Invalid arguments"); - } - } - - /** - * Provides a {@link MessageListener} instance specific to the submitted message type. - * - * @param topicIdToListen ID of the HCS topic. - * @return The topic listener for this message on a mirror node. - */ - protected abstract provideTopicListener(topicIdToListen: TopicId): MessageListener; - - /** - * Handles the error. - * If external error handler is defined, passes the error there, otherwise raises RuntimeException. - * - * @param err The error. - * @throws RuntimeException Runtime exception with the given error in case external error handler is not defined. - */ - protected handleError(err: Error): void { - if (this.errorHandler) { - this.errorHandler(err); - } else { - throw new Error(err.message); - } - } - - /** - * Handles event from a mirror node when a message was consensus was reached and message received. - * - * @param receiver The receiver handling incoming message. - * @return This transaction instance. - */ - public onMessageConfirmed(receiver: (input: MessageEnvelope) => void): MessageTransaction { - this.receiver = receiver; - return this; - } - - /** - * Defines a handler for errors when they happen during execution. - * - * @param handler The error handler. - * @return This transaction instance. - */ - public onError(handler: (input: Error) => void): MessageTransaction { - this.errorHandler = handler; - return this; - } - - /** - * Defines a function that signs the message. - * - * @param signer The signing function to set. - * @return This transaction instance. - */ - public signMessage(signer: Signer): MessageTransaction { - this.signer = signer; - return this; - } - - /** - * Sets {@link TopicMessageSubmitTransaction} parameters, builds and signs it without executing it. - * Topic ID and transaction message content are already set in the incoming transaction. - * - * @param builderFunction The transaction builder function. - * @return This transaction instance. - */ - public buildAndSignTransaction( - builderFunction: (input: TopicMessageSubmitTransaction) => Promise - ): MessageTransaction { - this.buildTransactionFunction = builderFunction; - return this; - } - - /** - * Builds the message and submits it to appnet's topic. - * - * @param client The hedera network client. - * @return Transaction ID. - */ - public async execute(client: Client): Promise { - new Validator().checkValidationErrors("MessageTransaction execution failed: ", (v) => { - return this.validate(v); - }); - - const envelope = this.message; - - const messageContent = !envelope.getSignature() - ? envelope.sign(this.signer) - : ArraysUtils.fromString(envelope.toJSON()); - - if (this.receiver) { - this.listener = this.provideTopicListener(this.topicId); - this.listener - .setStartTime( - Timestamp.fromDate(moment().subtract(MessageTransaction.SUBTRACT_TIME, "seconds").toDate()) - ) - .setIgnoreErrors(false) - .addFilter((response) => { - return ArraysUtils.equals(messageContent, response.contents); - }) - .onError((err) => { - return this.handleError(err); - }) - .onInvalidMessageReceived((response, reason) => { - if (!ArraysUtils.equals(messageContent, response.contents)) { - return; - } - - this.handleError(new Error(reason + ": " + ArraysUtils.toString(response.contents))); - this.listener.unsubscribe(); - }) - .subscribe(client, (msg) => { - this.listener.unsubscribe(); - this.receiver(msg); - }); - } - - const tx = new TopicMessageSubmitTransaction().setTopicId(this.topicId).setMessage(messageContent); - - let transactionId; - - try { - const response = await (await this.buildTransactionFunction(tx)).execute(client); - await response.getReceipt(client); - - transactionId = response.transactionId; - this.executed = true; - } catch (e) { - this.handleError(e); - if (this.listener) { - this.listener.unsubscribe(); - } - } - - return transactionId; - } - - /** - * Runs validation logic. - * - * @param validator The errors validator. - */ - protected validate(validator: Validator): void { - validator.require(!this.executed, "This transaction has already been executed."); - validator.require( - !!this.signer || (!!this.message && !!this.message.getSignature()), - "Signing function is missing." - ); - validator.require(!!this.buildTransactionFunction, "Transaction builder is missing."); - } -} diff --git a/src/identity/hcs/message.ts b/src/identity/hcs/message.ts deleted file mode 100644 index cf5950f..0000000 --- a/src/identity/hcs/message.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Timestamp } from "@hashgraph/sdk"; -import Long from "long"; -import { TimestampUtils } from "../../utils/timestamp-utils"; - -export type Encrypter = (message: T) => T; -export type Decrypter = (message: T, consensusTime: Timestamp) => T; -export type Signer = (message: T) => T; - -export class Message { - private static serialVersionUID = Long.fromInt(1); - - protected timestamp: Timestamp; - - constructor() { - this.timestamp = TimestampUtils.now(); - } - - public getTimestamp(): Timestamp { - return this.timestamp; - } - - public toJsonTree(): any { - const result: any = {}; - result.timestamp = TimestampUtils.toJSON(this.timestamp); - return result; - } - - public toJSON(): string { - return JSON.stringify(this.toJsonTree()); - } - - public static fromJsonTree(tree: any, result?: Message): Message { - if (!result) result = new Message(); - result.timestamp = TimestampUtils.fromJson(tree.timestamp); - return result; - } - - public static fromJson(json: string): Message { - return Message.fromJsonTree(JSON.parse(json)); - } -} diff --git a/src/index.ts b/src/index.ts index 3ca6647..18466a9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,10 +22,7 @@ import { HcsDidMessage } from "./identity/hcs/did/hcs-did-message"; import { HcsDidTopicListener } from "./identity/hcs/did/hcs-did-topic-listener"; import { HcsDidTransaction } from "./identity/hcs/did/hcs-did-transaction"; import { JsonClass } from "./identity/hcs/json-class"; -import { Message } from "./identity/hcs/message"; import { MessageEnvelope } from "./identity/hcs/message-envelope"; -import { MessageListener } from "./identity/hcs/message-listener"; -import { MessageTransaction } from "./identity/hcs/message-transaction"; import { SerializableMirrorConsensusResponse } from "./identity/hcs/serializable-mirror-consensus-response"; import { ArraysUtils } from "./utils/arrays-utils"; import { Ed25519PubCodec } from "./utils/ed25519PubCodec"; @@ -61,10 +58,7 @@ export { HcsDidUpdateVerificationMethodEvent, HcsDidUpdateVerificationRelationshipEvent, JsonClass, - Message, MessageEnvelope, - MessageListener, - MessageTransaction, SerializableMirrorConsensusResponse, TimestampUtils, Validator, From 73c9ef2d01e885657b9186dc75d45e3c87dc439b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 11 Feb 2022 15:34:11 +0100 Subject: [PATCH 084/133] Move a few demo flow variables to config.js file --- README.md | 7 +++++++ demo/2_add_update_revoke_service.js | 12 +++--------- demo/2_add_update_revoke_verification_method.js | 12 +++--------- ...d_update_revoke_verification_relationship.js | 12 +++--------- demo/3_read_did_messages.js | 8 ++------ demo/4_resolve_did.js | 8 ++------ demo/5_change_did_ownership.js | 12 +++--------- demo/6_delete_did_document.js | 12 +++--------- demo/config.js | 17 +++++++++++++++++ 9 files changed, 43 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 46189ff..181aa84 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,13 @@ Sample demo step by step javascript example are available at [Demo Folder][demo- - OPERATOR_ID=0.0.xxxx - OPERATOR_KEY=302... +After running first step of the demo flow use printed out values to complete the `config.js` configuration file. + +- DID_IDENTIFIER=did:hedera:testnet:..._0.0.xxx +- DID_PRIVATE_KEY=302... + +That's it! You are set to execute other demo flows. + ## DID Generation & Registration ```javascript diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js index a3bcca4..8baa337 100644 --- a/demo/2_add_update_revoke_service.js +++ b/demo/2_add_update_revoke_service.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); async function main() { /** @@ -9,18 +9,12 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, OPERATOR_KEY); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const didPrivateKey = PrivateKey.fromString( - "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" - ); - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Add Service diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index 2d89b52..3c30221 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); async function main() { /** @@ -9,18 +9,12 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, OPERATOR_KEY); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const didPrivateKey = PrivateKey.fromString( - "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" - ); - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationMethodIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index 6565cbd..2d8be2f 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY, DID_PRIVATE_KEY, DID_IDENTIFIER } = require("./config"); async function main() { /** @@ -9,18 +9,12 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, OPERATOR_KEY); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const didPrivateKey = PrivateKey.fromString( - "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" - ); - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationRelationshipIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index bfd9460..f216c7e 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,5 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); +const { DID_IDENTIFIER } = require("./config"); async function main() { /** @@ -7,15 +8,10 @@ async function main() { */ const client = Client.forTestnet(); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; - /** * Build DID instance */ - const did = new HcsDid({ identifier: existingDIDIdentifier }); + const did = new HcsDid({ identifier: DID_IDENTIFIER }); /** * Read DID resolver setup diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index 14fa757..bb18922 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -1,5 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); +const { DID_IDENTIFIER } = require("./config"); async function main() { /** @@ -7,15 +8,10 @@ async function main() { */ const client = Client.forTestnet(); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; - /** * Build DID instance */ - const did = new HcsDid({ identifier: existingDIDIdentifier, client: client }); + const did = new HcsDid({ identifier: DID_IDENTIFIER, client: client }); /** * Resolve DID diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index ac5f514..5e4336e 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); async function main() { /** @@ -28,19 +28,13 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, OPERATOR_KEY); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const existingOwnerDIDPrivateKey = PrivateKey.fromString( - "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" - ); - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + const existingOwnerDIDPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ const registeredDid = new HcsDid({ - identifier: existingDIDIdentifier, + identifier: DID_IDENTIFIER, privateKey: existingOwnerDIDPrivateKey, client: client, }); diff --git a/demo/6_delete_did_document.js b/demo/6_delete_did_document.js index dcd749d..1f53646 100644 --- a/demo/6_delete_did_document.js +++ b/demo/6_delete_did_document.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); async function main() { /** @@ -10,18 +10,12 @@ async function main() { const client = Client.forTestnet(); client.setOperator(OPERATOR_ID, privateKey); - /** - * CHANGE IT. use values from step 1: registered DID console output - */ - const didPrivateKey = PrivateKey.fromString( - "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" - ); - const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const did = new HcsDid({ identifier: existingDIDIdentifier, privateKey: didPrivateKey, client: client }); + const did = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Delete DID diff --git a/demo/config.js b/demo/config.js index be8f249..202918b 100644 --- a/demo/config.js +++ b/demo/config.js @@ -5,6 +5,7 @@ module.exports = { * Account that is going to pay for the demo */ OPERATOR_ID: "xxx", + /** * Account private key */ @@ -14,4 +15,20 @@ module.exports = { * Fix Transaction Fee */ MAX_TRANSACTION_FEE: new Hbar(2), + + /** + * =============================================================================================================================== + * IMPORTANT: after running step 1, generated DID identifier and private key value please put below so later steps can be executed + * =============================================================================================================================== + */ + + /** + * DID document identifier + */ + DID_IDENTIFIER: "did:hedera:testnet:...", + + /** + * DID private key + */ + DID_PRIVATE_KEY: "302e...", }; From 056703f8ed7c5792a6f60ef5ba8210d8b6f200c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 11 Feb 2022 15:46:26 +0100 Subject: [PATCH 085/133] #changeOwner method no longer requires did of the current did owner --- README.md | 1 - demo/5_change_did_ownership.js | 1 - src/identity/hcs/did/hcs-did.ts | 8 ++++++-- test/integration/hcs-did.test.ts | 5 ----- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 181aa84..9c25b4f 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,6 @@ const newOwnerIdentifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9 * Change ownership */ await registeredDid.changeOwner({ - id: registeredDid.getIdentifier(), controller: newOwnerIdentifier, newPrivateKey: newOwnerDidPrivateKey, }); diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index 5e4336e..aff7d98 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -49,7 +49,6 @@ async function main() { * Change ownership */ await registeredDid.changeOwner({ - id: registeredDid.getIdentifier(), controller: newOwnerIdentifier, newPrivateKey: newOwnerDidPrivateKey, }); diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 0527383..eeea6af 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -111,7 +111,7 @@ export class HcsDid { return this; } - public async changeOwner(args: { id: string; controller: string; newPrivateKey: PrivateKey }) { + public async changeOwner(args: { controller: string; newPrivateKey: PrivateKey }) { if (!this.identifier) { throw new Error("DID is not registered"); } @@ -148,7 +148,11 @@ export class HcsDid { */ await this.submitTransaction( DidMethodOperation.UPDATE, - new HcsDidUpdateDidOwnerEvent(args.id + "#did-root-key", args.controller, args.newPrivateKey.publicKey), + new HcsDidUpdateDidOwnerEvent( + this.getIdentifier() + "#did-root-key", + args.controller, + args.newPrivateKey.publicKey + ), this.privateKey ); return this; diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 3908c70..81fe9c4 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -243,7 +243,6 @@ describe("HcsDid", () => { let error = null; try { await did.changeOwner({ - id: docIdentifier, controller: newOwnerIdentifier, newPrivateKey: PrivateKey.generate(), }); @@ -263,7 +262,6 @@ describe("HcsDid", () => { let error = null; try { await did.changeOwner({ - id: docIdentifier, controller: newOwnerIdentifier, newPrivateKey: PrivateKey.generate(), }); @@ -284,7 +282,6 @@ describe("HcsDid", () => { let error = null; try { await did.changeOwner({ - id: docIdentifier, controller: newOwnerIdentifier, newPrivateKey: PrivateKey.generate(), }); @@ -306,7 +303,6 @@ describe("HcsDid", () => { let error = null; try { await did.changeOwner({ - id: docIdentifier, controller: newOwnerIdentifier, newPrivateKey: null, }); @@ -328,7 +324,6 @@ describe("HcsDid", () => { await did.register(); await did.changeOwner({ - id: did.getIdentifier(), controller: newOwnerIdentifier, newPrivateKey: newDidPrivateKey, }); From 9770821f096f68dc8fbaf92017046feb1b9dd30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Fri, 11 Feb 2022 16:01:45 +0100 Subject: [PATCH 086/133] Refactoring --- src/identity/did-document.ts | 77 +++++-------------- .../owner/hcs-did-create-did-owner-event.ts | 9 +++ .../service/hcs-did-create-service-event.ts | 8 ++ ...cs-did-create-verification-method-event.ts | 9 +++ ...-create-verification-relationship-event.ts | 9 +++ 5 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index b4fe1dc..4f52819 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -128,10 +128,7 @@ export class DidDocument { this.processDeleteMessage(msg); return; default: - /** - * TODO: for debugging - later we should probably try to ignore such messages - */ - throw new Error("Not supported operation detected!"); + console.warn(`Operation ${msg.getOperation()} is not supported. Event will be ignored...`); } }); } @@ -145,25 +142,14 @@ export class DidDocument { console.warn(`DID owner is already registered: ${this.controller}. Event will be ignored...`); return; } - - this.controller = { - id: event.getId(), - type: (event as HcsDidCreateDidOwnerEvent).getType(), - controller: (event as HcsDidCreateDidOwnerEvent).getController(), - publicKeyMultibase: (event as HcsDidCreateDidOwnerEvent).getPublicKeyMultibase(), - }; + this.controller = (event as HcsDidCreateDidOwnerEvent).getOwnerDef(); return; case HcsDidEventTargetName.SERVICE: if (this.services.has(event.getId())) { console.warn(`Duplicate create Service event ID: ${event.getId()}. Event will be ignored...`); return; } - - this.services.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidCreateServiceEvent).getType(), - serviceEndpoint: (event as HcsDidCreateServiceEvent).getServiceEndpoint(), - }); + this.services.set(event.getId(), (event as HcsDidCreateServiceEvent).getServiceDef()); return; case HcsDidEventTargetName.VERIFICATION_METHOD: if (this.verificationMethods.has(event.getId())) { @@ -173,12 +159,10 @@ export class DidDocument { return; } - this.verificationMethods.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidCreateVerificationMethodEvent).getType(), - controller: (event as HcsDidCreateVerificationMethodEvent).getController(), - publicKeyMultibase: (event as HcsDidCreateVerificationMethodEvent).getPublicKeyMultibase(), - }); + this.verificationMethods.set( + event.getId(), + (event as HcsDidCreateVerificationMethodEvent).getVerificationMethodDef() + ); return; case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidCreateVerificationRelationshipEvent).getRelationshipType(); @@ -194,14 +178,10 @@ export class DidDocument { this.verificationRelationships[type].push(event.getId()); if (!this.verificationMethods.has(event.getId())) { - this.verificationMethods.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidCreateVerificationRelationshipEvent).getType(), - controller: (event as HcsDidCreateVerificationRelationshipEvent).getController(), - publicKeyMultibase: ( - event as HcsDidCreateVerificationRelationshipEvent - ).getPublicKeyMultibase(), - }); + this.verificationMethods.set( + event.getId(), + (event as HcsDidCreateVerificationRelationshipEvent).getVerificationMethodDef() + ); } } else { console.warn( @@ -219,12 +199,7 @@ export class DidDocument { switch (event.targetName) { case HcsDidEventTargetName.DID_OWNER: - this.controller = { - id: event.getId(), - type: (event as HcsDidUpdateDidOwnerEvent).getType(), - controller: (event as HcsDidUpdateDidOwnerEvent).getController(), - publicKeyMultibase: (event as HcsDidUpdateDidOwnerEvent).getPublicKeyMultibase(), - }; + this.controller = (event as HcsDidUpdateDidOwnerEvent).getOwnerDef(); return; case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { @@ -233,11 +208,7 @@ export class DidDocument { ); return; } - this.services.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidUpdateServiceEvent).getType(), - serviceEndpoint: (event as HcsDidUpdateServiceEvent).getServiceEndpoint(), - }); + this.services.set(event.getId(), (event as HcsDidUpdateServiceEvent).getServiceDef()); return; case HcsDidEventTargetName.VERIFICATION_METHOD: if (!this.verificationMethods.has(event.getId())) { @@ -247,12 +218,10 @@ export class DidDocument { return; } - this.verificationMethods.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidUpdateVerificationMethodEvent).getType(), - controller: (event as HcsDidUpdateVerificationMethodEvent).getController(), - publicKeyMultibase: (event as HcsDidUpdateVerificationMethodEvent).getPublicKeyMultibase(), - }); + this.verificationMethods.set( + event.getId(), + (event as HcsDidUpdateVerificationMethodEvent).getVerificationMethodDef() + ); return; case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); @@ -265,14 +234,10 @@ export class DidDocument { return; } - this.verificationMethods.set(event.getId(), { - id: event.getId(), - type: (event as HcsDidUpdateVerificationRelationshipEvent).getType(), - controller: (event as HcsDidUpdateVerificationRelationshipEvent).getController(), - publicKeyMultibase: ( - event as HcsDidUpdateVerificationRelationshipEvent - ).getPublicKeyMultibase(), - }); + this.verificationMethods.set( + event.getId(), + (event as HcsDidUpdateVerificationRelationshipEvent).getVerificationMethodDef() + ); } else { console.warn( `Update verificationRelationship event with type ${type} is not supported. Event will be ignored...` diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 3eec216..02810ba 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -49,6 +49,15 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { return Hashing.multibase.encode(this.getPublicKey().toBytes()); } + public getOwnerDef() { + return { + id: this.getId(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }; + } + public toJsonTree() { return { [this.targetName]: { diff --git a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index 82820b6..cfd5842 100644 --- a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -37,6 +37,14 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { return this.serviceEndpoint; } + public getServiceDef() { + return { + id: this.getId(), + type: this.getType(), + serviceEndpoint: this.getServiceEndpoint(), + }; + } + public toJsonTree() { return { [this.targetName]: { diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index 3f6beec..14b9671 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -49,6 +49,15 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { return Hashing.multibase.encode(this.getPublicKey().toBytes()); } + public getVerificationMethodDef() { + return { + id: this.getId(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }; + } + public toJsonTree() { return { [this.targetName]: { diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index 7eb3858..367aadd 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -61,6 +61,15 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { return Hashing.multibase.encode(this.getPublicKey().toBytes()); } + public getVerificationMethodDef() { + return { + id: this.getId(), + type: this.getType(), + controller: this.getController(), + publicKeyMultibase: this.getPublicKeyMultibase(), + }; + } + public toJsonTree() { return { [this.targetName]: { From 31e0ec29bf976ff42fe77f888558041d21e72fe2 Mon Sep 17 00:00:00 2001 From: Jan Vereecken Date: Sun, 13 Feb 2022 09:08:46 +0100 Subject: [PATCH 087/133] Upgrade @hashgraph/sdk dependency --- package-lock.json | 360 ++++++++++++++++++++++++++++------------------ package.json | 4 +- 2 files changed, 221 insertions(+), 143 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddf4569..047b9fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.1", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "^2.0.20", + "@hashgraph/sdk": "^2.8", "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", @@ -611,39 +611,57 @@ "dev": true }, "node_modules/@grpc/grpc-js": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", - "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", + "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", "dependencies": { + "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" }, "engines": { "node": "^8.13.0 || >=10.10.0" } }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", + "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@hashgraph/cryptography": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", - "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", + "version": "1.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.0-beta.5.tgz", + "integrity": "sha512-Z2JprApRwQceOSCE8tjrIqfVf8/ZzT6UTHM/YGjzjMHfPfOVW3GgT8QhpRTb4U82AQKUa4FbfPLhXwM0W5ZS4w==", "dependencies": { - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", "bignumber.js": "^9.0.1", "crypto-js": "^4.0.0", + "elliptic": "^6.5.4", "expo-crypto": "^9.2.0", "expo-random": "^11.2.0", - "fastestsmallesttextencoderdecoder": "^1.0.22", "js-base64": "^3.6.1", - "tweetnacl": "^1.0.3" + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@hashgraph/proto": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", - "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.2.tgz", + "integrity": "sha512-kuSZrKL6rvrqHltj+ZNr0zLsXqBJpVkchTBU7Wa++2Vzr7iuaH4kTKOozOcNKVgVDP8tEImOOP0DcyOb1t7VPQ==", "dependencies": { "protobufjs": "^6.11.2" }, @@ -652,18 +670,16 @@ } }, "node_modules/@hashgraph/sdk": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", - "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", - "dependencies": { - "@grpc/grpc-js": "^1.3.4", - "@hashgraph/cryptography": "^1.0.20", - "@hashgraph/proto": "1.1.9", - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "js-base64": "^3.6.1", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.8.0.tgz", + "integrity": "sha512-uvciHsqvwgim+uUmfybVXr0EuBDncEQLLU6GI3wXwbXKzWTge4dw4JaEME+w4nvuaQ1p2uw3Feicy31mbH++PA==", + "dependencies": { + "@grpc/grpc-js": "^1.5.1", + "@hashgraph/cryptography": "^1.1.0-beta.5", + "@hashgraph/proto": "2.1.2", + "bignumber.js": "^9.0.2", + "crypto-js": "^4.1.1", + "js-base64": "^3.7.2", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" @@ -1179,11 +1195,6 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/crypto-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", - "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" - }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -1249,11 +1260,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "node_modules/@types/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" - }, "node_modules/@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -1426,7 +1432,6 @@ "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" } @@ -1435,7 +1440,6 @@ "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" }, @@ -1583,9 +1587,9 @@ ] }, "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", "engines": { "node": "*" } @@ -1599,6 +1603,11 @@ "node": ">=8" } }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/boxen": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", @@ -1668,6 +1677,11 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -1880,7 +1894,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -1916,7 +1929,6 @@ "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" }, @@ -1927,8 +1939,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2195,6 +2206,20 @@ "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", "dev": true }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -2210,8 +2235,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -2226,7 +2250,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -2377,11 +2400,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" - }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -2456,7 +2474,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2596,6 +2613,25 @@ "node": ">=8" } }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -2724,8 +2760,7 @@ "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 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.7", @@ -2782,7 +2817,6 @@ "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" } @@ -3607,9 +3641,9 @@ } }, "node_modules/js-base64": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", - "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -3754,6 +3788,11 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -3883,6 +3922,16 @@ "node": ">=4" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -4468,7 +4517,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4697,7 +4745,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4711,7 +4758,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.0" }, @@ -5283,7 +5329,6 @@ "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", @@ -5360,7 +5405,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -5375,7 +5419,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -5393,7 +5436,6 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, "engines": { "node": ">=10" } @@ -5842,50 +5884,60 @@ "dev": true }, "@grpc/grpc-js": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", - "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", + "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", "requires": { + "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" } }, + "@grpc/proto-loader": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", + "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + } + }, "@hashgraph/cryptography": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.0.20.tgz", - "integrity": "sha512-rdKKnENJfs0gsqAtY+7nzpG9TQshtnf+F3/PdH8z+qdy4mo4RSULBMc55FkWWNZLnoA4/34wEW8kohjFEzsLRA==", + "version": "1.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.0-beta.5.tgz", + "integrity": "sha512-Z2JprApRwQceOSCE8tjrIqfVf8/ZzT6UTHM/YGjzjMHfPfOVW3GgT8QhpRTb4U82AQKUa4FbfPLhXwM0W5ZS4w==", "requires": { - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", "bignumber.js": "^9.0.1", "crypto-js": "^4.0.0", + "elliptic": "^6.5.4", "expo-crypto": "^9.2.0", "expo-random": "^11.2.0", - "fastestsmallesttextencoderdecoder": "^1.0.22", "js-base64": "^3.6.1", - "tweetnacl": "^1.0.3" + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" } }, "@hashgraph/proto": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-1.1.9.tgz", - "integrity": "sha512-BOY5LD8NCjFot0EFXla2ZX8Q7UE94ZDQoSKXK/XVwlLgcMNSArdIPfK4zy4EBvLZnWV9ACdo/4szDuVyCqvkrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.2.tgz", + "integrity": "sha512-kuSZrKL6rvrqHltj+ZNr0zLsXqBJpVkchTBU7Wa++2Vzr7iuaH4kTKOozOcNKVgVDP8tEImOOP0DcyOb1t7VPQ==", "requires": { "protobufjs": "^6.11.2" } }, "@hashgraph/sdk": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.0.29.tgz", - "integrity": "sha512-QZuzdI1jKZL2BkL7fkVA4dIqGKDVLM7BlSGoizHY0tuwSvY533bCTQRWxdlq8itR1VgzZ1iKwcSS9COwPGkqvw==", - "requires": { - "@grpc/grpc-js": "^1.3.4", - "@hashgraph/cryptography": "^1.0.20", - "@hashgraph/proto": "1.1.9", - "@types/crypto-js": "^4.0.2", - "@types/utf8": "^3.0.0", - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "js-base64": "^3.6.1", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.8.0.tgz", + "integrity": "sha512-uvciHsqvwgim+uUmfybVXr0EuBDncEQLLU6GI3wXwbXKzWTge4dw4JaEME+w4nvuaQ1p2uw3Feicy31mbH++PA==", + "requires": { + "@grpc/grpc-js": "^1.5.1", + "@hashgraph/cryptography": "^1.1.0-beta.5", + "@hashgraph/proto": "2.1.2", + "bignumber.js": "^9.0.2", + "crypto-js": "^4.1.1", + "js-base64": "^3.7.2", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" @@ -6315,11 +6367,6 @@ "@babel/types": "^7.3.0" } }, - "@types/crypto-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.2.tgz", - "integrity": "sha512-sCVniU+h3GcGqxOmng11BRvf9TfN9yIs8KKjB8C8d75W69cpTfZG80gau9yTx5SxF3gvHGbJhdESzzvnjtf3Og==" - }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -6385,11 +6432,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "@types/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-QrhvCktdm5wD48axAnjqSzPH9lOj0MiCYfMX6MSqGs2Jv+txwvdxviXiCEj8zSCWIEDU9SIJ7g9pU5KtxRgYSg==" - }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -6525,14 +6567,12 @@ "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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" } @@ -6636,9 +6676,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" }, "binary-extensions": { "version": "2.2.0", @@ -6646,6 +6686,11 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "boxen": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", @@ -6702,6 +6747,11 @@ "fill-range": "^7.0.1" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -6860,7 +6910,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6892,7 +6941,6 @@ "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" } @@ -6900,8 +6948,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -7123,6 +7170,20 @@ "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", "dev": true }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -7132,8 +7193,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "end-of-stream": { "version": "1.4.4", @@ -7147,8 +7207,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-goat": { "version": "2.1.1", @@ -7255,11 +7314,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" - }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -7317,8 +7371,7 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-package-type": { "version": "0.1.0", @@ -7419,6 +7472,25 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -7517,8 +7589,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.7", @@ -7562,8 +7633,7 @@ "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -8208,9 +8278,9 @@ } }, "js-base64": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", - "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, "js-tokens": { "version": "4.0.0", @@ -8320,6 +8390,11 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8421,6 +8496,16 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -8870,8 +8955,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "resolve": { "version": "1.22.0", @@ -9047,7 +9131,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9058,7 +9141,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -9482,7 +9564,6 @@ "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", @@ -9535,8 +9616,7 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -9548,7 +9628,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9562,8 +9641,7 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" } } } diff --git a/package.json b/package.json index e0f8e9a..835cb9a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "npm": ">=8.1.2", "node": ">=16.13.1" }, - "description": "Support for the Hedera Hashgraph DID Method and Verifiable Credentials on the Hedera JavaScript/TypeScript SDK", + "description": "Support for the Hedera Hashgraph DID Method on the Hedera JavaScript/TypeScript SDK", "main": "dist/index.js", "module": "dist/index.js", "files": [ @@ -43,7 +43,7 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "^2.0.20", + "@hashgraph/sdk": "^2.8", "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", From 8016d968456c4863c498948300bd0312743a4c1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 14 Feb 2022 14:57:50 +0100 Subject: [PATCH 088/133] Update did resolve result to be more inline with https://w3c-ccg.github.io/did-resolution/#output-documentmetadata --- src/identity/did-document.ts | 81 +++++- test/integration/hcs-did.test.ts | 28 +-- test/unit/did-document.test.ts | 418 +++++++++++++++++++------------ 3 files changed, 351 insertions(+), 176 deletions(-) diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 4f52819..20bc170 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -15,10 +15,38 @@ import { HcsDidCreateVerificationRelationshipEvent } from "./hcs/did/event/verif import { HcsDidRevokeVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event"; import { HcsDidUpdateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; +export enum DidResolveError { + INVALID_DID = "invalidDid", + NOT_FOUND = "notFound", + REPRESENTATION_NOT_SUPPORTED = "representationNotSupported", +} + export class DidDocument { private readonly id: string; private readonly context: string; + /** + * TODO: at the moment error is no where to bet set. + * Probably more resolve logic should be moved here so it could be used independently from HcsDid class. + * This way error handling could be implemented here too. + */ + private resolutionMetadata: { + contentType: string; + error?: DidResolveError; + } = { contentType: "application/did+ld+json", error: undefined }; + + private documentMetadata: { + created: string; + updated: string; + deactivated: boolean; + versionId: number; + } = { + created: undefined, + updated: undefined, + deactivated: false, + versionId: undefined, + }; + private controller: any; private services: Map = new Map(); private verificationMethods: Map = new Map(); @@ -96,13 +124,50 @@ export class DidDocument { rootObject[DidDocumentJsonProperties.SERVICE] = [...Array.from(this.services.values())]; } - return rootObject; + return { + "@context": "https://w3id.org/did-resolution/v1", + didDocument: rootObject, + didResolutionMetadata: this.resolutionMetadata, + didDocumentMetadata: this.documentMetadata, + }; } public toJSON(): string { return JSON.stringify(this.toJsonTree()); } + private setDocumentActivated(message: HcsDidMessage): void { + const date = message.getTimestamp().toDate(); + + this.documentMetadata = { + ...this.documentMetadata, + created: date.toISOString(), + updated: date.toISOString(), + deactivated: false, + versionId: date.getTime(), + }; + } + + private setDocumentDeactivated(): void { + this.documentMetadata = { + ...this.documentMetadata, + created: undefined, + updated: undefined, + deactivated: true, + versionId: undefined, + }; + } + + private setDocumentUpdated(message: HcsDidMessage): void { + const date = message.getTimestamp().toDate(); + + this.documentMetadata = { + ...this.documentMetadata, + updated: date.toISOString(), + versionId: date.getTime(), + }; + } + private processMessages(messages: HcsDidMessage[]): void { messages.forEach((msg) => { if ( @@ -142,7 +207,9 @@ export class DidDocument { console.warn(`DID owner is already registered: ${this.controller}. Event will be ignored...`); return; } + this.controller = (event as HcsDidCreateDidOwnerEvent).getOwnerDef(); + this.setDocumentActivated(message); return; case HcsDidEventTargetName.SERVICE: if (this.services.has(event.getId())) { @@ -150,6 +217,7 @@ export class DidDocument { return; } this.services.set(event.getId(), (event as HcsDidCreateServiceEvent).getServiceDef()); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_METHOD: if (this.verificationMethods.has(event.getId())) { @@ -163,6 +231,7 @@ export class DidDocument { event.getId(), (event as HcsDidCreateVerificationMethodEvent).getVerificationMethodDef() ); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidCreateVerificationRelationshipEvent).getRelationshipType(); @@ -183,6 +252,7 @@ export class DidDocument { (event as HcsDidCreateVerificationRelationshipEvent).getVerificationMethodDef() ); } + this.setDocumentUpdated(message); } else { console.warn( `Create verificationRelationship event with type ${type} is not supported. Event will be ignored...` @@ -200,6 +270,7 @@ export class DidDocument { switch (event.targetName) { case HcsDidEventTargetName.DID_OWNER: this.controller = (event as HcsDidUpdateDidOwnerEvent).getOwnerDef(); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.SERVICE: if (!this.services.has(event.getId())) { @@ -209,6 +280,7 @@ export class DidDocument { return; } this.services.set(event.getId(), (event as HcsDidUpdateServiceEvent).getServiceDef()); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_METHOD: if (!this.verificationMethods.has(event.getId())) { @@ -222,6 +294,7 @@ export class DidDocument { event.getId(), (event as HcsDidUpdateVerificationMethodEvent).getVerificationMethodDef() ); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: const type = (event as HcsDidUpdateVerificationRelationshipEvent).getRelationshipType(); @@ -238,6 +311,7 @@ export class DidDocument { event.getId(), (event as HcsDidUpdateVerificationRelationshipEvent).getVerificationMethodDef() ); + this.setDocumentUpdated(message); } else { console.warn( `Update verificationRelationship event with type ${type} is not supported. Event will be ignored...` @@ -260,6 +334,7 @@ export class DidDocument { } this.services.delete(event.getId()); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_METHOD: if (!this.verificationMethods.has(event.getId())) { @@ -276,6 +351,7 @@ export class DidDocument { (id) => id !== event.getId() ); }); + this.setDocumentUpdated(message); return; case HcsDidEventTargetName.VERIFICATION_RELATIONSHIP: @@ -300,6 +376,8 @@ export class DidDocument { if (canRemoveVerificationMethod) { this.verificationMethods.delete(event.getId()); } + + this.setDocumentUpdated(message); } else { console.warn( `Revoke verificationRelationship event with type ${type} is not supported. Event will be ignored...` @@ -322,6 +400,7 @@ export class DidDocument { Object.keys(this.verificationRelationships).forEach( (relName) => (this.verificationRelationships[relName] = []) ); + this.setDocumentDeactivated(); return; default: console.warn(`Delete ${event.targetName} operation is not supported. Event will be ignored...`); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 81fe9c4..6d285b6 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -136,7 +136,7 @@ describe("HcsDid", () => { await did.register(); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -200,7 +200,7 @@ describe("HcsDid", () => { await did.register(); - let didJSON = (await did.resolve()).toJsonTree(); + let didJSON = (await did.resolve()).toJsonTree().didDocument; expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], @@ -218,7 +218,7 @@ describe("HcsDid", () => { await did.delete(); - didJSON = (await did.resolve()).toJsonTree(); + didJSON = (await did.resolve()).toJsonTree().didDocument; expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [], @@ -328,7 +328,7 @@ describe("HcsDid", () => { newPrivateKey: newDidPrivateKey, }); - const doc = (await did.resolve()).toJsonTree(); + const doc = (await did.resolve()).toJsonTree().didDocument; expect(doc).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -427,7 +427,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -474,7 +474,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -518,7 +518,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -561,7 +561,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -658,7 +658,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -718,7 +718,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -773,7 +773,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -876,7 +876,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -930,7 +930,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -980,7 +980,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + const didDocument = didDoc.toJsonTree().didDocument; expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index f6ffba8..fd5f99b 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -24,11 +24,23 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, []); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [], - authentication: [], - id: identifier, - verificationMethod: [], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: undefined, + deactivated: false, + updated: undefined, + versionId: undefined, + }, }); }); @@ -60,25 +72,37 @@ describe("DidDocument", () => { ]); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - id: identifier, - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - service: [ - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + id: identifier, + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); @@ -93,18 +117,30 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - id: identifier, - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + id: identifier, + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); @@ -120,11 +156,23 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [], - authentication: [], - id: identifier, - verificationMethod: [], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: undefined, + deactivated: true, + updated: undefined, + versionId: undefined, + }, }); }); @@ -164,26 +212,38 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${otherOwnerIdentifier}#did-root-key`], - authentication: [`${otherOwnerIdentifier}#did-root-key`], - capabilityDelegation: [`${identifier}#key-2`], - controller: otherOwnerIdentifier, - id: identifier, - verificationMethod: [ - { - controller: otherOwnerIdentifier, - id: `${otherOwnerIdentifier}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${otherOwnerIdentifier}#did-root-key`], + authentication: [`${otherOwnerIdentifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + controller: otherOwnerIdentifier, + id: identifier, + verificationMethod: [ + { + controller: otherOwnerIdentifier, + id: `${otherOwnerIdentifier}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); @@ -231,38 +291,50 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - capabilityDelegation: [`${identifier}#key-2`], - id: identifier, - service: [ - { - id: `${identifier}#service-1`, - serviceEndpoint: "https://test.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://test.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); @@ -364,49 +436,61 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], - capabilityDelegation: [`${identifier}#key-2`], - id: identifier, - service: [ - { - id: `${identifier}#service-1`, - serviceEndpoint: "https://new.test.identity.com", - type: "LinkedDomains", - }, - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://new.test.identity.com", + type: "LinkedDomains", + }, + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); @@ -505,31 +589,43 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], - id: identifier, - service: [ - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], + "@context": "https://w3id.org/did-resolution/v1", + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + id: identifier, + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + didDocumentMetadata: { + created: expect.anything(), + deactivated: false, + updated: expect.anything(), + versionId: expect.anything(), + }, }); }); }); From 3ce4d50e63d7c5fefbec8f485ac777913075f27e Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 15 Feb 2022 12:20:58 +1100 Subject: [PATCH 089/133] added change log and bump up package version --- CHANGELOG.md | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2727d2d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,126 @@ + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +# v1.0.0 + +## Removed + +* Generation of decentralized identifiers and creation of DID documents based on old [Hedera DID Method][did-method-spec] +* Creation of `identity networks` within `appnets`. +* Address book - a file on `Hedera File Service` that provides information about HCS topics and `appnet servers`. +* Creation and initialization of the `VC topic` - an HCS topic playing a role of verifiable credentials registry. +* Creation (publishing), update, deletion and resolution of DID documents in `appnet identity networks`. +* Issuance, revocation and status verification of `Verifiable Credentials`. + +## Added + +* Generation of decentralized identifiers and creation of DID documents based on new [Hedera DID Method][did-method-spec] + Creation and initialization of the DID registration on `HCS Private Topic` +* Create, update, revoke, deletion, and resolution of DID documents based on [DID Document Core Properties][did-core-prop] `event/log messages` recorded on `HCS Topic` +* Transferring ownership of DID identifier and DID Document to another party. +* Publishing **DID Events Messages** to resolve and validate **DID Document** + +[did-core-prop]: https://w3c.github.io/did-core/#core-properties +[did-method-spec]: https://github.com/hashgraph/did-method + +### DID API's + +* Generate & Register + + ```js + ... + const registeredDid = await did.register(); + ``` + +* Resolve + + ```js + ... + const didDoc = await registeredDid.resolve(); + ``` + +* Change Ownership + + ```js + ... + await registeredDid.changeOwner({ + controller: newOwnerIdentifier, + newPrivateKey: newOwnerDidPrivateKey, + }); + ``` + +* Create, Update and Revoke [DID Document Core Properties][did-core-prop] + * Service + + ```js + ... + await registeredDid.addService({ + id: serviceIdentifier + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + ... + await registeredDid.updateService({ + id: serviceIdentifier + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://test.com/did", + }); + ... + await registeredDid.revokeService({ + id: serviceIdentifier + "#service-1", + }); + ``` + +* Verification Method + + ```js + ... + await registeredDid.addVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", + type: "Ed25519VerificationKey2018", + controller: registeredDid.getIdentifier(), + publicKey: verificationMethodPublicKey, + }); + ... + await registeredDid.updateVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", + type: "Ed25519VerificationKey2018", + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationMethodPublicKey, + }); + ... + await registeredDid.revokeVerificationMethod({ + id: verificationMethodIdentifier + "#key-1", + }); + ``` + +* Verification Relationship + + ```js + ... + await registeredDid.addVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, + type: "Ed25519VerificationKey2018", + controller: registeredDid.getIdentifier(), + publicKey: verificationRelationshipPublicKey, + }); + ... + await registeredDid.updateVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, + type: "Ed25519VerificationKey2018", + controller: registeredDid.getIdentifier(), + publicKey: updatedVerificationRelationshipPublicKey, + }); + ... + await registeredDid.revokeVerificationRelationship({ + id: verificationRelationshipIdentifier + "#key-1", + relationshipType: verificationRelationshipType, + }); + ``` diff --git a/package.json b/package.json index 835cb9a..008ddb3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", + "version": "1.0.0", "engines": { "npm": ">=8.1.2", "node": ">=16.13.1" From 6a0022fe2b88e3a178c3ca8f70788e15bc3c63f8 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 15 Feb 2022 15:41:03 +1100 Subject: [PATCH 090/133] added did resolver package and resolver for universal resolver driver --- package-lock.json | 11 +++++ package.json | 3 +- src/identity/did-resolver.ts | 90 ++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/identity/did-resolver.ts diff --git a/package-lock.json b/package-lock.json index 047b9fc..18f268f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@hashgraph/sdk": "^2.8", + "did-resolver": "^3.1.5", "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", @@ -2152,6 +2153,11 @@ "node": ">=8" } }, + "node_modules/did-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", + "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + }, "node_modules/diff-sequences": { "version": "27.5.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", @@ -7126,6 +7132,11 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "did-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", + "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + }, "diff-sequences": { "version": "27.5.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", diff --git a/package.json b/package.json index 835cb9a..37f8861 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", - "varint": "^6.0.0" + "varint": "^6.0.0", + "did-resolver": "^3.1.5" } } diff --git a/src/identity/did-resolver.ts b/src/identity/did-resolver.ts new file mode 100644 index 0000000..a554585 --- /dev/null +++ b/src/identity/did-resolver.ts @@ -0,0 +1,90 @@ +import NodeClient from "@hashgraph/sdk/lib/client/NodeClient"; +import { DIDResolutionOptions, DIDResolutionResult, DIDResolver, ParsedDID, Resolvable } from "did-resolver"; +import { HcsDid } from "./hcs/did/hcs-did"; + +export enum Errors { + /** + * The resolver has failed to construct the DID document. + * This can be caused by a network issue, a wrong registry address or malformed logs while parsing the registry history. + * Please inspect the `DIDResolutionMetadata.message` to debug further. + */ + notFound = "notFound", + + /** + * The resolver does not know how to resolve the given DID. Most likely it is not a `did:hedera`. + */ + invalidDid = "invalidDid", + + /** + * The resolver is misconfigured or is being asked to resolve a DID anchored on an unknown network + */ + unknownNetwork = "unknownNetwork", +} + +export function getResolver(client: NodeClient): Record { + return new HederaDidResolver(client).build(); +} + +export class HederaDidResolver { + private client: NodeClient; + + constructor(client: NodeClient) { + this.client = client; + } + + async resolve( + did: string, + parsed: ParsedDID, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _unused: Resolvable, + options: DIDResolutionOptions + ): Promise { + let networkName, topicId, didIdString; + try { + [networkName, topicId, didIdString] = HcsDid.parseIdentifier(parsed.did); + } catch (e: any) { + return { + didResolutionMetadata: { + error: Errors.invalidDid, + message: `Not a valid did:hedera: ${parsed.id} \n ${e.toString()}`, + }, + didDocumentMetadata: {}, + didDocument: null, + }; + } + + //TODO: check network + + try { + const registeredDid = new HcsDid({ identifier: did, client: this.client }); + const { didDocument, deactivated, versionId, nextVersionId } = (await registeredDid.resolve()).toJsonTree(); + const status = deactivated ? { deactivated: true } : {}; + let versionMeta = { + versionId: versionId, + }; + let versionMetaNext = { + nextVersionId: nextVersionId, + }; + + return { + didDocumentMetadata: { ...status, ...versionMeta, ...versionMetaNext }, + didResolutionMetadata: { contentType: "application/did+ld+json" }, + didDocument, + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + return { + didResolutionMetadata: { + error: Errors.notFound, + message: e.toString(), // This is not in spec, nut may be helpful + }, + didDocumentMetadata: {}, + didDocument: null, + }; + } + } + + build(): Record { + return { hedera: this.resolve.bind(this) }; + } +} From 6c09baaca2540756642f893654cc74900472f471 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 15 Feb 2022 15:45:56 +1100 Subject: [PATCH 091/133] added resolver to index --- src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.ts b/src/index.ts index 18466a9..992f8ca 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,7 @@ import { DidDocument } from "./identity/did-document"; import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; +import { HederaDidResolver } from "./identity/did-resolver"; import { DidSyntax } from "./identity/did-syntax"; import { HcsDidDeleteEvent } from "./identity/hcs/did/event/document/hcs-did-delete-event"; import { HcsDidEventTargetName } from "./identity/hcs/did/event/hcs-did-event-target-name"; @@ -62,4 +63,5 @@ export { SerializableMirrorConsensusResponse, TimestampUtils, Validator, + HederaDidResolver, }; From b9bdd90f6eea6d36b962f6839ce4dff991751552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 15 Feb 2022 13:47:34 +0100 Subject: [PATCH 092/133] Introduce DidError; Resolver makes better decisions on error types; Cleanup DidDocument. --- src/identity/did-document.ts | 90 ++-- src/identity/did-error.ts | 18 + src/identity/did-parser.ts | 5 +- src/identity/did-resolver.ts | 69 +-- .../owner/hcs-did-create-did-owner-event.ts | 5 +- .../service/hcs-did-create-service-event.ts | 5 +- .../service/hcs-did-revoke-service-event.ts | 5 +- ...cs-did-create-verification-method-event.ts | 5 +- ...cs-did-revoke-verification-method-event.ts | 5 +- ...-create-verification-relationship-event.ts | 5 +- ...-revoke-verification-relationship-event.ts | 5 +- .../hcs/did/hcs-did-topic-listener.ts | 3 +- src/identity/hcs/did/hcs-did-transaction.ts | 7 +- src/identity/hcs/did/hcs-did.ts | 46 +- src/identity/hcs/message-envelope.ts | 7 +- src/index.ts | 7 +- src/utils/validator.ts | 4 +- test/integration/did-resolver.test.ts | 144 ++++++ test/integration/hcs-did.test.ts | 72 +-- test/unit/did-document.test.ts | 450 ++++++++---------- .../hcs-did-create-did-owner-event.test.ts | 10 +- .../hcs-did-update-did-owner-event.test.ts | 10 +- .../hcs-did-create-service-event.test.ts | 10 +- .../hcs-did-revoke-service-event.test.ts | 6 +- .../hcs-did-update-service-event.test.ts | 10 +- ...d-create-verification-method-event.test.ts | 12 +- ...d-revoke-verification-method-event.test.ts | 6 +- ...d-update-verification-method-event.test.ts | 12 +- ...te-verification-relationship-event.test.ts | 14 +- ...ke-verification-relationship-event.test.ts | 8 +- ...te-verification-relationship-event.test.ts | 14 +- test/unit/hsc-did.test.ts | 16 +- 32 files changed, 601 insertions(+), 484 deletions(-) create mode 100644 src/identity/did-error.ts create mode 100644 test/integration/did-resolver.test.ts diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 20bc170..f41a051 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -1,3 +1,4 @@ +import { Timestamp } from "@hashgraph/sdk"; import { DidMethodOperation, HcsDidCreateDidOwnerEvent, @@ -15,37 +16,14 @@ import { HcsDidCreateVerificationRelationshipEvent } from "./hcs/did/event/verif import { HcsDidRevokeVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event"; import { HcsDidUpdateVerificationRelationshipEvent } from "./hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event"; -export enum DidResolveError { - INVALID_DID = "invalidDid", - NOT_FOUND = "notFound", - REPRESENTATION_NOT_SUPPORTED = "representationNotSupported", -} - export class DidDocument { private readonly id: string; private readonly context: string; - /** - * TODO: at the moment error is no where to bet set. - * Probably more resolve logic should be moved here so it could be used independently from HcsDid class. - * This way error handling could be implemented here too. - */ - private resolutionMetadata: { - contentType: string; - error?: DidResolveError; - } = { contentType: "application/did+ld+json", error: undefined }; - - private documentMetadata: { - created: string; - updated: string; - deactivated: boolean; - versionId: number; - } = { - created: undefined, - updated: undefined, - deactivated: false, - versionId: undefined, - }; + private created: Timestamp = null; + private updated: Timestamp = null; + private versionId: string = null; + private deactivated: boolean = false; private controller: any; private services: Map = new Map(); @@ -78,6 +56,22 @@ export class DidDocument { return this.id; } + public getCreated() { + return this.created; + } + + public getUpdated() { + return this.updated; + } + + public getVersionId() { + return this.versionId; + } + + public getDeactivated() { + return this.deactivated; + } + public toJsonTree(): any { let rootObject = {}; @@ -124,12 +118,7 @@ export class DidDocument { rootObject[DidDocumentJsonProperties.SERVICE] = [...Array.from(this.services.values())]; } - return { - "@context": "https://w3id.org/did-resolution/v1", - didDocument: rootObject, - didResolutionMetadata: this.resolutionMetadata, - didDocumentMetadata: this.documentMetadata, - }; + return rootObject; } public toJSON(): string { @@ -137,35 +126,26 @@ export class DidDocument { } private setDocumentActivated(message: HcsDidMessage): void { - const date = message.getTimestamp().toDate(); - - this.documentMetadata = { - ...this.documentMetadata, - created: date.toISOString(), - updated: date.toISOString(), - deactivated: false, - versionId: date.getTime(), - }; + const timestamp = message.getTimestamp(); + + this.created = timestamp; + this.updated = timestamp; + this.deactivated = false; + this.versionId = timestamp.toDate().getTime().toString(); } private setDocumentDeactivated(): void { - this.documentMetadata = { - ...this.documentMetadata, - created: undefined, - updated: undefined, - deactivated: true, - versionId: undefined, - }; + this.created = null; + this.updated = null; + this.deactivated = true; + this.versionId = null; } private setDocumentUpdated(message: HcsDidMessage): void { - const date = message.getTimestamp().toDate(); + const timestamp = message.getTimestamp(); - this.documentMetadata = { - ...this.documentMetadata, - updated: date.toISOString(), - versionId: date.getTime(), - }; + this.updated = timestamp; + this.versionId = timestamp.toDate().getTime().toString(); } private processMessages(messages: HcsDidMessage[]): void { diff --git a/src/identity/did-error.ts b/src/identity/did-error.ts new file mode 100644 index 0000000..368da91 --- /dev/null +++ b/src/identity/did-error.ts @@ -0,0 +1,18 @@ +export enum DidErrorCode { + GENERIC = "generic", + INVALID_DID_STRING = "invalid_did_string", + INVALID_NETWORK = "invalid_network", + /** + * DID_NOT_FOUND is not thrown anywhere at the moment + */ + DID_NOT_FOUND = "did_not_found", +} + +export class DidError extends Error { + public code: DidErrorCode; + + constructor(message: string, code: DidErrorCode = DidErrorCode.GENERIC) { + super(message); + this.code = code; + } +} diff --git a/src/identity/did-parser.ts b/src/identity/did-parser.ts index ea30354..ff53741 100644 --- a/src/identity/did-parser.ts +++ b/src/identity/did-parser.ts @@ -1,3 +1,4 @@ +import { DidError } from "./did-error"; import { DidSyntax } from "./did-syntax"; import { HcsDid } from "./hcs/did/hcs-did"; @@ -11,13 +12,13 @@ export class DidParser { public static parse(didString: string): HcsDid { const methodIndex = DidSyntax.DID_PREFIX.length + 1; if (!didString || didString.length <= methodIndex) { - throw new Error("DID string cannot be null"); + throw new DidError("DID string cannot be null"); } if (didString.startsWith(HcsDid.DID_METHOD + DidSyntax.DID_METHOD_SEPARATOR, methodIndex)) { return new HcsDid({ identifier: didString }); } else { - throw new Error("DID string is invalid."); + throw new DidError("DID string is invalid."); } } } diff --git a/src/identity/did-resolver.ts b/src/identity/did-resolver.ts index a554585..67f71a5 100644 --- a/src/identity/did-resolver.ts +++ b/src/identity/did-resolver.ts @@ -1,5 +1,13 @@ import NodeClient from "@hashgraph/sdk/lib/client/NodeClient"; -import { DIDResolutionOptions, DIDResolutionResult, DIDResolver, ParsedDID, Resolvable } from "did-resolver"; +import { + DIDDocumentMetadata, + DIDResolutionOptions, + DIDResolutionResult, + DIDResolver, + ParsedDID, + Resolvable, +} from "did-resolver"; +import { DidErrorCode } from ".."; import { HcsDid } from "./hcs/did/hcs-did"; export enum Errors { @@ -34,49 +42,39 @@ export class HederaDidResolver { async resolve( did: string, - parsed: ParsedDID, - // eslint-disable-next-line @typescript-eslint/no-unused-vars + _parsed: ParsedDID, _unused: Resolvable, options: DIDResolutionOptions ): Promise { - let networkName, topicId, didIdString; - try { - [networkName, topicId, didIdString] = HcsDid.parseIdentifier(parsed.did); - } catch (e: any) { - return { - didResolutionMetadata: { - error: Errors.invalidDid, - message: `Not a valid did:hedera: ${parsed.id} \n ${e.toString()}`, - }, - didDocumentMetadata: {}, - didDocument: null, - }; - } - //TODO: check network try { const registeredDid = new HcsDid({ identifier: did, client: this.client }); - const { didDocument, deactivated, versionId, nextVersionId } = (await registeredDid.resolve()).toJsonTree(); - const status = deactivated ? { deactivated: true } : {}; - let versionMeta = { - versionId: versionId, - }; - let versionMetaNext = { - nextVersionId: nextVersionId, + const didDocument = await registeredDid.resolve(); + const status: Partial = didDocument.getDeactivated() ? { deactivated: true } : {}; + + let documentMeta: Partial = { + versionId: didDocument.getVersionId(), }; + if (!status.deactivated) { + documentMeta = { + ...documentMeta, + created: didDocument.getCreated().toDate().toISOString(), + updated: didDocument.getUpdated().toDate().toISOString(), + }; + } + return { - didDocumentMetadata: { ...status, ...versionMeta, ...versionMetaNext }, + didDocumentMetadata: { ...status, ...documentMeta }, didResolutionMetadata: { contentType: "application/did+ld+json" }, - didDocument, + didDocument: didDocument.toJsonTree(), }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (e: any) { return { didResolutionMetadata: { - error: Errors.notFound, - message: e.toString(), // This is not in spec, nut may be helpful + error: this.getErrorCode(e), + message: e.toString(), // This is not in spec, but may be helpful }, didDocumentMetadata: {}, didDocument: null, @@ -87,4 +85,17 @@ export class HederaDidResolver { build(): Record { return { hedera: this.resolve.bind(this) }; } + + private getErrorCode(error: any): Errors { + switch (error?.code) { + case DidErrorCode.INVALID_DID_STRING: + return Errors.invalidDid; + case DidErrorCode.INVALID_NETWORK: + return Errors.unknownNetwork; + case DidErrorCode.DID_NOT_FOUND: + return Errors.notFound; + default: + return Errors.notFound; + } + } } diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index 02810ba..aeef7ff 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -1,5 +1,6 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../../utils/hashing"; +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; @@ -17,11 +18,11 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { super(); if (!id || !controller || !publicKey) { - throw new Error("Validation failed. DID Owner args are missing"); + throw new DidError("Validation failed. DID Owner args are missing"); } if (!this.isOwnerEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#did-root-key"); + throw new DidError("Event ID is invalid. Expected format: {did}#did-root-key"); } this.id = id; diff --git a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts index cfd5842..ff3261e 100644 --- a/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-create-service-event.ts @@ -1,3 +1,4 @@ +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { ServiceTypes } from "./types"; @@ -13,11 +14,11 @@ export class HcsDidCreateServiceEvent extends HcsDidEvent { super(); if (!id || !type || !serviceEndpoint) { - throw new Error("Validation failed. Services args are missing"); + throw new DidError("Validation failed. Services args are missing"); } if (!this.isServiceEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#service-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#service-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts index 679a83c..5eb79ef 100644 --- a/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts +++ b/src/identity/hcs/did/event/service/hcs-did-revoke-service-event.ts @@ -1,3 +1,4 @@ +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; @@ -10,11 +11,11 @@ export class HcsDidRevokeServiceEvent extends HcsDidEvent { super(); if (!id) { - throw new Error("Validation failed. Services args are missing"); + throw new DidError("Validation failed. Services args are missing"); } if (!this.isServiceEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#service-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#service-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index 14b9671..6478823 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -1,5 +1,6 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../../utils/hashing"; +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationMethodSupportedKeyType } from "./types"; @@ -16,11 +17,11 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { super(); if (!id || !type || !controller || !publicKey) { - throw new Error("Validation failed. Verification Method args are missing"); + throw new DidError("Validation failed. Verification Method args are missing"); } if (!this.isKeyEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#key-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts index ff5b528..f422db0 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-revoke-verification-method-event.ts @@ -1,3 +1,4 @@ +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; @@ -10,11 +11,11 @@ export class HcsDidRevokeVerificationMethodEvent extends HcsDidEvent { super(); if (!id) { - throw new Error("Validation failed. Verification Method args are missing"); + throw new DidError("Validation failed. Verification Method args are missing"); } if (!this.isKeyEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#key-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index 367aadd..dc65dbd 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -1,5 +1,6 @@ import { PublicKey } from "@hashgraph/sdk"; import { Hashing } from "../../../../../utils/hashing"; +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationRelationshipSupportedKeyType, VerificationRelationshipType } from "./types"; @@ -23,11 +24,11 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { super(); if (!id || !relationshipType || !type || !controller || !publicKey) { - throw new Error("Validation failed. Verification Relationship args are missing"); + throw new DidError("Validation failed. Verification Relationship args are missing"); } if (!this.isKeyEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#key-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts index 73d4b83..580635f 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-revoke-verification-relationship-event.ts @@ -1,3 +1,4 @@ +import { DidError } from "../../../../did-error"; import { HcsDidEvent } from "../hcs-did-event"; import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; import { VerificationRelationshipType } from "./types"; @@ -12,11 +13,11 @@ export class HcsDidRevokeVerificationRelationshipEvent extends HcsDidEvent { super(); if (!id || !relationshipType) { - throw new Error("Validation failed. Verification Relationship args are missing"); + throw new DidError("Validation failed. Verification Relationship args are missing"); } if (!this.isKeyEventIdValid(id)) { - throw new Error("Event ID is invalid. Expected format: {did}#key-{integer}"); + throw new DidError("Event ID is invalid. Expected format: {did}#key-{integer}"); } this.id = id; diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 1ec13b9..41124bb 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -1,5 +1,6 @@ import { Client, Timestamp, TopicId, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; import SubscriptionHandle from "@hashgraph/sdk/lib/topic/SubscriptionHandle"; +import { DidError } from "../../did-error"; import { MessageEnvelope } from "../message-envelope"; import { HcsDidMessage } from "./hcs-did-message"; @@ -159,7 +160,7 @@ export class HcsDidTopicListener { if (this.errorHandler) { this.errorHandler(err); } else if (!this.ignoreErrors) { - throw new Error(err.message); + throw new DidError(err.message); } } diff --git a/src/identity/hcs/did/hcs-did-transaction.ts b/src/identity/hcs/did/hcs-did-transaction.ts index 40223c9..fff096b 100644 --- a/src/identity/hcs/did/hcs-did-transaction.ts +++ b/src/identity/hcs/did/hcs-did-transaction.ts @@ -2,6 +2,7 @@ import { Client, Timestamp, TopicId, TopicMessageSubmitTransaction, Transaction, import moment from "moment"; import { ArraysUtils } from "../../../utils/arrays-utils"; import { Validator } from "../../../utils/validator"; +import { DidError } from "../../did-error"; import { MessageEnvelope } from "../message-envelope"; import { HcsDidMessage, Signer } from "./hcs-did-message"; import { HcsDidTopicListener } from "./hcs-did-topic-listener"; @@ -35,7 +36,7 @@ export class HcsDidTransaction { this.message = message; this.executed = false; } else { - throw new Error("Invalid arguments"); + throw new DidError("Invalid arguments"); } } @@ -60,7 +61,7 @@ export class HcsDidTransaction { if (this.errorHandler) { this.errorHandler(err); } else { - throw new Error(err.message); + throw new DidError(err.message); } } @@ -146,7 +147,7 @@ export class HcsDidTransaction { return; } - this.handleError(new Error(reason + ": " + ArraysUtils.toString(response.contents))); + this.handleError(new DidError(reason + ": " + ArraysUtils.toString(response.contents))); this.listener.unsubscribe(); }) .subscribe(client, (msg) => { diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index eeea6af..672a14a 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -10,6 +10,7 @@ import { } from "@hashgraph/sdk"; import { Hashing } from "../../../utils/hashing"; import { DidDocument } from "../../did-document"; +import { DidError, DidErrorCode } from "../../did-error"; import { DidMethodOperation } from "../../did-method-operation"; import { DidSyntax } from "../../did-syntax"; import { MessageEnvelope } from "../message-envelope"; @@ -39,6 +40,7 @@ import { HcsDidTransaction } from "./hcs-did-transaction"; export class HcsDid { public static DID_METHOD = DidSyntax.Method.HEDERA_HCS; public static TRANSACTION_FEE = new Hbar(2); + public static READ_TOPIC_MESSAGES_TIMEOUT = 5000; protected client: Client; protected privateKey: PrivateKey; @@ -56,7 +58,7 @@ export class HcsDid { this.client = args.client; if (!this.identifier && !this.privateKey) { - throw new Error("identifier and privateKey cannot both be empty"); + throw new DidError("identifier and privateKey cannot both be empty"); } if (this.identifier) { @@ -77,7 +79,7 @@ export class HcsDid { await this.resolve(); if (this.document.hasOwner()) { - throw new Error("DID is already registered"); + throw new DidError("DID is already registered"); } } else { /** @@ -113,19 +115,19 @@ export class HcsDid { public async changeOwner(args: { controller: string; newPrivateKey: PrivateKey }) { if (!this.identifier) { - throw new Error("DID is not registered"); + throw new DidError("DID is not registered"); } this.validateClientConfig(); if (!args.newPrivateKey) { - throw new Error("newPrivateKey is missing"); + throw new DidError("newPrivateKey is missing"); } await this.resolve(); if (!this.document.hasOwner()) { - throw new Error("DID is not registered or was recently deleted. DID has to be registered first."); + throw new DidError("DID is not registered or was recently deleted. DID has to be registered first."); } /** @@ -160,7 +162,7 @@ export class HcsDid { public async delete() { if (!this.identifier) { - throw new Error("DID is not registered"); + throw new DidError("DID is not registered"); } this.validateClientConfig(); @@ -171,16 +173,16 @@ export class HcsDid { public async resolve(): Promise { if (!this.identifier) { - throw new Error("DID is not registered"); + throw new DidError("DID is not registered"); } if (!this.client) { - throw new Error("Client configuration is missing"); + throw new DidError("Client configuration is missing"); } return new Promise((resolve, reject) => { new HcsDidEventMessageResolver(this.topicId) - .setTimeout(3000) + .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) .whenFinished((messages) => { this.messages = messages; this.document = new DidDocument(this.identifier, this.messages); @@ -431,7 +433,7 @@ export class HcsDid { const [didPart, topicIdPart] = identifier.split(DidSyntax.DID_TOPIC_SEPARATOR); if (!topicIdPart) { - throw new Error("DID string is invalid: topic ID is missing"); + throw new DidError("DID string is invalid: topic ID is missing", DidErrorCode.INVALID_DID_STRING); } const topicId = TopicId.fromString(topicIdPart); @@ -439,40 +441,50 @@ export class HcsDid { const didParts = didPart.split(DidSyntax.DID_METHOD_SEPARATOR); if (didParts.shift() !== DidSyntax.DID_PREFIX) { - throw new Error("DID string is invalid: invalid prefix."); + throw new DidError("DID string is invalid: invalid prefix.", DidErrorCode.INVALID_DID_STRING); } const methodName = didParts.shift(); if (DidSyntax.Method.HEDERA_HCS !== methodName) { - throw new Error("DID string is invalid: invalid method name: " + methodName); + throw new DidError( + "DID string is invalid: invalid method name: " + methodName, + DidErrorCode.INVALID_DID_STRING + ); } try { const networkName = didParts.shift(); if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { - throw new Error("Invalid Hedera network."); + throw new DidError("DID string is invalid. Invalid Hedera network.", DidErrorCode.INVALID_NETWORK); } const didIdString = didParts.shift(); if (didIdString.length < 48 || didParts.shift()) { - throw new Error("DID string is invalid."); + throw new DidError( + "DID string is invalid. ID holds incorrect format.", + DidErrorCode.INVALID_DID_STRING + ); } return [networkName, topicId, didIdString]; } catch (e) { - throw new Error("DID string is invalid. " + e.message); + if (e instanceof DidError) { + throw e; + } + + throw new DidError("DID string is invalid. " + e.message, DidErrorCode.INVALID_DID_STRING); } } private validateClientConfig() { if (!this.privateKey) { - throw new Error("privateKey is missing"); + throw new DidError("privateKey is missing"); } if (!this.client) { - throw new Error("Client configuration is missing"); + throw new DidError("Client configuration is missing"); } } diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 9444eae..5551674 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -3,6 +3,7 @@ import { Base64 } from "js-base64"; import Long from "long"; import { HcsDidMessage } from "../.."; import { ArraysUtils } from "../../utils/arrays-utils"; +import { DidError } from "../did-error"; import { JsonClass } from "./json-class"; import { SerializableMirrorConsensusResponse } from "./serializable-mirror-consensus-response"; @@ -44,7 +45,7 @@ export class MessageEnvelope { this.message = message; } else { - throw new Error("Wrong arguments passed to constructor"); + throw new DidError("Wrong arguments passed to constructor"); } } @@ -56,11 +57,11 @@ export class MessageEnvelope { */ public sign(signer: SignFunction): Uint8Array { if (!signer) { - throw new Error("Signing function is not provided."); + throw new DidError("Signing function is not provided."); } if (this.signature) { - throw new Error("Message is already signed."); + throw new DidError("Message is already signed."); } const msgBytes = ArraysUtils.fromString(this.message.toJSON()); diff --git a/src/index.ts b/src/index.ts index 992f8ca..439de3d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import { DidDocument } from "./identity/did-document"; import { DidDocumentJsonProperties } from "./identity/did-document-json-properties"; +import { DidError, DidErrorCode } from "./identity/did-error"; import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { HederaDidResolver } from "./identity/did-resolver"; @@ -35,6 +36,8 @@ export { ArraysUtils, DidDocument, DidDocumentJsonProperties, + DidError, + DidErrorCode, DidMethodOperation, DidParser, DidSyntax, @@ -42,7 +45,6 @@ export { Hashing, HcsDid, HcsDidCreateDidOwnerEvent, - HcsDidUpdateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidCreateVerificationMethodEvent, HcsDidCreateVerificationRelationshipEvent, @@ -55,13 +57,14 @@ export { HcsDidRevokeVerificationRelationshipEvent, HcsDidTopicListener, HcsDidTransaction, + HcsDidUpdateDidOwnerEvent, HcsDidUpdateServiceEvent, HcsDidUpdateVerificationMethodEvent, HcsDidUpdateVerificationRelationshipEvent, + HederaDidResolver, JsonClass, MessageEnvelope, SerializableMirrorConsensusResponse, TimestampUtils, Validator, - HederaDidResolver, }; diff --git a/src/utils/validator.ts b/src/utils/validator.ts index 8c5ba0f..dc27945 100644 --- a/src/utils/validator.ts +++ b/src/utils/validator.ts @@ -1,3 +1,5 @@ +import { DidError } from "../identity/did-error"; + export class Validator { protected validationErrors: string[]; @@ -20,7 +22,7 @@ export class Validator { const errors = this.validationErrors; this.validationErrors = null; - throw new Error(prologue + ":\n" + errors.join("\n")); + throw new DidError(prologue + ":\n" + errors.join("\n")); } public require(condition: boolean, errorMessage: string): void { diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts new file mode 100644 index 0000000..e7733e8 --- /dev/null +++ b/test/integration/did-resolver.test.ts @@ -0,0 +1,144 @@ +import { AccountId, Client, PrivateKey } from "@hashgraph/sdk"; +import { Resolver } from "did-resolver"; +import { Hashing, HcsDid, HederaDidResolver } from "../../dist"; + +const OPERATOR_ID = process.env.OPERATOR_ID; +const OPERATOR_KEY = process.env.OPERATOR_KEY; +// testnet, previewnet, mainnet +const NETWORK = "testnet"; + +// hedera +const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; + +describe("HederaDidResolver", () => { + let client; + + beforeAll(async () => { + const operatorId = AccountId.fromString(OPERATOR_ID); + const operatorKey = PrivateKey.fromString(OPERATOR_KEY); + client = Client.forTestnet(); + client.setMirrorNetwork(MIRROR_PROVIDER); + client.setOperator(operatorId, operatorKey); + }); + + describe("#resolve", () => { + it("returns error response", async () => { + const resolver = new Resolver({ + ...new HederaDidResolver(client).build(), + }); + + let result = await resolver.resolve("did:hedera:testnet:nNCTE5bZdRmjm2obqJwS892jVLak_0.0.1"); + expect(result).toEqual({ + didDocument: null, + didDocumentMetadata: {}, + didResolutionMetadata: { + error: "invalidDid", + message: "Error: DID string is invalid. ID holds incorrect format.", + }, + }); + + /** + * Does not return messages because Resolver wrapper handles that + */ + result = await resolver.resolve(null); + expect(result).toEqual({ + didDocument: null, + didDocumentMetadata: {}, + didResolutionMetadata: { + error: "invalidDid", + }, + }); + + result = await resolver.resolve( + "did:hedera:invalidNetwork:nNCTE5bZdRmjm2obqJwS892jVLakafasdfasdfasffwvdasdfasqqwe_0.0.1" + ); + expect(result).toEqual({ + didDocument: null, + didDocumentMetadata: {}, + didResolutionMetadata: { + error: "unknownNetwork", + message: "Error: DID string is invalid. Invalid Hedera network.", + }, + }); + }); + + it("returns success response", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.addService({ + id: did.getIdentifier() + "#service-1", + type: "LinkedDomains", + serviceEndpoint: "https://example.com/vcs", + }); + + const resolver = new Resolver({ + ...new HederaDidResolver(client).build(), + }); + + let result = await resolver.resolve(did.getIdentifier()); + expect(result).toEqual({ + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${did.getIdentifier()}#did-root-key`], + authentication: [`${did.getIdentifier()}#did-root-key`], + id: did.getIdentifier(), + service: [ + { + id: `${did.getIdentifier()}#service-1`, + serviceEndpoint: "https://example.com/vcs", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: did.getIdentifier(), + id: `${did.getIdentifier()}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + didDocumentMetadata: { + created: expect.anything(), + updated: expect.anything(), + versionId: expect.anything(), + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + }); + }); + + it("returns deactivated did document", async () => { + const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const did = new HcsDid({ privateKey, client }); + + await did.register(); + await did.delete(); + + const resolver = new Resolver({ + ...new HederaDidResolver(client).build(), + }); + + let result = await resolver.resolve(did.getIdentifier()); + expect(result).toEqual({ + didDocument: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: did.getIdentifier(), + verificationMethod: [], + }, + didDocumentMetadata: { + versionId: null, + deactivated: true, + }, + didResolutionMetadata: { + contentType: "application/did+ld+json", + }, + }); + }); + }); +}); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 6d285b6..2d92738 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -1,5 +1,5 @@ import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; -import { Hashing, HcsDid } from "../../dist"; +import { DidError, Hashing, HcsDid } from "../../dist"; const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; @@ -35,7 +35,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID is already registered"); }); @@ -49,7 +49,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -111,7 +111,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID is not registered"); }); @@ -125,7 +125,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -136,7 +136,7 @@ describe("HcsDid", () => { await did.register(); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -164,7 +164,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID is not registered"); }); @@ -177,7 +177,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("privateKey is missing"); }); @@ -190,7 +190,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -200,7 +200,7 @@ describe("HcsDid", () => { await did.register(); - let didJSON = (await did.resolve()).toJsonTree().didDocument; + let didJSON = (await did.resolve()).toJsonTree(); expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], @@ -218,7 +218,7 @@ describe("HcsDid", () => { await did.delete(); - didJSON = (await did.resolve()).toJsonTree().didDocument; + didJSON = (await did.resolve()).toJsonTree(); expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [], @@ -249,7 +249,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID is not registered"); }); @@ -268,7 +268,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("privateKey is missing"); }); @@ -288,7 +288,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -309,7 +309,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("newPrivateKey is missing"); }); @@ -328,7 +328,7 @@ describe("HcsDid", () => { newPrivateKey: newDidPrivateKey, }); - const doc = (await did.resolve()).toJsonTree().didDocument; + const doc = (await did.resolve()).toJsonTree(); expect(doc).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -362,7 +362,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("privateKey is missing"); }); @@ -376,7 +376,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -390,7 +390,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -409,7 +409,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); }); @@ -427,7 +427,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -474,7 +474,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -518,7 +518,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -561,7 +561,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -600,7 +600,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("privateKey is missing"); }); @@ -614,7 +614,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -628,7 +628,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -658,7 +658,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -718,7 +718,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -773,7 +773,7 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -812,7 +812,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("privateKey is missing"); }); @@ -832,7 +832,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Client configuration is missing"); }); @@ -852,7 +852,7 @@ describe("HcsDid", () => { } catch (err) { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -876,7 +876,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -930,7 +930,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -980,7 +980,7 @@ describe("HcsDid", () => { }); const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree().didDocument; + const didDocument = didDoc.toJsonTree(); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index fd5f99b..4784f8c 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -24,24 +24,16 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, []); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [], - authentication: [], - id: identifier, - verificationMethod: [], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: undefined, - deactivated: false, - updated: undefined, - versionId: undefined, - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], }); + expect(doc.getCreated()).toBeNull(); + expect(doc.getUpdated()).toBeNull(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeNull(); }); it("ignores events til first create DIDOwner event", () => { @@ -72,38 +64,30 @@ describe("DidDocument", () => { ]); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - id: identifier, - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - service: [ - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + id: identifier, + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); it("handles create DIDOwner event", () => { @@ -117,31 +101,23 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - id: identifier, - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + id: identifier, + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); it("handes DID delete event", () => { @@ -156,24 +132,16 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [], - authentication: [], - id: identifier, - verificationMethod: [], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: undefined, - deactivated: true, - updated: undefined, - versionId: undefined, - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [], + authentication: [], + id: identifier, + verificationMethod: [], }); + expect(doc.getCreated()).toBeNull(); + expect(doc.getUpdated()).toBeNull(); + expect(doc.getDeactivated()).toEqual(true); + expect(doc.getVersionId()).toBeNull(); }); it("handes change DID owner event", () => { @@ -212,39 +180,31 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${otherOwnerIdentifier}#did-root-key`], - authentication: [`${otherOwnerIdentifier}#did-root-key`], - capabilityDelegation: [`${identifier}#key-2`], - controller: otherOwnerIdentifier, - id: identifier, - verificationMethod: [ - { - controller: otherOwnerIdentifier, - id: `${otherOwnerIdentifier}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${otherOwnerIdentifier}#did-root-key`], + authentication: [`${otherOwnerIdentifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + controller: otherOwnerIdentifier, + id: identifier, + verificationMethod: [ + { + controller: otherOwnerIdentifier, + id: `${otherOwnerIdentifier}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); it("successfuly handles add service, verificationMethod and verificationRelationship events", () => { @@ -291,51 +251,43 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`], - capabilityDelegation: [`${identifier}#key-2`], - id: identifier, - service: [ - { - id: `${identifier}#service-1`, - serviceEndpoint: "https://test.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://test.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); it("successfuly handles update service, verificationMethod and verificationRelationship events", () => { @@ -436,62 +388,54 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], - capabilityDelegation: [`${identifier}#key-2`], - id: identifier, - service: [ - { - id: `${identifier}#service-1`, - serviceEndpoint: "https://new.test.identity.com", - type: "LinkedDomains", - }, - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + capabilityDelegation: [`${identifier}#key-2`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://new.test.identity.com", + type: "LinkedDomains", + }, + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-1`, + publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-2`, + publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); it("successfuly handles revoke service, verificationMethod and verificationRelationship events", () => { @@ -589,44 +533,36 @@ describe("DidDocument", () => { const doc = new DidDocument(identifier, messages); expect(doc.toJsonTree()).toEqual({ - "@context": "https://w3id.org/did-resolution/v1", - didDocument: { - "@context": "https://www.w3.org/ns/did/v1", - assertionMethod: [`${identifier}#did-root-key`], - authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], - id: identifier, - service: [ - { - id: `${identifier}#service-2`, - serviceEndpoint: "https://test2.identity.com", - type: "LinkedDomains", - }, - ], - verificationMethod: [ - { - controller: identifier, - id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", - type: "Ed25519VerificationKey2018", - }, - { - controller: identifier, - id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), - type: "Ed25519VerificationKey2018", - }, - ], - }, - didResolutionMetadata: { - contentType: "application/did+ld+json", - }, - didDocumentMetadata: { - created: expect.anything(), - deactivated: false, - updated: expect.anything(), - versionId: expect.anything(), - }, + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`, `${identifier}#key-3`], + id: identifier, + service: [ + { + id: `${identifier}#service-2`, + serviceEndpoint: "https://test2.identity.com", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + type: "Ed25519VerificationKey2018", + }, + { + controller: identifier, + id: `${identifier}#key-3`, + publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], }); + expect(doc.getCreated()).toBeTruthy(); + expect(doc.getUpdated()).toBeTruthy(); + expect(doc.getDeactivated()).toEqual(false); + expect(doc.getVersionId()).toBeTruthy(); }); }); }); diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts index 5068fd6..fcf6f87 100644 --- a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidCreateDidOwnerEvent, HcsDidEventTargetName } from "../../../../dist"; +import { DidError, Hashing, HcsDidCreateDidOwnerEvent, HcsDidEventTargetName } from "../../../../dist"; describe("HcsDidCreateDidOwnerEvent", () => { const privateKey = PrivateKey.fromString( @@ -21,7 +21,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -33,7 +33,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -45,7 +45,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -57,7 +57,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#did-root-key"); }); }); diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts index 49d66da..55b44c7 100644 --- a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidUpdateDidOwnerEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidUpdateDidOwnerEvent } from "../../../../dist"; describe("HcsDidUpdateDidOwnerEvent", () => { const privateKey = PrivateKey.fromString( @@ -21,7 +21,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -33,7 +33,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -45,7 +45,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. DID Owner args are missing"); }); @@ -57,7 +57,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#did-root-key"); }); }); diff --git a/test/unit/event/service/hcs-did-create-service-event.test.ts b/test/unit/event/service/hcs-did-create-service-event.test.ts index b6c9111..e94025f 100644 --- a/test/unit/event/service/hcs-did-create-service-event.test.ts +++ b/test/unit/event/service/hcs-did-create-service-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidCreateServiceEvent, HcsDidEventTargetName } from "../../../../dist"; +import { DidError, Hashing, HcsDidCreateServiceEvent, HcsDidEventTargetName } from "../../../../dist"; describe("HcsDidCreateServiceEvent", () => { const privateKey = PrivateKey.fromString( @@ -25,7 +25,7 @@ describe("HcsDidCreateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -37,7 +37,7 @@ describe("HcsDidCreateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -49,7 +49,7 @@ describe("HcsDidCreateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -61,7 +61,7 @@ describe("HcsDidCreateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); }); }); diff --git a/test/unit/event/service/hcs-did-revoke-service-event.test.ts b/test/unit/event/service/hcs-did-revoke-service-event.test.ts index f4cb007..1b61df4 100644 --- a/test/unit/event/service/hcs-did-revoke-service-event.test.ts +++ b/test/unit/event/service/hcs-did-revoke-service-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidRevokeServiceEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidRevokeServiceEvent } from "../../../../dist"; describe("HcsDidRevokeServiceEvent", () => { const privateKey = PrivateKey.fromString( @@ -21,7 +21,7 @@ describe("HcsDidRevokeServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -33,7 +33,7 @@ describe("HcsDidRevokeServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); }); }); diff --git a/test/unit/event/service/hcs-did-update-service-event.test.ts b/test/unit/event/service/hcs-did-update-service-event.test.ts index ba5b257..2ba3415 100644 --- a/test/unit/event/service/hcs-did-update-service-event.test.ts +++ b/test/unit/event/service/hcs-did-update-service-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidUpdateServiceEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidUpdateServiceEvent } from "../../../../dist"; describe("HcsDidUpdateServiceEvent", () => { const privateKey = PrivateKey.fromString( @@ -25,7 +25,7 @@ describe("HcsDidUpdateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -37,7 +37,7 @@ describe("HcsDidUpdateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -49,7 +49,7 @@ describe("HcsDidUpdateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Services args are missing"); }); @@ -61,7 +61,7 @@ describe("HcsDidUpdateServiceEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#service-{integer}"); }); }); diff --git a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts index 917a2de..225da3e 100644 --- a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidCreateVerificationMethodEvent, HcsDidEventTargetName } from "../../../../dist"; +import { DidError, Hashing, HcsDidCreateVerificationMethodEvent, HcsDidEventTargetName } from "../../../../dist"; describe("HcsDidCreateVerificationMethodEvent", () => { const privateKey = PrivateKey.fromString( @@ -31,7 +31,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -43,7 +43,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -60,7 +60,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -77,7 +77,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -94,7 +94,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts index 4532254..6a45ddd 100644 --- a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationMethodEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationMethodEvent } from "../../../../dist"; describe("HcsDidRevokeVerificationMethodEvent", () => { const privateKey = PrivateKey.fromString( @@ -21,7 +21,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -33,7 +33,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts index 4fd5388..0cd6005 100644 --- a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationMethodEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationMethodEvent } from "../../../../dist"; describe("HcsDidUpdateVerificationMethodEvent", () => { const privateKey = PrivateKey.fromString( @@ -31,7 +31,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -43,7 +43,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -60,7 +60,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -77,7 +77,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Method args are missing"); }); @@ -94,7 +94,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts index 3a31216..ebb3c82 100644 --- a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidCreateVerificationRelationshipEvent, HcsDidEventTargetName } from "../../../../dist"; +import { DidError, Hashing, HcsDidCreateVerificationRelationshipEvent, HcsDidEventTargetName } from "../../../../dist"; describe("HcsDidCreateVerificationRelationshipEvent", () => { const privateKey = PrivateKey.fromString( @@ -33,7 +33,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -51,7 +51,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -69,7 +69,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -87,7 +87,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -105,7 +105,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -123,7 +123,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts index d0008ea..2be0385 100644 --- a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationRelationshipEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidRevokeVerificationRelationshipEvent } from "../../../../dist"; describe("HcsDidRevokeVerificationRelationshipEvent", () => { const privateKey = PrivateKey.fromString( @@ -21,7 +21,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -33,7 +33,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -45,7 +45,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts index 2829700..69b838b 100644 --- a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts @@ -1,5 +1,5 @@ import { PrivateKey } from "@hashgraph/sdk"; -import { Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationRelationshipEvent } from "../../../../dist"; +import { DidError, Hashing, HcsDidEventTargetName, HcsDidUpdateVerificationRelationshipEvent } from "../../../../dist"; describe("HcsDidUpdateVerificationRelationshipEvent", () => { const privateKey = PrivateKey.fromString( @@ -33,7 +33,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -51,7 +51,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -69,7 +69,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -87,7 +87,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -105,7 +105,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Validation failed. Verification Relationship args are missing"); }); @@ -123,7 +123,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("Event ID is invalid. Expected format: {did}#key-{integer}"); }); }); diff --git a/test/unit/hsc-did.test.ts b/test/unit/hsc-did.test.ts index 86e7a3d..a37951b 100644 --- a/test/unit/hsc-did.test.ts +++ b/test/unit/hsc-did.test.ts @@ -1,5 +1,5 @@ import { Client, PrivateKey } from "@hashgraph/sdk"; -import { HcsDid } from "../../dist"; +import { DidError, HcsDid } from "../../dist"; describe("HcsDid", () => { let client; @@ -9,7 +9,7 @@ describe("HcsDid", () => { }); describe("#constructor", () => { it("throws error because of missing identifier and privateKey", () => { - expect(() => new HcsDid({})).toThrowError(new Error("identifier and privateKey cannot both be empty")); + expect(() => new HcsDid({})).toThrowError(new DidError("identifier and privateKey cannot both be empty")); }); it("successfully builds HcsDid with private key only", () => { @@ -76,7 +76,7 @@ describe("HcsDid", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID string is invalid: topic ID is missing"); }); @@ -88,7 +88,7 @@ describe("HcsDid", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID string is invalid: invalid prefix."); }); @@ -100,7 +100,7 @@ describe("HcsDid", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID string is invalid: invalid method name: hashgraph"); }); @@ -112,7 +112,7 @@ describe("HcsDid", () => { error = err; } - expect(error).toBeInstanceOf(Error); + expect(error).toBeInstanceOf(DidError); expect(error.message).toEqual("DID string is invalid. Invalid Hedera network."); }); @@ -124,8 +124,8 @@ describe("HcsDid", () => { error = err; } - expect(error).toBeInstanceOf(Error); - expect(error.message).toEqual("DID string is invalid. DID string is invalid."); + expect(error).toBeInstanceOf(DidError); + expect(error.message).toEqual("DID string is invalid. ID holds incorrect format."); }); it("should get array with NetworkName, topicId and didIdString", () => { From 6f9ab45001a53850c202f34d8492fe349576df82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 15 Feb 2022 14:01:55 +0100 Subject: [PATCH 093/133] Handle possible case when created and updated timestamps are not present --- src/identity/did-resolver.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/identity/did-resolver.ts b/src/identity/did-resolver.ts index 67f71a5..2361e2d 100644 --- a/src/identity/did-resolver.ts +++ b/src/identity/did-resolver.ts @@ -60,8 +60,8 @@ export class HederaDidResolver { if (!status.deactivated) { documentMeta = { ...documentMeta, - created: didDocument.getCreated().toDate().toISOString(), - updated: didDocument.getUpdated().toDate().toISOString(), + created: didDocument.getCreated()?.toDate()?.toISOString(), + updated: didDocument.getUpdated()?.toDate()?.toISOString(), }; } From c4e4f8685a31bcbf1f800691361f4662ed58612a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 15 Feb 2022 16:35:28 +0100 Subject: [PATCH 094/133] DID resolver client param is optional. If not passed, client is chosen based on the DID id string --- src/identity/did-resolver.ts | 30 ++++++++++++++++++++------- src/identity/did-syntax.ts | 1 + src/identity/hcs/did/hcs-did.ts | 6 +++++- test/integration/did-resolver.test.ts | 2 +- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/identity/did-resolver.ts b/src/identity/did-resolver.ts index 2361e2d..026cd5d 100644 --- a/src/identity/did-resolver.ts +++ b/src/identity/did-resolver.ts @@ -1,4 +1,4 @@ -import NodeClient from "@hashgraph/sdk/lib/client/NodeClient"; +import { Client } from "@hashgraph/sdk"; import { DIDDocumentMetadata, DIDResolutionOptions, @@ -7,7 +7,8 @@ import { ParsedDID, Resolvable, } from "did-resolver"; -import { DidErrorCode } from ".."; +import { DidErrorCode } from "./did-error"; +import { DidSyntax } from "./did-syntax"; import { HcsDid } from "./hcs/did/hcs-did"; export enum Errors { @@ -29,27 +30,42 @@ export enum Errors { unknownNetwork = "unknownNetwork", } -export function getResolver(client: NodeClient): Record { +export function getResolver(client?: Client): Record { return new HederaDidResolver(client).build(); } export class HederaDidResolver { - private client: NodeClient; + private static readonly DEFAULT_CLIENTS = { + [DidSyntax.HEDERA_NETWORK_TESTNET]: Client.forTestnet(), + [DidSyntax.HEDERA_NETWORK_MAINNET]: Client.forMainnet(), + [DidSyntax.HEDERA_NETWORK_PREVIEWNET]: Client.forPreviewnet(), + }; - constructor(client: NodeClient) { + private client: Client; + + constructor(client?: Client) { this.client = client; } + public getClient(networkName: string) { + if (this.client) { + return this.client; + } + + return HederaDidResolver.DEFAULT_CLIENTS[networkName]; + } + async resolve( did: string, _parsed: ParsedDID, _unused: Resolvable, options: DIDResolutionOptions ): Promise { - //TODO: check network + const networkName = did?.split(DidSyntax.DID_METHOD_SEPARATOR)[2]; + const client = this.getClient(networkName); try { - const registeredDid = new HcsDid({ identifier: did, client: this.client }); + const registeredDid = new HcsDid({ identifier: did, client: client }); const didDocument = await registeredDid.resolve(); const status: Partial = didDocument.getDeactivated() ? { deactivated: true } : {}; diff --git a/src/identity/did-syntax.ts b/src/identity/did-syntax.ts index 301ba0b..932b125 100644 --- a/src/identity/did-syntax.ts +++ b/src/identity/did-syntax.ts @@ -5,6 +5,7 @@ export module DidSyntax { export const DID_TOPIC_SEPARATOR = "_"; export const HEDERA_NETWORK_MAINNET = "mainnet"; export const HEDERA_NETWORK_TESTNET = "testnet"; + export const HEDERA_NETWORK_PREVIEWNET = "previewnet"; export enum Method { HEDERA_HCS = "hedera", diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 672a14a..7206ea7 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -455,7 +455,11 @@ export class HcsDid { try { const networkName = didParts.shift(); - if (networkName != DidSyntax.HEDERA_NETWORK_MAINNET && networkName != DidSyntax.HEDERA_NETWORK_TESTNET) { + if ( + networkName != DidSyntax.HEDERA_NETWORK_MAINNET && + networkName != DidSyntax.HEDERA_NETWORK_TESTNET && + networkName != DidSyntax.HEDERA_NETWORK_PREVIEWNET + ) { throw new DidError("DID string is invalid. Invalid Hedera network.", DidErrorCode.INVALID_NETWORK); } diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts index e7733e8..a938452 100644 --- a/test/integration/did-resolver.test.ts +++ b/test/integration/did-resolver.test.ts @@ -119,7 +119,7 @@ describe("HederaDidResolver", () => { await did.delete(); const resolver = new Resolver({ - ...new HederaDidResolver(client).build(), + ...new HederaDidResolver().build(), }); let result = await resolver.resolve(did.getIdentifier()); From 81307b12a40227489f9255d0b7a97576addaa1bd Mon Sep 17 00:00:00 2001 From: elena Date: Wed, 16 Feb 2022 15:06:13 +1100 Subject: [PATCH 095/133] style: Fix some typos(MEE-3046). --- demo/3_read_did_messages.js | 2 +- demo/4_resolve_did.js | 2 +- demo/5_change_did_ownership.js | 2 +- test/integration/hcs-did.test.ts | 8 ++++---- test/unit/did-document.test.ts | 6 +++--- .../event/owner/hcs-did-update-did-owner-event.test.ts | 2 +- test/unit/hcs-did-message.test.ts | 10 +++++----- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index f216c7e..a6aba1c 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -31,7 +31,7 @@ async function main() { }); console.log("\n"); console.log("==================================================="); - console.log("DragaonGlass Explorer:"); + console.log("DragonGlass Explorer:"); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); console.log("\n"); }) diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index bb18922..d4880b4 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -23,7 +23,7 @@ async function main() { console.log("\n"); console.log("==================================================="); - console.log("DragaonGlass Explorer:"); + console.log("DragonGlass Explorer:"); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); console.log("\n"); } diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index aff7d98..41bd5d0 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -64,7 +64,7 @@ async function main() { console.log("\n"); console.log("==================================================="); - console.log("DragaonGlass Explorer:"); + console.log("DragonGlass Explorer:"); console.log(`https://testnet.dragonglass.me/hedera/topics/${registeredDid.getTopicId().toString()}`); console.log("\n"); } diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 2d92738..7aadd29 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -129,7 +129,7 @@ describe("HcsDid", () => { expect(error.message).toEqual("Client configuration is missing"); }); - it("successfuly resolves just registered DID", async () => { + it("successfully resolves just registered DID", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); @@ -650,7 +650,7 @@ describe("HcsDid", () => { }); /** - * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ await new Promise((resolve) => setTimeout(resolve, 9000)); @@ -710,7 +710,7 @@ describe("HcsDid", () => { }); /** - * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ await new Promise((resolve) => setTimeout(resolve, 9000)); @@ -765,7 +765,7 @@ describe("HcsDid", () => { }); /** - * wait for 9s so DIDOwner and VerificationMethod event to be propogated to mirror node + * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ await new Promise((resolve) => setTimeout(resolve, 9000)); diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 4784f8c..96f7013 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -207,7 +207,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfuly handles add service, verificationMethod and verificationRelationship events", () => { + it("successfully handles add service, verificationMethod and verificationRelationship events", () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); @@ -290,7 +290,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfuly handles update service, verificationMethod and verificationRelationship events", () => { + it("successfully handles update service, verificationMethod and verificationRelationship events", () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); const key3 = PrivateKey.generate(); @@ -438,7 +438,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfuly handles revoke service, verificationMethod and verificationRelationship events", () => { + it("successfully handles revoke service, verificationMethod and verificationRelationship events", () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); const key3 = PrivateKey.generate(); diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts index 55b44c7..54afb91 100644 --- a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -75,7 +75,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); describe("#getController", () => { - it("returns identifier passed via contructor", () => { + it("returns identifier passed via constructor", () => { expect(event.getController()).toEqual(identifier); }); }); diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index a84927b..3339189 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -30,12 +30,12 @@ exports.decrypt = decrypt; describe("HcsDidMessage", () => { const client = Client.forTestnet(); const privateKey = PrivateKey.generate(); - const identifer = `did:hedera:${network}:${Hashing.multibase.encode( + const identifier = `did:hedera:${network}:${Hashing.multibase.encode( privateKey.publicKey.toBytes() )}_${DID_TOPIC_ID1}`; it("Test Valid Message", () => { - const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); const message = new HcsDidMessage( DidMethodOperation.CREATE, @@ -51,7 +51,7 @@ describe("HcsDidMessage", () => { }); it("Test Invalid Did", () => { - const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); const message = new HcsDidMessage( DidMethodOperation.CREATE, @@ -67,7 +67,7 @@ describe("HcsDidMessage", () => { }); it("Test Invalid Topic", () => { - const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); const message = new HcsDidMessage( DidMethodOperation.CREATE, @@ -84,7 +84,7 @@ describe("HcsDidMessage", () => { }); it("Test Missing Data", () => { - const did = new HcsDid({ identifier: identifer, privateKey: privateKey, client: client }); + const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); let message = new HcsDidMessage( null, From 46f6dd0a1c1fac12ecf3bea03101ef5e077ae0c8 Mon Sep 17 00:00:00 2001 From: elena Date: Fri, 18 Feb 2022 15:04:22 +1100 Subject: [PATCH 096/133] style: Change 'Private Topic' to 'Restricted Topic' in the readme file (MEE-3225). --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c25b4f..7864970 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Hedera Consensus Service (HCS) allows applications to share common channels to p This SDK is designed to simplify : -- Creation and initialization of the DID registration on **HCS Private Topic**, +- Creation and initialization of the DID registration on **HCS Restricted Topic**, - Generation of decentralized identifiers for [Hedera DID Method][did-method-spec] and creation of DID documents, - Create, update, revoke, deletion, and resolution of DID documents based on [DID Document Core Properties][did-core-prop] event/log messages recorded on **HCS Topic** - Transferring ownership of DID identifier and DID Document to another party. From d2dc7269e08d2e24aa45df9b4e5ebb4a1cddfe4e Mon Sep 17 00:00:00 2001 From: elena Date: Fri, 18 Feb 2022 15:49:14 +1100 Subject: [PATCH 097/133] refactor: Change conf.js to .env file for demo. (MEE-3225). --- .env.example | 16 +++++++++ demo/1_generate_register_did.js | 4 +-- demo/2_add_update_revoke_service.js | 8 ++--- ...2_add_update_revoke_verification_method.js | 8 ++--- ...update_revoke_verification_relationship.js | 8 ++--- demo/3_read_did_messages.js | 4 +-- demo/4_resolve_did.js | 4 +-- demo/5_change_did_ownership.js | 8 ++--- demo/6_delete_did_document.js | 10 +++--- demo/config.js | 34 ------------------- package-lock.json | 16 +++++++++ package.json | 3 +- 12 files changed, 61 insertions(+), 62 deletions(-) create mode 100644 .env.example delete mode 100644 demo/config.js diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..bb8a39a --- /dev/null +++ b/.env.example @@ -0,0 +1,16 @@ +# Account that is going to pay for the demo +OPERATOR_ID: "xxx" + +# Account private key +OPERATOR_KEY: "302e..." + +# =============================================================================================================================== +# IMPORTANT: after running step 1 please put below generated DID identifier and private key values. +# Then later steps can be executed. +# =============================================================================================================================== + +# DID document identifier +DID_IDENTIFIER: "did:hedera:testnet:..." + +# DID private key +DID_PRIVATE_KEY: "302e..." diff --git a/demo/1_generate_register_did.js b/demo/1_generate_register_did.js index 0adc8f0..21010bc 100644 --- a/demo/1_generate_register_did.js +++ b/demo/1_generate_register_did.js @@ -1,13 +1,13 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY } = require("./config"); +require('dotenv').config(); async function main() { /** * Client setup */ const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, OPERATOR_KEY); + client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); /** * Build DID instance diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js index 8baa337..8e4bf1f 100644 --- a/demo/2_add_update_revoke_service.js +++ b/demo/2_add_update_revoke_service.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); +require('dotenv').config(); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, OPERATOR_KEY); + client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Add Service diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index 3c30221..3769fd5 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); +require('dotenv').config(); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, OPERATOR_KEY); + client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationMethodIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index 2d8be2f..aa5e391 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY, DID_PRIVATE_KEY, DID_IDENTIFIER } = require("./config"); +require('dotenv').config(); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, OPERATOR_KEY); + client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationRelationshipIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index a6aba1c..66e3cf0 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,6 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); -const { DID_IDENTIFIER } = require("./config"); +require('dotenv').config(); async function main() { /** @@ -11,7 +11,7 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: DID_IDENTIFIER }); + const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER }); /** * Read DID resolver setup diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index d4880b4..033243f 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -1,6 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { DID_IDENTIFIER } = require("./config"); +require('dotenv').config(); async function main() { /** @@ -11,7 +11,7 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: DID_IDENTIFIER, client: client }); + const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER, client: client }); /** * Resolve DID diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index 41bd5d0..fc60929 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); +require('dotenv').config(); async function main() { /** @@ -26,15 +26,15 @@ async function main() { * Setup */ const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, OPERATOR_KEY); + client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); - const existingOwnerDIDPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); + const existingOwnerDIDPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); /** * Build DID instance */ const registeredDid = new HcsDid({ - identifier: DID_IDENTIFIER, + identifier: process.env.DID_IDENTIFIER, privateKey: existingOwnerDIDPrivateKey, client: client, }); diff --git a/demo/6_delete_did_document.js b/demo/6_delete_did_document.js index 1f53646..84dac89 100644 --- a/demo/6_delete_did_document.js +++ b/demo/6_delete_did_document.js @@ -1,21 +1,21 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./config"); +require('dotenv').config(); async function main() { /** * Client setup */ - const privateKey = PrivateKey.fromString(OPERATOR_KEY); + const privateKey = PrivateKey.fromString(process.env.OPERATOR_KEY); const client = Client.forTestnet(); - client.setOperator(OPERATOR_ID, privateKey); + client.setOperator(process.env.OPERATOR_ID, privateKey); - const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); /** * Build DID instance */ - const did = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Delete DID diff --git a/demo/config.js b/demo/config.js deleted file mode 100644 index 202918b..0000000 --- a/demo/config.js +++ /dev/null @@ -1,34 +0,0 @@ -const { Hbar } = require("@hashgraph/sdk"); - -module.exports = { - /** - * Account that is going to pay for the demo - */ - OPERATOR_ID: "xxx", - - /** - * Account private key - */ - OPERATOR_KEY: "302e...", - - /** - * Fix Transaction Fee - */ - MAX_TRANSACTION_FEE: new Hbar(2), - - /** - * =============================================================================================================================== - * IMPORTANT: after running step 1, generated DID identifier and private key value please put below so later steps can be executed - * =============================================================================================================================== - */ - - /** - * DID document identifier - */ - DID_IDENTIFIER: "did:hedera:testnet:...", - - /** - * DID private key - */ - DID_PRIVATE_KEY: "302e...", -}; diff --git a/package-lock.json b/package-lock.json index 18f268f..08e1a00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "devDependencies": { "@types/jest": "^27.4.0", "@types/node": "^16.7.7", + "dotenv": "^16.0.0", "jest": "^27.5.0", "nodemon": "^2.0.7", "prettier": "2.5.1", @@ -2200,6 +2201,15 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -7169,6 +7179,12 @@ "is-obj": "^2.0.0" } }, + "dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "dev": true + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", diff --git a/package.json b/package.json index 998f689..7b240db 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "nodemon": "^2.0.7", "prettier": "2.5.1", "ts-jest": "^27.1.3", - "typescript": "^4.3.2" + "typescript": "^4.3.2", + "dotenv": "^16.0.0" }, "dependencies": { "@hashgraph/sdk": "^2.8", From 0a55b8f2a2d840eeb57d79a2b335826d71be874e Mon Sep 17 00:00:00 2001 From: elena Date: Fri, 18 Feb 2022 15:53:54 +1100 Subject: [PATCH 098/133] refactor: Change conf.js to .env in readme file. (MEE-3225). --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7864970..5859de4 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,12 @@ npm install --save @hashgraph/did-sdk-js ## Examples -Sample demo step by step javascript example are available at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `config.js` +Sample demo step by step javascript example are available at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `.env` - OPERATOR_ID=0.0.xxxx - OPERATOR_KEY=302... -After running first step of the demo flow use printed out values to complete the `config.js` configuration file. +After running first step of the demo flow use printed out values to complete the `.env` configuration file. - DID_IDENTIFIER=did:hedera:testnet:..._0.0.xxx - DID_PRIVATE_KEY=302... From 3537271b9687448348dabd4c55113ae50c097483 Mon Sep 17 00:00:00 2001 From: elena Date: Mon, 21 Feb 2022 14:04:33 +1100 Subject: [PATCH 099/133] refactor: Fix some typos. (MEE-3225). --- test/unit/did-document.test.ts | 4 ++-- test/unit/event/owner/hcs-did-create-did-owner-event.test.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 96f7013..be6f80a 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -120,7 +120,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("handes DID delete event", () => { + it("handles DID delete event", () => { const messages = [ new HcsDidMessage( DidMethodOperation.CREATE, @@ -144,7 +144,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeNull(); }); - it("handes change DID owner event", () => { + it("handles change DID owner event", () => { const otherOwnerKey = PrivateKey.generate(); const otherOwnerIdentifier = "did:hedera:testnet:" + Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()) + "_0.0.29999999"; diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts index fcf6f87..a99a1aa 100644 --- a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -75,7 +75,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); describe("#getController", () => { - it("returns identifier passed via contructor", () => { + it("returns identifier passed via constructor", () => { expect(event.getController()).toEqual(identifier); }); }); From e76707b1abb2198168b15283b3a0b40020c14ffe Mon Sep 17 00:00:00 2001 From: elena Date: Mon, 21 Feb 2022 14:27:34 +1100 Subject: [PATCH 100/133] refactor: Remove dotenv package and rename .env file to .env.json. (MEE-3225). --- .env.example | 16 ---------------- demo/1_generate_register_did.js | 4 ++-- demo/2_add_update_revoke_service.js | 8 ++++---- demo/2_add_update_revoke_verification_method.js | 8 ++++---- ...dd_update_revoke_verification_relationship.js | 8 ++++---- demo/3_read_did_messages.js | 4 ++-- demo/4_resolve_did.js | 4 ++-- demo/5_change_did_ownership.js | 8 ++++---- demo/6_delete_did_document.js | 10 +++++----- package-lock.json | 16 ---------------- package.json | 3 +-- 11 files changed, 28 insertions(+), 61 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index bb8a39a..0000000 --- a/.env.example +++ /dev/null @@ -1,16 +0,0 @@ -# Account that is going to pay for the demo -OPERATOR_ID: "xxx" - -# Account private key -OPERATOR_KEY: "302e..." - -# =============================================================================================================================== -# IMPORTANT: after running step 1 please put below generated DID identifier and private key values. -# Then later steps can be executed. -# =============================================================================================================================== - -# DID document identifier -DID_IDENTIFIER: "did:hedera:testnet:..." - -# DID private key -DID_PRIVATE_KEY: "302e..." diff --git a/demo/1_generate_register_did.js b/demo/1_generate_register_did.js index 21010bc..b53f163 100644 --- a/demo/1_generate_register_did.js +++ b/demo/1_generate_register_did.js @@ -1,13 +1,13 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY } = require("./.env.json"); async function main() { /** * Client setup */ const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); /** * Build DID instance diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js index 8e4bf1f..bb80694 100644 --- a/demo/2_add_update_revoke_service.js +++ b/demo/2_add_update_revoke_service.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./.env.json"); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Add Service diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index 3769fd5..19115a9 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./.env.json"); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationMethodIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index aa5e391..0e85df6 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -1,20 +1,20 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY, DID_PRIVATE_KEY, DID_IDENTIFIER } = require("./.env.json"); async function main() { /** * Setup */ const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const registeredDid = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationRelationshipIdentifier = "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 66e3cf0..7240aee 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,6 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); -require('dotenv').config(); +const { DID_IDENTIFIER } = require("./.env.json"); async function main() { /** @@ -11,7 +11,7 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER }); + const did = new HcsDid({ identifier: DID_IDENTIFIER }); /** * Read DID resolver setup diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index 033243f..1eacb55 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -1,6 +1,6 @@ const { Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { DID_IDENTIFIER } = require("./.env.json"); async function main() { /** @@ -11,7 +11,7 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER, client: client }); + const did = new HcsDid({ identifier: DID_IDENTIFIER, client: client }); /** * Resolve DID diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index fc60929..fb419d3 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -1,6 +1,6 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./.env.json"); async function main() { /** @@ -26,15 +26,15 @@ async function main() { * Setup */ const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, process.env.OPERATOR_KEY); + client.setOperator(OPERATOR_ID, OPERATOR_KEY); - const existingOwnerDIDPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); + const existingOwnerDIDPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ const registeredDid = new HcsDid({ - identifier: process.env.DID_IDENTIFIER, + identifier: DID_IDENTIFIER, privateKey: existingOwnerDIDPrivateKey, client: client, }); diff --git a/demo/6_delete_did_document.js b/demo/6_delete_did_document.js index 84dac89..3531d17 100644 --- a/demo/6_delete_did_document.js +++ b/demo/6_delete_did_document.js @@ -1,21 +1,21 @@ const { PrivateKey, Client } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); -require('dotenv').config(); +const { OPERATOR_ID, OPERATOR_KEY, DID_IDENTIFIER, DID_PRIVATE_KEY } = require("./.env.json"); async function main() { /** * Client setup */ - const privateKey = PrivateKey.fromString(process.env.OPERATOR_KEY); + const privateKey = PrivateKey.fromString(OPERATOR_KEY); const client = Client.forTestnet(); - client.setOperator(process.env.OPERATOR_ID, privateKey); + client.setOperator(OPERATOR_ID, privateKey); - const didPrivateKey = PrivateKey.fromString(process.env.DID_PRIVATE_KEY); + const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); /** * Build DID instance */ - const did = new HcsDid({ identifier: process.env.DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); + const did = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); /** * Delete DID diff --git a/package-lock.json b/package-lock.json index 08e1a00..18f268f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "devDependencies": { "@types/jest": "^27.4.0", "@types/node": "^16.7.7", - "dotenv": "^16.0.0", "jest": "^27.5.0", "nodemon": "^2.0.7", "prettier": "2.5.1", @@ -2201,15 +2200,6 @@ "node": ">=8" } }, - "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -7179,12 +7169,6 @@ "is-obj": "^2.0.0" } }, - "dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", - "dev": true - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", diff --git a/package.json b/package.json index 7b240db..998f689 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,7 @@ "nodemon": "^2.0.7", "prettier": "2.5.1", "ts-jest": "^27.1.3", - "typescript": "^4.3.2", - "dotenv": "^16.0.0" + "typescript": "^4.3.2" }, "dependencies": { "@hashgraph/sdk": "^2.8", From 74d0fb48735b4c3b81aa46d3b6943d6823d9f34b Mon Sep 17 00:00:00 2001 From: elena Date: Mon, 21 Feb 2022 14:28:05 +1100 Subject: [PATCH 101/133] refactor: Rename .env file to .env.json. (MEE-3225). --- demo/.env.json.example | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 demo/.env.json.example diff --git a/demo/.env.json.example b/demo/.env.json.example new file mode 100644 index 0000000..f896cbe --- /dev/null +++ b/demo/.env.json.example @@ -0,0 +1,17 @@ +COMMENT_0: Account that is going to pay for the demo +OPERATOR_ID: "xxx" + +COMMENT_1: Account private key +OPERATOR_KEY: "302e..." + +COMMENT_2: ======================================================================================================== +COMMENT_3: IMPORTANT: after running step 1 please put below generated DID identifier and private key values. +COMMENT_4: Then later steps can be executed. +COMMENT_5: ======================================================================================================== + +COMMENT_6: DID document identifier +DID_IDENTIFIER: "did:hedera:testnet:..." + +COMMENT_7: DID private key +DID_PRIVATE_KEY: "302e..." + From 018e5faa28095e3ab91b9bba384e7ff95afa57c7 Mon Sep 17 00:00:00 2001 From: elena Date: Mon, 21 Feb 2022 14:30:31 +1100 Subject: [PATCH 102/133] refactor: Rename .env file to .env.json in README. (MEE-3225). --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5859de4..f31b7f6 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,12 @@ npm install --save @hashgraph/did-sdk-js ## Examples -Sample demo step by step javascript example are available at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `.env` +Sample demo step by step javascript example are available at [Demo Folder][demo-location]. Make sure to add appropriate `testnet` account details in `.env.json` - OPERATOR_ID=0.0.xxxx - OPERATOR_KEY=302... -After running first step of the demo flow use printed out values to complete the `.env` configuration file. +After running first step of the demo flow use printed out values to complete the `.env.json` configuration file. - DID_IDENTIFIER=did:hedera:testnet:..._0.0.xxx - DID_PRIVATE_KEY=302... From b99739f4a179792fe1ae27ffaad3a18a8eca3d9a Mon Sep 17 00:00:00 2001 From: elena Date: Mon, 21 Feb 2022 14:38:49 +1100 Subject: [PATCH 103/133] refactor: Use `ledgerId` instead of deprecated 'networkName'. (MEE-3225). --- src/identity/hcs/did/hcs-did.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 7206ea7..ebf3cda 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -96,7 +96,7 @@ export class HcsDid { const topicId = (await txId.getReceipt(this.client)).topicId; this.topicId = topicId; - this.network = this.client.networkName; + this.network = this.client.ledgerId.toString(); this.identifier = this.buildIdentifier(this.privateKey.publicKey); } From 9c4fd03f84508641977c84a07dd36bc18c14beb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 21 Feb 2022 13:43:42 +0100 Subject: [PATCH 104/133] Add option to pass onMessageConfirmed callback to HcsDid constructor --- src/identity/hcs/did/hcs-did.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 7206ea7..0f34b55 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -52,10 +52,18 @@ export class HcsDid { protected resolvedAt: Timestamp; protected document: DidDocument; - constructor(args: { identifier?: string; privateKey?: PrivateKey; client?: Client }) { + protected onMessageConfirmed: (message: MessageEnvelope) => void; + + constructor(args: { + identifier?: string; + privateKey?: PrivateKey; + client?: Client; + onMessageConfirmed?: (message: MessageEnvelope) => void; + }) { this.identifier = args.identifier; this.privateKey = args.privateKey; this.client = args.client; + this.onMessageConfirmed = args.onMessageConfirmed; if (!this.identifier && !this.privateKey) { throw new DidError("identifier and privateKey cannot both be empty"); @@ -524,6 +532,10 @@ export class HcsDid { reject(err); }) .onMessageConfirmed((msg) => { + if (this.onMessageConfirmed) { + this.onMessageConfirmed(msg); + } + console.log("Message Published"); console.log( `Explore on DragonGlass: https://testnet.dragonglass.me/hedera/topics/${this.getTopicId()}` From b4780c0c02bb84d63c743e8ae42c4c5a5b00dfcc Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 22 Feb 2022 16:47:56 +1100 Subject: [PATCH 105/133] read did messages from timestamp --- demo/3_read_did_messages.js | 38 ++++++++----------- .../hcs/did/hcs-did-event-message-resolver.ts | 5 +-- .../hcs/did/hcs-did-topic-listener.ts | 4 +- src/identity/hcs/did/hcs-did.ts | 24 ++++++++++++ 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index a6aba1c..4aff3bd 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,5 +1,5 @@ -const { Client } = require("@hashgraph/sdk"); -const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); +const { Client, Timestamp } = require("@hashgraph/sdk"); +const { HcsDid } = require("../dist"); const { DID_IDENTIFIER } = require("./config"); async function main() { @@ -11,31 +11,23 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: DID_IDENTIFIER }); + const did = new HcsDid({ identifier: DID_IDENTIFIER, client: client }); /** * Read DID resolver setup */ - new HcsDidEventMessageResolver(did.getTopicId()) - .setTimeout(3000) - .whenFinished((messages) => { - messages.forEach((msg) => { - console.log("\n"); - console.log("==================================================="); - console.log("\n"); - console.log("Message:"); - console.log(msg.toJsonTree()); - console.log("\n"); - console.log("Event:"); - console.log(msg.event.toJsonTree()); - }); - console.log("\n"); - console.log("==================================================="); - console.log("DragonGlass Explorer:"); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - console.log("\n"); - }) - .execute(client); + const result = await did.readMessages(Timestamp.fromDate("2022-02-21T07:58:03.082Z")); + + result.forEach((msg) => { + console.log("\n"); + console.log("==================================================="); + console.log("\n"); + console.log("Message:"); + console.log(msg.toJsonTree()); + console.log("\n"); + console.log("Event:"); + console.log(msg.event.toJsonTree()); + }); } main(); diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 491b587..125196f 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -30,9 +30,9 @@ export class HcsDidEventMessageResolver { * * @param topicId The HCS DID topic ID. */ - constructor(topicId: TopicId) { + constructor(topicId: TopicId, startTime: Timestamp = new Timestamp(0, 0)) { this.topicId = topicId; - this.listener = new HcsDidTopicListener(this.topicId); + this.listener = new HcsDidTopicListener(this.topicId, startTime); this.noMoreMessagesTimeout = HcsDidEventMessageResolver.DEFAULT_TIMEOUT; this.lastMessageArrivalTime = Long.fromInt(Date.now()); @@ -46,7 +46,6 @@ export class HcsDidEventMessageResolver { this.existingSignatures = []; this.listener - .setStartTime(new Timestamp(0, 0)) .setEndTime(Timestamp.fromDate(new Date())) .setIgnoreErrors(false) .onError(this.errorHandler) diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 41124bb..7bc3e83 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -23,9 +23,9 @@ export class HcsDidTopicListener { * * @param didTopicId The DID consensus topic ID. */ - constructor(topicId: TopicId) { + constructor(topicId: TopicId, startTime: Timestamp = new Timestamp(0, 0)) { this.topicId = topicId; - this.query = new TopicMessageQuery().setTopicId(topicId); + this.query = new TopicMessageQuery().setTopicId(topicId).setStartTime(startTime); this.ignoreErrors = false; } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 7206ea7..6610815 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -196,6 +196,30 @@ export class HcsDid { }); } + public readMessages(startTime: Timestamp): Promise { + if (!this.identifier) { + throw new DidError("DID is not registered"); + } + + if (!this.client) { + throw new DidError("Client configuration is missing"); + } + + console.log(`topicId: ${this.topicId} \n startTime: ${startTime}`); + return new Promise((resolve, reject) => { + new HcsDidEventMessageResolver(this.topicId, startTime) + .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) + .whenFinished((messages) => { + this.messages = messages; + resolve(this.messages); + }) + .onError((err) => { + reject(err); + }) + .execute(this.client); + }); + } + /** * Meta-information about DID */ From 257bfe81f0e29e659189d582260b00b751c74971 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 22 Feb 2022 17:05:40 +1100 Subject: [PATCH 106/133] minor fixies --- .gitignore | 1 + demo/.env.json.example | 11 +++++++++++ demo/3_read_did_messages.js | 5 ++--- package-lock.json | 4 ++-- src/identity/hcs/did/hcs-did.ts | 1 - 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index b0a5c34..367d2a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /node_modules/ /dist/ +/demo/.env.json \ No newline at end of file diff --git a/demo/.env.json.example b/demo/.env.json.example index f896cbe..9dc6158 100644 --- a/demo/.env.json.example +++ b/demo/.env.json.example @@ -15,3 +15,14 @@ DID_IDENTIFIER: "did:hedera:testnet:..." COMMENT_7: DID private key DID_PRIVATE_KEY: "302e..." +EXAMPLE JSON CONFIG + +{ + "OPERATOR_ID": "0.0.12345", + + "OPERATOR_KEY": "302e...", + + "DID_IDENTIFIER": "did:hedera:tes...", + + "DID_PRIVATE_KEY": "302e..." +} \ No newline at end of file diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index a319d55..87349bd 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,9 +1,7 @@ - const { Client, Timestamp } = require("@hashgraph/sdk"); const { HcsDid } = require("../dist"); const { DID_IDENTIFIER } = require("./.env.json"); - async function main() { /** * Setup @@ -18,7 +16,8 @@ async function main() { /** * Read DID resolver setup */ - const result = await did.readMessages(Timestamp.fromDate("2022-02-21T07:58:03.082Z")); + //const result = await did.readMessages(Timestamp.fromDate("2022-02-21T07:58:03.082Z")); + const result = await did.readMessages(); result.forEach((msg) => { console.log("\n"); diff --git a/package-lock.json b/package-lock.json index 18f268f..aa8feff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@hashgraph/did-sdk-js", - "version": "0.1.1", + "version": "1.0.0", "license": "Apache-2.0", "dependencies": { "@hashgraph/sdk": "^2.8", diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 2b64800..fc1da7f 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -213,7 +213,6 @@ export class HcsDid { throw new DidError("Client configuration is missing"); } - console.log(`topicId: ${this.topicId} \n startTime: ${startTime}`); return new Promise((resolve, reject) => { new HcsDidEventMessageResolver(this.topicId, startTime) .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) From f73503b023289186e8905e61d07d9dcabfc5bbdf Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 22 Feb 2022 18:48:26 +1100 Subject: [PATCH 107/133] added async to read messages method --- src/identity/hcs/did/hcs-did.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index fc1da7f..eb81000 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -204,7 +204,7 @@ export class HcsDid { }); } - public readMessages(startTime: Timestamp): Promise { + public async readMessages(startTime: Timestamp): Promise { if (!this.identifier) { throw new DidError("DID is not registered"); } From 071a0bb46b1ac799429cdefc42cfe1f308213403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 22 Feb 2022 12:03:43 +0100 Subject: [PATCH 108/133] HcsDidEventMessageResolver always gives back envelopes; Remove HcsDid.readMessages --- demo/3_read_did_messages.js | 35 ++++++++++++------- .../hcs/did/hcs-did-event-message-resolver.ts | 9 +++-- src/identity/hcs/did/hcs-did.ts | 25 +------------ 3 files changed, 27 insertions(+), 42 deletions(-) diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 87349bd..930547e 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -11,24 +11,33 @@ async function main() { /** * Build DID instance */ - const did = new HcsDid({ identifier: DID_IDENTIFIER, client: client }); + const did = new HcsDid({ identifier: DID_IDENTIFIER }); /** * Read DID resolver setup */ - //const result = await did.readMessages(Timestamp.fromDate("2022-02-21T07:58:03.082Z")); - const result = await did.readMessages(); + new HcsDidEventMessageResolver(did.getTopicId()) + .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) + .whenFinished((envelopes) => { + envelopes.forEach((envelope) => { + const msg = envelope.open(); - result.forEach((msg) => { - console.log("\n"); - console.log("==================================================="); - console.log("\n"); - console.log("Message:"); - console.log(msg.toJsonTree()); - console.log("\n"); - console.log("Event:"); - console.log(msg.event.toJsonTree()); - }); + console.log("\n"); + console.log("==================================================="); + console.log("\n"); + console.log("Message:"); + console.log(msg.toJsonTree()); + console.log("\n"); + console.log("Event:"); + console.log(msg.event.toJsonTree()); + }); + console.log("\n"); + console.log("==================================================="); + console.log("DragonGlass Explorer:"); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + console.log("\n"); + }) + .execute(client); } main(); diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 125196f..bfb8137 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -16,10 +16,10 @@ export class HcsDidEventMessageResolver { public static DEFAULT_TIMEOUT: Long = Long.fromInt(30000); protected topicId: TopicId; - protected messages: HcsDidMessage[] = []; + protected messages: MessageEnvelope[] = []; private lastMessageArrivalTime: Long; - private resultsHandler: (input: HcsDidMessage[]) => void; + private resultsHandler: (input: MessageEnvelope[]) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; private readonly listener: HcsDidTopicListener; @@ -74,8 +74,7 @@ export class HcsDidEventMessageResolver { } this.existingSignatures.push(envelope.getSignature()); - const message: HcsDidMessage = envelope.open(); - this.messages.push(message); + this.messages.push(envelope); } /** @@ -104,7 +103,7 @@ export class HcsDidEventMessageResolver { * @param handler The results handler. * @return This resolver instance. */ - public whenFinished(handler: (input: HcsDidMessage[]) => void): HcsDidEventMessageResolver { + public whenFinished(handler: (input: MessageEnvelope[]) => void): HcsDidEventMessageResolver { this.resultsHandler = handler; return this; } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index eb81000..5a284de 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -192,7 +192,7 @@ export class HcsDid { new HcsDidEventMessageResolver(this.topicId) .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) .whenFinished((messages) => { - this.messages = messages; + this.messages = messages.map((msg) => msg.open()); this.document = new DidDocument(this.identifier, this.messages); resolve(this.document); }) @@ -204,29 +204,6 @@ export class HcsDid { }); } - public async readMessages(startTime: Timestamp): Promise { - if (!this.identifier) { - throw new DidError("DID is not registered"); - } - - if (!this.client) { - throw new DidError("Client configuration is missing"); - } - - return new Promise((resolve, reject) => { - new HcsDidEventMessageResolver(this.topicId, startTime) - .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) - .whenFinished((messages) => { - this.messages = messages; - resolve(this.messages); - }) - .onError((err) => { - reject(err); - }) - .execute(this.client); - }); - } - /** * Meta-information about DID */ From b3dd1de5afbcb39f8477d9a3bc846677beb4c023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 22 Feb 2022 13:00:49 +0100 Subject: [PATCH 109/133] Missing import fix --- demo/3_read_did_messages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index 930547e..ee65ab0 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -1,5 +1,5 @@ const { Client, Timestamp } = require("@hashgraph/sdk"); -const { HcsDid } = require("../dist"); +const { HcsDid, HcsDidEventMessageResolver } = require("../dist"); const { DID_IDENTIFIER } = require("./.env.json"); async function main() { From 929d536e3574c03f3956ea845395b165d5a0601c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 22 Feb 2022 13:26:40 +0100 Subject: [PATCH 110/133] Use TopicMessageQuery completion handler --- .../hcs/did/hcs-did-event-message-resolver.ts | 20 ++++++++++++++++--- .../hcs/did/hcs-did-topic-listener.ts | 5 +++++ src/utils/sleep.ts | 7 ------- 3 files changed, 22 insertions(+), 10 deletions(-) delete mode 100644 src/utils/sleep.ts diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index bfb8137..3c24789 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -1,6 +1,5 @@ import { Client, Timestamp, TopicId } from "@hashgraph/sdk"; import Long from "long"; -import { Sleep } from "../../../utils/sleep"; import { Validator } from "../../../utils/validator"; import { MessageEnvelope } from "../message-envelope"; import { HcsDidMessage } from "./hcs-did-message"; @@ -19,6 +18,7 @@ export class HcsDidEventMessageResolver { protected messages: MessageEnvelope[] = []; private lastMessageArrivalTime: Long; + private nextMessageArrivalTimeout; private resultsHandler: (input: MessageEnvelope[]) => void; private errorHandler: (input: Error) => void; private existingSignatures: string[]; @@ -49,6 +49,7 @@ export class HcsDidEventMessageResolver { .setEndTime(Timestamp.fromDate(new Date())) .setIgnoreErrors(false) .onError(this.errorHandler) + .onComplete(() => this.finish()) .subscribe(client, (msg) => { return this.handleMessage(msg); }); @@ -84,13 +85,26 @@ export class HcsDidEventMessageResolver { const timeDiff = Long.fromInt(Date.now()).sub(this.lastMessageArrivalTime); if (timeDiff.lt(this.noMoreMessagesTimeout)) { - await Sleep(this.noMoreMessagesTimeout.sub(timeDiff).toNumber()); - await this.waitOrFinish(); + if (this.nextMessageArrivalTimeout) { + clearTimeout(this.nextMessageArrivalTimeout); + } + this.nextMessageArrivalTimeout = setTimeout( + () => this.waitOrFinish(), + this.noMoreMessagesTimeout.sub(timeDiff).toNumber() + ); return; } + this.finish(); + } + + protected async finish(): Promise { this.resultsHandler(this.messages); + if (this.nextMessageArrivalTimeout) { + clearTimeout(this.nextMessageArrivalTimeout); + } + if (this.listener) { this.listener.unsubscribe(); } diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 7bc3e83..6db804e 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -219,4 +219,9 @@ export class HcsDidTopicListener { this.ignoreErrors = ignoreErrors; return this; } + + public onComplete(handler: () => void) { + this.query.setCompletionHandler(handler); + return this; + } } diff --git a/src/utils/sleep.ts b/src/utils/sleep.ts deleted file mode 100644 index 048c000..0000000 --- a/src/utils/sleep.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function Sleep(sleepTime: number): Promise { - return new Promise((resolve) => { - setTimeout(() => { - resolve(); - }, sleepTime); - }); -} From 291102228cf424e1e923f26e932ef2de37191b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Tue, 22 Feb 2022 14:01:53 +0100 Subject: [PATCH 111/133] Use existing helper function instead of building manual values map --- src/identity/did-resolver.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/identity/did-resolver.ts b/src/identity/did-resolver.ts index 026cd5d..20f8bc7 100644 --- a/src/identity/did-resolver.ts +++ b/src/identity/did-resolver.ts @@ -35,12 +35,6 @@ export function getResolver(client?: Client): Record { } export class HederaDidResolver { - private static readonly DEFAULT_CLIENTS = { - [DidSyntax.HEDERA_NETWORK_TESTNET]: Client.forTestnet(), - [DidSyntax.HEDERA_NETWORK_MAINNET]: Client.forMainnet(), - [DidSyntax.HEDERA_NETWORK_PREVIEWNET]: Client.forPreviewnet(), - }; - private client: Client; constructor(client?: Client) { @@ -52,7 +46,7 @@ export class HederaDidResolver { return this.client; } - return HederaDidResolver.DEFAULT_CLIENTS[networkName]; + return Client.forName(networkName); } async resolve( From ff914da5377fc69d8d9d292232a1aba04f1ba74c Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 25 Feb 2022 10:34:28 +1100 Subject: [PATCH 112/133] updated package-lock file --- package-lock.json | 14882 ++++++++++++++++++++++++++++++-------------- 1 file changed, 10089 insertions(+), 4793 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa8feff..e072e9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,10 +31,9 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", - "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dependencies": { "@jridgewell/trace-mapping": "^0.3.0" }, @@ -43,41 +42,35 @@ } }, "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, + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/highlight": "^7.10.4" } }, "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, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", - "dev": true, + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dependencies": { - "@ampproject/remapping": "^2.0.0", + "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", @@ -93,20 +86,43 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/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==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/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==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "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, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", - "dev": true, + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -116,20 +132,35 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/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, + "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==", + "peer": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, "engines": { - "node": ">=0.10.0" + "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==", + "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, "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", @@ -147,7 +178,71 @@ "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" + } + }, + "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==", + "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==", + "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==", + "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==", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -156,7 +251,18 @@ "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, + "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==", + "peer": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -168,7 +274,6 @@ "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, "dependencies": { "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", @@ -182,7 +287,6 @@ "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -194,7 +298,18 @@ "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, + "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==", + "peer": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -206,7 +321,6 @@ "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -215,10 +329,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -226,7 +339,19 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^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==", + "peer": true, + "dependencies": { "@babel/types": "^7.16.7" }, "engines": { @@ -237,7 +362,36 @@ "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" + } + }, + "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==", + "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==", + "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" } @@ -246,7 +400,6 @@ "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -254,11 +407,22 @@ "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==", + "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -270,7 +434,6 @@ "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, "engines": { "node": ">=6.9.0" } @@ -279,16 +442,29 @@ "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, + "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==", + "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.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", - "dev": true, + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", @@ -302,7 +478,6 @@ "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, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -316,7 +491,6 @@ "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, "dependencies": { "color-convert": "^1.9.0" }, @@ -328,7 +502,6 @@ "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, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -342,7 +515,6 @@ "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, "dependencies": { "color-name": "1.1.3" } @@ -350,14 +522,12 @@ "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 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/@babel/highlight/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" } @@ -366,7 +536,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, "engines": { "node": ">=4" } @@ -375,7 +544,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -384,10 +552,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "dev": true, + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -395,145 +562,179 @@ "node": ">=6.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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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.0.0-0" + "@babel/core": "^7.13.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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@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-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@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-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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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.0.0-0" + "@babel/core": "^7.12.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, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" }, "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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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-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, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", + "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-default-from": "^7.16.7" }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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-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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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-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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -542,13 +743,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -557,1333 +759,1476 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@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/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@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.0", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@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/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@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/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@grpc/grpc-js": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", - "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", + "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==", + "peer": true, "dependencies": { - "@grpc/proto-loader": "^0.6.4", - "@types/node": ">=12.12.47" + "@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": "^8.13.0 || >=10.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "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==", + "peer": true, "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.10.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@hashgraph/cryptography": { - "version": "1.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.0-beta.5.tgz", - "integrity": "sha512-Z2JprApRwQceOSCE8tjrIqfVf8/ZzT6UTHM/YGjzjMHfPfOVW3GgT8QhpRTb4U82AQKUa4FbfPLhXwM0W5ZS4w==", + "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==", + "peer": true, "dependencies": { - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", - "elliptic": "^6.5.4", - "expo-crypto": "^9.2.0", - "expo-random": "^11.2.0", - "js-base64": "^3.6.1", - "tweetnacl": "^1.0.3", - "utf8": "^3.0.0" + "@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": ">=12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@hashgraph/proto": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.2.tgz", - "integrity": "sha512-kuSZrKL6rvrqHltj+ZNr0zLsXqBJpVkchTBU7Wa++2Vzr7iuaH4kTKOozOcNKVgVDP8tEImOOP0DcyOb1t7VPQ==", + "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==", + "peer": true, "dependencies": { - "protobufjs": "^6.11.2" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@hashgraph/sdk": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.8.0.tgz", - "integrity": "sha512-uvciHsqvwgim+uUmfybVXr0EuBDncEQLLU6GI3wXwbXKzWTge4dw4JaEME+w4nvuaQ1p2uw3Feicy31mbH++PA==", + "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==", "dependencies": { - "@grpc/grpc-js": "^1.5.1", - "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.2", - "bignumber.js": "^9.0.2", - "crypto-js": "^4.1.1", - "js-base64": "^3.7.2", - "long": "^4.0.0", - "protobufjs": "^6.11.2", - "utf8": "^3.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=10.17.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "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==", "dependencies": { - "sprintf-js": "~1.0.2" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "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==", + "peer": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/helper-plugin-utils": "^7.16.7" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "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==", + "peer": true, "dependencies": { - "p-locate": "^4.1.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", + "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "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==", + "peer": true, "dependencies": { - "p-limit": "^2.2.0" + "@babel/helper-plugin-utils": "^7.8.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", + "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/console": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", - "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", - "slash": "^3.0.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", - "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", - "dev": true, + "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==", "dependencies": { - "@jest/console": "^27.5.0", - "@jest/reporters": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.0", - "jest-config": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-resolve-dependencies": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "jest-watcher": "^27.5.0", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/environment": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", - "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", - "dev": true, + "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==", "dependencies": { - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "jest-mock": "^27.5.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/fake-timers": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", - "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", - "dev": true, + "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==", "dependencies": { - "@jest/types": "^27.5.0", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/globals": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", - "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", - "dev": true, + "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==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/types": "^27.5.0", - "expect": "^27.5.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/reporters": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", - "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", - "dev": true, + "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==", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/source-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", - "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/test-result": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", - "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", - "dev": true, + "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==", "dependencies": { - "@jest/console": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", - "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", - "dev": true, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", "dependencies": { - "@jest/test-result": "^27.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-runtime": "^27.5.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/transform": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", - "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.0", - "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.9", - "jest-haste-map": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-util": "^27.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", - "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@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": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", - "dev": true, + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", - "dev": true + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", - "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@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/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "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==", + "peer": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "type-detect": "4.0.8" + "@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/@sinonjs/fake-timers": { - "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, + "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==", + "peer": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", + "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-flow": "^7.16.7" + }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/babel__core": { - "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, + "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==", + "peer": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/babel__generator": { - "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, + "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==", + "peer": true, "dependencies": { - "@babel/types": "^7.0.0" + "@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/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@types/node": "*" + "@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/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@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/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@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/@types/jest": { - "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, + "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==", + "peer": true, "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" + "@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/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/node": { - "version": "16.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", - "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" - }, - "node_modules/@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": 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, - "bin": { - "acorn": "bin/acorn" + "@babel/helper-create-regexp-features-plugin": "^7.16.7" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, + "node_modules/@babel/plugin-transform-object-assign": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", + "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "debug": "4" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" }, "engines": { - "node": ">= 6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "peer": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "peer": true, "dependencies": { - "ansi-regex": "^4.1.0" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", + "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "peer": true, "dependencies": { - "type-fest": "^0.21.3" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-escapes/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, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", + "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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==", + "peer": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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==", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "peer": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/babel-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", - "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-istanbul": { - "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, + "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==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", - "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@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-top-level-await": "^7.8.3" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-preset-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", - "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.0", - "babel-preset-current-node-syntax": "^1.0.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@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==", - "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/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "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==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, "engines": { - "node": "*" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/boxen/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, + "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==", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@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": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@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==", + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "@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" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" + "regenerator-runtime": "^0.13.4" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "node": ">=6.9.0" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dependencies": { - "fast-json-stable-stringify": "2.x" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, + "node_modules/@babel/template/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==", "dependencies": { - "node-int64": "^0.4.0" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "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 - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "@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": ">=8" + "node": ">=6.9.0" } }, - "node_modules/cacheable-request/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, + "node_modules/@babel/traverse/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==", "dependencies": { - "pump": "^3.0.0" + "@babel/highlight": "^7.16.7" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, + "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==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@expo/config": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", + "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "4.0.6", + "@expo/config-types": "^43.0.1", + "@expo/json-file": "8.2.33", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", + "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "peer": true, + "dependencies": { + "@expo/config-types": "^43.0.1", + "@expo/json-file": "8.2.33", + "@expo/plist": "0.0.15", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.4.23" + } + }, + "node_modules/@expo/config-plugins/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, + "node_modules/@expo/config-types": { + "version": "43.0.1", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", + "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "peer": true + }, + "node_modules/@expo/json-file": { + "version": "8.2.33", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", + "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", + "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "peer": true, + "dependencies": { + "@expo/config": "6.0.6", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "getenv": "^1.0.0", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/plist": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", + "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "peer": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.0", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/vector-icons": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", + "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "peer": true, + "dependencies": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", + "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", + "dependencies": { + "@grpc/proto-loader": "^0.6.4", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", + "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, "engines": { "node": ">=6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001308", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001308.tgz", - "integrity": "sha512-cUXbmSTlfG54vdGeA7guriSSAmzyxMWoHNN/DzQWbaLkDlcxrTu0Ox+dA4f8J8/SDXes00oC6iTx+watQYoVfA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "node_modules/@hashgraph/cryptography": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", + "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", + "dependencies": { + "bignumber.js": "^9.0.2", + "crypto-js": "^4.1.1", + "elliptic": "^6.5.4", + "expo-crypto": "^10.1.1", + "expo-random": "^12.1.1", + "js-base64": "^3.7.2", + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "expo": "^44.0.5" } }, - "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, + "node_modules/@hashgraph/proto": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", + "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "protobufjs": "^6.11.2" }, "engines": { - "node": ">=10" + "node": ">=10.0.0" + } + }, + "node_modules/@hashgraph/sdk": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", + "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", + "dependencies": { + "@grpc/grpc-js": "^1.5.3", + "@hashgraph/cryptography": "^1.1.0-beta.5", + "@hashgraph/proto": "2.1.3", + "bignumber.js": "^9.0.2", + "crypto-js": "^4.1.1", + "js-base64": "^3.7.2", + "long": "^4.0.0", + "protobufjs": "^6.11.2", + "utf8": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=10.17.0" } }, - "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==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "node_modules/@istanbuljs/load-nyc-config/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, "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" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" }, @@ -1891,659 +2236,689 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/@istanbuljs/load-nyc-config/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, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "node_modules/@istanbuljs/load-nyc-config/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, - "dependencies": { - "mimic-response": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "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==", + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==" - }, - "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==", + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "@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.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", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.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=", - "dev": true - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.1" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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 - }, - "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==", + "node_modules/@jest/environment": { + "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": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/@jest/fake-timers": { + "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": { - "cssom": "~0.3.6" + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@bcoe/v8-coverage": "^0.2.3", + "@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.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "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", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" }, "engines": { - "node": ">=6.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "node-notifier": { "optional": true } } }, - "node_modules/debug/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/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/@jest/reporters/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, - "dependencies": { - "mimic-response": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/@jest/source-map": { + "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.9", + "source-map": "^0.6.0" + }, "engines": { - "node": ">=4.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": 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==", + "node_modules/@jest/source-map/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, "engines": { "node": ">=0.10.0" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "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=", + "node_modules/@jest/test-result": { + "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.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/@jest/test-sequencer": { + "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.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/did-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", - "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" - }, - "node_modules/diff-sequences": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", - "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", + "node_modules/@jest/transform": { + "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.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.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.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "node_modules/@jest/transform/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, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", - "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, + "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==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "node": ">=6.0.0" } }, - "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==" + "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==" }, - "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, + "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==", "dependencies": { - "once": "^1.4.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "peer": true, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "peer": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">= 8" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "node_modules/@react-native/normalize-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", + "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", + "peer": true + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=6" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/@sinonjs/fake-timers": { + "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": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "defer-to-connect": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 6" } }, - "node_modules/expect": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", - "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", + "node_modules/@types/babel__core": { + "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": { - "@jest/types": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expo-crypto": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", - "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" - }, - "node_modules/expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", - "dependencies": { - "base64-js": "^1.3.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "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 + "node_modules/@types/babel__generator": { + "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" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { - "bser": "2.1.1" + "@babel/types": "^7.3.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/form-data": { + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "node_modules/@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "node_modules/@types/node": { + "version": "16.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", + "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" + }, + "node_modules/@types/prettier": { + "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/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", + "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", + "peer": true, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=10.0.0" } }, - "node_modules/function-bind": { + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "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==", + "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, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=6.9.0" + "node": ">=0.4.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.0" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "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" + "debug": "4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6.0.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "string-width": "^4.1.0" } }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "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": { - "ini": "1.3.7" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" @@ -2552,3332 +2927,6927 @@ "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, + "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==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, + "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==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=8.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "peer": 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==", + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 8" } }, - "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==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "peer": true }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } + "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/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "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==", + "peer": true, + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/babel-jest": { + "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": { - "whatwg-encoding": "^1.0.5" + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "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==", + "peer": true, + "dependencies": { + "object.assign": "^4.1.0" + } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/babel-plugin-istanbul": { + "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": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/babel-plugin-jest-hoist": { + "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": { - "agent-base": "6", - "debug": "4" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">= 6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, + "node_modules/babel-plugin-module-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", + "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "peer": true, + "dependencies": { + "find-babel-config": "^1.2.0", + "glob": "^7.1.6", + "pkg-up": "^3.1.0", + "reselect": "^4.0.0", + "resolve": "^1.13.1" + }, "engines": { - "node": ">=10.17.0" + "node": ">= 8.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" + "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==", + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, + "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==", + "peer": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "node_modules/babel-plugin-react-native-web": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", + "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "peer": true }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, + "node_modules/babel-preset-expo": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", + "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "peer": true, "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-react-jsx": "^7.12.17", + "@babel/preset-env": "^7.12.9", + "babel-plugin-module-resolver": "^4.1.0", + "babel-plugin-react-native-web": "~0.17.1", + "metro-react-native-babel-preset": "~0.64.0" } }, - "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==", + "node_modules/babel-preset-jest": { + "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": { - "has": "^1.0.3" + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "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==", + "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==" + }, + "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==", + "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/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "peer": true + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "peer": true, + "dependencies": { + "stream-buffers": "2.2.x" } }, - "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, + "node_modules/bplist-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", + "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, "engines": { - "node": ">=8" + "node": ">= 5.10.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "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, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, "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-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/istanbul-lib-coverage": { - "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, + "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==", + "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": ">=8" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "fast-json-stable-stringify": "2.x" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "peer": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "node_modules/istanbul-lib-report/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==", + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "peer": true + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "peer": true + }, + "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 + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "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==", + "node_modules/cacheable-request/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": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "pump": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", - "dev": true, + "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==", + "peer": true, "dependencies": { - "@jest/core": "^27.5.0", - "import-local": "^3.0.2", - "jest-cli": "^27.5.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-changed-files": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", - "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.0", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/jest-circus": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", - "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/jest-cli": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", - "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", - "dev": true, + "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==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "@jest/core": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", - "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.0", - "@jest/types": "^27.5.0", - "babel-jest": "^27.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-jasmine2": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", - "slash": "^3.0.0" + "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" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" + "node": ">= 8.10.0" }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/jest-config/node_modules/ci-info": { + "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/jest-diff": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", - "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-docblock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", - "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", - "dev": true, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/jest-each": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", - "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "dependencies": { - "@jest/types": "^27.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "mimic-response": "^1.0.0" } }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", - "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0", - "jsdom": "^16.6.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/jest-environment-node": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", - "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", - "dev": true, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-get-type": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", - "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==" }, - "node_modules/jest-haste-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", - "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "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": { - "@jest/types": "^27.5.0", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.0", - "jest-serializer": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "delayed-stream": "~1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">= 0.8" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", - "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", - "throat": "^6.0.1" - }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 10" } }, - "node_modules/jest-leak-detector": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", - "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "peer": true }, - "node_modules/jest-matcher-utils": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", - "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "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=" }, - "node_modules/jest-message-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", - "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-mock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", - "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.0", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": 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==", + "dependencies": { + "safe-buffer": "~5.1.1" } }, - "node_modules/jest-regex-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", - "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "peer": true }, - "node_modules/jest-resolve": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", - "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", - "dev": 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==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" + "browserslist": "^4.19.1", + "semver": "7.0.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", - "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-snapshot": "^27.5.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "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==", + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/jest-runner": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", - "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", - "dev": true, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, "dependencies": { - "@jest/console": "^27.5.0", - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-leak-detector": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4.8" } }, - "node_modules/jest-runtime": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", - "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/globals": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/jest-serializer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", - "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", - "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", - "@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.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.0", - "semver": "^7.3.2" + "cssom": "~0.3.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/jest-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", - "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", - "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==", "dependencies": { - "@jest/types": "^27.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "ms": "2.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/jest-util/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==", + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "node_modules/jest-validate": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", - "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "dependencies": { - "@jest/types": "^27.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", - "leven": "^3.1.0", - "pretty-format": "^27.5.0" + "mimic-response": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/jest-watcher": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", - "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": 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, - "dependencies": { - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.0", - "string-length": "^4.0.1" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-worker": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", - "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-base64": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", - "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" - }, - "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==", + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": 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==", + "peer": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "object-keys": "^1.0.12" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "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, - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "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==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } + "node_modules/did-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", + "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/diff-sequences": { + "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": ">=6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { - "package-json": "^6.3.0" + "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "is-obj": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "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/electron-to-chromium": { + "version": "1.4.72", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", + "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "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==", + "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==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "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": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "once": "^1.4.0" } }, - "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==", + "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": { - "semver": "^6.0.0" - }, + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, "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==", + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "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/makeerror": { - "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.5" - } - }, - "node_modules/merge-stream": { + "node_modules/escodegen": { "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/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, - "engines": { - "node": ">=8.6" - } - }, - "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" + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.6" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "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==", + "node_modules/escodegen/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, + "optional": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=4.0" } }, - "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/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/multiformats": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", - "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/execa/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": { - "ms": "^2.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/execa/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": ">=4" + "node": ">=8" } }, - "node_modules/nodemon/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==", + "node_modules/execa/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": { - "has-flag": "^3.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "node_modules/execa/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/execa/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": { - "abbrev": "1" + "isexe": "^2.0.0" }, "bin": { - "nopt": "bin/nopt.js" + "node-which": "bin/node-which" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "node_modules/expect": { + "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.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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" + "node_modules/expo": { + "version": "44.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", + "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.14.0", + "@expo/metro-config": "~0.2.6", + "@expo/vector-icons": "^12.0.4", + "babel-preset-expo": "~9.0.2", + "cross-spawn": "^6.0.5", + "expo-application": "~4.0.2", + "expo-asset": "~8.4.6", + "expo-constants": "~13.0.2", + "expo-file-system": "~13.1.3", + "expo-font": "~10.0.5", + "expo-keep-awake": "~10.0.2", + "expo-modules-autolinking": "0.5.5", + "expo-modules-core": "0.6.5", + "fbemitter": "^2.1.1", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "pretty-format": "^26.5.2", + "uuid": "^3.4.0" }, - "engines": { - "node": ">=8" + "bin": { + "expo": "bin/cli.js" + }, + "optionalDependencies": { + "expo-error-recovery": "~3.0.5" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true + "node_modules/expo-application": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", + "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "peer": true, + "peerDependencies": { + "expo": "*" + } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, + "node_modules/expo-asset": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", + "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "peer": true, "dependencies": { - "wrappy": "1" + "blueimp-md5": "^2.10.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "path-browserify": "^1.0.0", + "url-parse": "^1.4.4" } }, - "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, + "node_modules/expo-constants": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", + "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "peer": true, "dependencies": { - "mimic-fn": "^2.1.0" + "@expo/config": "^6.0.6", + "uuid": "^3.3.2" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-crypto": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", + "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-error-recovery": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", + "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "optional": true, + "peer": true, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-file-system": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", + "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "peer": true, + "dependencies": { + "@expo/config-plugins": "^4.0.2", + "uuid": "^3.4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "expo": "*" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "node_modules/expo-font": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", + "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "fontfaceobserver": "^2.1.0" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "expo": "*" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/expo-keep-awake": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", + "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "peer": true, + "peerDependencies": { + "expo": "*" } }, - "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, - "engines": { - "node": ">=6" + "node_modules/expo-modules-autolinking": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", + "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, + "node_modules/expo-modules-autolinking/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==", + "peer": true, "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/package-json/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, - "bin": { - "semver": "bin/semver.js" + "node_modules/expo-modules-autolinking/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "node_modules/expo-modules-core": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", + "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "peer": true, + "dependencies": { + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" + } }, - "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, + "node_modules/expo-random": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", + "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "dependencies": { + "base64-js": "^1.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "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, + "node_modules/expo/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expo/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "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, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "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==", + "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 }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, - "engines": { - "node": ">= 6" + "dependencies": { + "bser": "2.1.1" } }, - "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, + "node_modules/fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "peer": true, "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "fbjs": "^0.8.4" } }, - "node_modules/pkg-dir/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, + "node_modules/fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "peer": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/pkg-dir/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, + "node_modules/find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "peer": true, "dependencies": { - "p-locate": "^4.1.0" + "json5": "^0.5.1", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/pkg-dir/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, + "node_modules/find-babel-config/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "peer": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/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, - "dependencies": { - "p-limit": "^2.2.0" - }, + "node_modules/find-up/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==", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "node_modules/fontfaceobserver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", + "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "peer": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 6" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, + "node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "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, - "bin": { - "prettier": "bin-prettier.js" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.13.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/pretty-format": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", - "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "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==", + "peer": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8.0.0" } }, - "node_modules/pretty-format/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==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "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": ">= 6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "hasInstallScript": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" + "is-glob": "^4.0.1" }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "engines": { + "node": ">= 6" } }, - "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/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { + "node_modules/global-dirs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "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==", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "dependencies": { - "escape-goat": "^2.0.0" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "pump": "^3.0.0" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "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==" }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "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==", "dependencies": { - "picomatch": "^2.2.1" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=8.10.0" + "node": ">= 0.4.0" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, + "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==", "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.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==", + "peer": true, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "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" + "whatwg-encoding": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/resolve-from": { + "node_modules/https-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "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==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=10.17.0" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "peer": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "rimraf": "bin.js" + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { - "xmlchars": "^2.2.0" - }, + "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==" + }, + "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/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "semver": "^6.3.0" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, "bin": { - "semver": "bin/semver.js" + "is-ci": "bin.js" } }, - "node_modules/shebang-command": { + "node_modules/is-ci/node_modules/ci-info": { "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, + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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==", "dependencies": { - "shebang-regex": "^3.0.0" + "has": "^1.0.3" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, - "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==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "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, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "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": { - "escape-string-regexp": "^2.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=10" + "node": ">=0.12.0" } }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, + "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/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "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/strip-final-newline": { + "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-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "peer": true, + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "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": ">=6" + "node": ">=8" } }, - "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==", + "node_modules/istanbul-lib-instrument": { + "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": { - "has-flag": "^4.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "node_modules/istanbul-lib-instrument/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/supports-hyperlinks/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==", + "node_modules/istanbul-lib-source-maps": { + "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": { - "has-flag": "^4.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "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==", + "node_modules/istanbul-lib-source-maps/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, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "node_modules/istanbul-reports": { + "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", + "istanbul-lib-report": "^3.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/jest-changed-files": { + "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": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/jest-circus": { + "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": { - "is-number": "^7.0.0" + "@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.5.1", + "is-generator-fn": "^2.0.0", + "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" }, "engines": { - "node": ">=8.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "node_modules/jest-cli": { + "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": { - "nopt": "~1.0.10" + "@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.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" }, "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" + "jest": "bin/jest.js" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "node_modules/jest-config": { + "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": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" + "@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.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", + "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" }, "peerDependencies": { - "@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" + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { + "ts-node": { "optional": true } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/jest-docblock": { + "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": { - "prelude-ls": "~1.1.2" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/jest-each": { + "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.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, "engines": { - "node": ">=4" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/jest-environment-jsdom": { + "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.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/jest-environment-node": { + "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": { - "is-typedarray": "^1.0.0" + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "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/typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", + "node_modules/jest-get-type": { + "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, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=4.2.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "node_modules/jest-haste-map": { + "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": { - "debug": "^2.2.0" + "@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.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" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/undefsafe/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "@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.5.1", + "is-generator-fn": "^2.0.0", + "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": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/undefsafe/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/jest-leak-detector": { + "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": { - "crypto-random-string": "^2.0.0" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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==", + "node_modules/jest-matcher-utils": { + "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.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, "engines": { - "node": ">= 4.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "node_modules/jest-message-util": { + "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": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/jest-message-util/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, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/highlight": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/update-notifier/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==", + "node_modules/jest-mock": { + "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": { - "has-flag": "^4.0.0" + "@jest/types": "^27.5.1", + "@types/node": "*" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "node_modules/jest-regex-util": { + "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/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "node_modules/jest-resolve": { + "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": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=10.12.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/v8-to-istanbul/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==", + "node_modules/jest-resolve-dependencies": { + "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.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, "engines": { - "node": ">= 8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "node_modules/jest-runner": { + "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": { - "browser-process-hrtime": "^1.0.0" + "@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", + "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" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" + "node_modules/jest-runtime": { + "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", + "glob": "^7.1.3", + "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" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/jest-serializer": { + "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": { - "makeerror": "1.0.12" + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/jest-snapshot": { + "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/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@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.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.5.1", + "semver": "^7.3.2" + }, "engines": { - "node": ">=10.4" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/jest-util": { + "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": { - "iconv-lite": "0.4.24" + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/jest-watcher": { + "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": { - "string-width": "^4.0.0" + "@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.5.1", + "string-length": "^4.0.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "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, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "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==", + "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, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/chalk/supports-color?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/js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "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==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "canvas": { "optional": true } } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/xml-name-validator": { + "node_modules/json-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "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==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "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==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "peer": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "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=", + "peer": true + }, + "node_modules/lodash.frompairs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", + "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "peer": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "peer": 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.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "peer": true + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "peer": true + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "peer": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "peer": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=10" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", - "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + }, + "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, - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@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==", + "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, - "requires": { - "@babel/highlight": "^7.16.7" + "bin": { + "semver": "bin/semver.js" } }, - "@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==", + "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/makeerror": { + "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.5" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "peer": true, + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "peer": true, + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "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/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "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==" + }, + "node_modules/multiformats": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", + "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "peer": true + }, + "node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "peer": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/node-fetch/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "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==" + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/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/nodemon/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/npm-run-path/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/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "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=", + "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/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "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", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "peer": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, + "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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "peer": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "peer": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "peer": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "peer": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plist": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "peer": true, + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-format": { + "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": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/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/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "peer": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "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", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "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/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "peer": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.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==", + "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==", + "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==", + "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==", + "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==", + "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/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "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==", + "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=", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "peer": true + }, + "node_modules/reselect": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", + "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "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/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "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/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "peer": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "peer": true + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/simple-plist": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", + "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "peer": true, + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.0", + "plist": "^3.0.4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slugify": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "peer": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "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/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/sucrase": { + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", + "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "peer": true, + "dependencies": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "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==", + "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", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "peer": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "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", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "peer": true + }, + "node_modules/ts-jest": { + "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.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@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" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/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, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "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/ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "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==", + "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==", + "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==", + "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==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/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/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "peer": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "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", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "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.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "peer": true + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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=" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "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" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "peer": true, + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "peer": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "peer": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@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==" + }, "@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "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": { + "@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==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "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==", + "requires": { + "minimist": "^1.2.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@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==", + "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==", + "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==", + "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==", + "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==" + } + } + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==" + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==" + }, + "@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==" + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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=" + }, + "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=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "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==" + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "peer": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", + "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-default-from": "^7.16.7" + } + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": 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==", + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", + "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", + "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@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 - } + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", - "dev": true, + "@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==", + "peer": true, "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-compilation-targets": { + "@babel/plugin-transform-duplicate-keys": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "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 - } + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-environment-visitor": { + "@babel/plugin-transform-exponentiation-operator": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-function-name": { + "@babel/plugin-transform-flow-strip-types": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", + "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "peer": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-flow": "^7.16.7" } }, - "@babel/helper-get-function-arity": { + "@babel/plugin-transform-for-of": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-hoist-variables": { + "@babel/plugin-transform-function-name": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-module-imports": { + "@babel/plugin-transform-literals": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-module-transforms": { + "@babel/plugin-transform-member-expression-literals": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "peer": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", + "@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==", + "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==", + "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/helper-split-export-declaration": "^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==", + "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/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "@babel/helper-plugin-utils": { + "@babel/plugin-transform-modules-umd": { "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 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "peer": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } }, - "@babel/helper-simple-access": { + "@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==", + "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/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-split-export-declaration": { + "@babel/plugin-transform-object-assign": { "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, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", + "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/helper-validator-identifier": { + "@babel/plugin-transform-object-super": { "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 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } }, - "@babel/helper-validator-option": { + "@babel/plugin-transform-parameters": { "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 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } }, - "@babel/helpers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", - "dev": true, + "@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==", + "peer": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "peer": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", "@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, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", + "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "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, - "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, - "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, - "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 - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": 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, - "requires": { - "has-flag": "^3.0.0" - } - } + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "dev": true + "@babel/plugin-transform-react-jsx-source": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", + "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "peer": true, + "requires": { + "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "regenerator-transform": "^0.14.2" } }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "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==", + "peer": true + } } }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@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==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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==", + "peer": true + } } }, - "@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, + "@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==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@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/plugin-syntax-typescript": { - "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, + "@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "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, "requires": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" + }, + "dependencies": { + "@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==", + "requires": { + "@babel/highlight": "^7.16.7" + } + } } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dev": true, + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@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.0", + "@babel/parser": "^7.17.3", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "@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==", + "requires": { + "@babel/highlight": "^7.16.7" + } + } } }, "@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, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -5889,10 +9859,118 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@expo/config": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", + "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "peer": true, + "requires": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "4.0.6", + "@expo/config-types": "^43.0.1", + "@expo/json-file": "8.2.33", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + } + }, + "@expo/config-plugins": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", + "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "peer": true, + "requires": { + "@expo/config-types": "^43.0.1", + "@expo/json-file": "8.2.33", + "@expo/plist": "0.0.15", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.4.23" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@expo/config-types": { + "version": "43.0.1", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", + "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "peer": true + }, + "@expo/json-file": { + "version": "8.2.33", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", + "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "peer": true, + "requires": { + "@babel/code-frame": "~7.10.4", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "@expo/metro-config": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", + "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "peer": true, + "requires": { + "@expo/config": "6.0.6", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "getenv": "^1.0.0", + "sucrase": "^3.20.0" + } + }, + "@expo/plist": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", + "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "peer": true, + "requires": { + "@xmldom/xmldom": "~0.7.0", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "@expo/vector-icons": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", + "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "peer": true, + "requires": { + "lodash.frompairs": "^4.0.1", + "lodash.isequal": "^4.5.0", + "lodash.isstring": "^4.0.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "lodash.template": "^4.5.0" + } + }, "@grpc/grpc-js": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", - "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", + "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -5911,36 +9989,36 @@ } }, "@hashgraph/cryptography": { - "version": "1.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.0-beta.5.tgz", - "integrity": "sha512-Z2JprApRwQceOSCE8tjrIqfVf8/ZzT6UTHM/YGjzjMHfPfOVW3GgT8QhpRTb4U82AQKUa4FbfPLhXwM0W5ZS4w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", + "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", "requires": { - "bignumber.js": "^9.0.1", - "crypto-js": "^4.0.0", + "bignumber.js": "^9.0.2", + "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "expo-crypto": "^9.2.0", - "expo-random": "^11.2.0", - "js-base64": "^3.6.1", + "expo-crypto": "^10.1.1", + "expo-random": "^12.1.1", + "js-base64": "^3.7.2", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" } }, "@hashgraph/proto": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.2.tgz", - "integrity": "sha512-kuSZrKL6rvrqHltj+ZNr0zLsXqBJpVkchTBU7Wa++2Vzr7iuaH4kTKOozOcNKVgVDP8tEImOOP0DcyOb1t7VPQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", + "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", "requires": { "protobufjs": "^6.11.2" } }, "@hashgraph/sdk": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.8.0.tgz", - "integrity": "sha512-uvciHsqvwgim+uUmfybVXr0EuBDncEQLLU6GI3wXwbXKzWTge4dw4JaEME+w4nvuaQ1p2uw3Feicy31mbH++PA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", + "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", "requires": { - "@grpc/grpc-js": "^1.5.1", + "@grpc/grpc-js": "^1.5.3", "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.2", + "@hashgraph/proto": "2.1.3", "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "js-base64": "^3.7.2", @@ -5962,15 +10040,6 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5981,16 +10050,6 @@ "path-exists": "^4.0.0" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6017,6 +10076,12 @@ "requires": { "p-limit": "^2.2.0" } + }, + "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 } } }, @@ -6027,49 +10092,49 @@ "dev": true }, "@jest/console": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", - "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "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.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", - "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", + "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.5.0", - "@jest/reporters": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@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.9", - "jest-changed-files": "^27.5.0", - "jest-config": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-resolve-dependencies": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "jest-watcher": "^27.5.0", + "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", @@ -6077,53 +10142,53 @@ } }, "@jest/environment": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", - "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", + "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.5.0", - "@jest/types": "^27.5.0", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0" + "jest-mock": "^27.5.1" } }, "@jest/fake-timers": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", - "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", + "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.5.0", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "@jest/globals": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", - "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", + "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.5.0", - "@jest/types": "^27.5.0", - "expect": "^27.5.0" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" } }, "@jest/reporters": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", - "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", + "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.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@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", @@ -6135,79 +10200,115 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "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", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.1.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 + } } }, "@jest/source-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", - "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", + "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.9", "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 + } } }, "@jest/test-result": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", - "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", + "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.5.0", - "@jest/types": "^27.5.0", + "@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.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", - "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", + "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.5.0", + "@jest/test-result": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-runtime": "^27.5.0" + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" } }, "@jest/transform": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", - "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", + "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.5.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.9", - "jest-haste-map": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.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 + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } } }, "@jest/types": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", - "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", + "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", @@ -6218,27 +10319,50 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", - "dev": true + "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==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", - "dev": true + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", - "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", - "dev": true, + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "peer": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "peer": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "peer": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -6293,6 +10417,12 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, + "@react-native/normalize-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", + "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", + "peer": true + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -6385,14 +10515,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -6401,18 +10529,17 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", "dev": true, "requires": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, @@ -6422,14 +10549,14 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "16.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.7.tgz", - "integrity": "sha512-bxWC4rgIF/FjM7JsPvpk6ZKGITgw27qsYCbi6h4kWZWYpchOLENgvFaRBZUc64Q/M1y+X2EteahRbyo8QFCKdw==" + "version": "16.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", + "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" }, "@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "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": { @@ -6450,8 +10577,13 @@ "@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "@xmldom/xmldom": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", + "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", + "peer": true }, "abab": { "version": "2.0.5", @@ -6505,52 +10637,12 @@ } }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-escapes": { @@ -6560,14 +10652,6 @@ "dev": true, "requires": { "type-fest": "^0.21.3" - }, - "dependencies": { - "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 - } } }, "ansi-regex": { @@ -6583,6 +10667,12 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "peer": true + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -6593,28 +10683,58 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "peer": 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==", + "peer": true + }, "babel-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", - "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", + "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.5.0", - "@jest/types": "^27.5.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.0", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" } }, + "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==", + "peer": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -6629,9 +10749,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", - "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", + "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", @@ -6640,6 +10760,63 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-module-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", + "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "peer": true, + "requires": { + "find-babel-config": "^1.2.0", + "glob": "^7.1.6", + "pkg-up": "^3.1.0", + "reselect": "^4.0.0", + "resolve": "^1.13.1" + } + }, + "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==", + "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==", + "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==", + "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==", + "peer": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-react-native-web": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", + "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "peer": true + }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -6660,27 +10837,46 @@ "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, + "babel-preset-expo": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", + "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "peer": true, + "requires": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-react-jsx": "^7.12.17", + "@babel/preset-env": "^7.12.9", + "babel-plugin-module-resolver": "^4.1.0", + "babel-plugin-react-native-web": "~0.17.1", + "metro-react-native-babel-preset": "~0.64.0" + } + }, "babel-preset-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", - "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", + "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.5.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==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "peer": true + }, "bignumber.js": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", @@ -6692,53 +10888,69 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "peer": true + }, "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "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" - } + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, + "bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "peer": true, + "requires": { + "stream-buffers": "2.2.x" + } + }, + "bplist-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", + "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "peer": true, + "requires": { + "big-integer": "1.6.x" + } + }, "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" @@ -6748,7 +10960,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -6765,15 +10976,14 @@ "dev": true }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", + "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001312", + "electron-to-chromium": "^1.4.71", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -6795,6 +11005,28 @@ "node-int64": "^0.4.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "peer": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "peer": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "peer": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6833,6 +11065,16 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -6846,30 +11088,17 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001308", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001308.tgz", - "integrity": "sha512-cUXbmSTlfG54vdGeA7guriSSAmzyxMWoHNN/DzQWbaLkDlcxrTu0Ox+dA4f8J8/SDXes00oC6iTx+watQYoVfA==", - "dev": true + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" }, "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" - } - } } }, "char-regex": { @@ -6878,10 +11107,16 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "peer": true + }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -6895,9 +11130,9 @@ } }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "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 }, "cjs-module-lexer": { @@ -6965,11 +11200,22 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { "version": "5.0.1", @@ -6983,34 +11229,73 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } } }, "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, "requires": { "safe-buffer": "~5.1.1" + } + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "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==", + "peer": true, + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" }, "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 + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "peer": 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, + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "peer": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } } }, "crypto-js": { @@ -7059,20 +11344,11 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" - }, - "dependencies": { - "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 - } } }, "decimal.js": { @@ -7120,6 +11396,15 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "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==", + "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", @@ -7138,9 +11423,9 @@ "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" }, "diff-sequences": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", - "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", + "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": { @@ -7176,10 +11461,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", - "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", - "dev": true + "version": "1.4.72", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", + "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" }, "elliptic": { "version": "6.5.4", @@ -7206,6 +11490,15 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -7215,6 +11508,15 @@ "once": "^1.4.0" } }, + "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", @@ -7226,6 +11528,12 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", @@ -7237,6 +11545,15 @@ "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" + }, + "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, + "optional": true + } } }, "esprima": { @@ -7254,8 +11571,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "execa": { "version": "5.1.1", @@ -7274,11 +11590,46 @@ "strip-final-newline": "^2.0.0" }, "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "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" + } + }, + "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 + }, + "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 + }, + "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" + } } } }, @@ -7289,30 +11640,214 @@ "dev": true }, "expect": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", - "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", - "dev": true, + "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.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "expo": { + "version": "44.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", + "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "peer": true, + "requires": { + "@babel/runtime": "^7.14.0", + "@expo/metro-config": "~0.2.6", + "@expo/vector-icons": "^12.0.4", + "babel-preset-expo": "~9.0.2", + "cross-spawn": "^6.0.5", + "expo-application": "~4.0.2", + "expo-asset": "~8.4.6", + "expo-constants": "~13.0.2", + "expo-error-recovery": "~3.0.5", + "expo-file-system": "~13.1.3", + "expo-font": "~10.0.5", + "expo-keep-awake": "~10.0.2", + "expo-modules-autolinking": "0.5.5", + "expo-modules-core": "0.6.5", + "fbemitter": "^2.1.1", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "pretty-format": "^26.5.2", + "uuid": "^3.4.0" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "peer": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "peer": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + } + } + }, + "expo-application": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", + "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "peer": true, + "requires": {} + }, + "expo-asset": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", + "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "peer": true, "requires": { - "@jest/types": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0" + "blueimp-md5": "^2.10.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "path-browserify": "^1.0.0", + "url-parse": "^1.4.4" + } + }, + "expo-constants": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", + "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "peer": true, + "requires": { + "@expo/config": "^6.0.6", + "uuid": "^3.3.2" } }, "expo-crypto": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-9.2.0.tgz", - "integrity": "sha512-jc9E7jHlOT8fYs64DIsSOdnLtxtIK1pV78O/nBamPwKdGrvFSNqMSFndxyVSuEimBNoPPNRwN+4Pb4W1RRltJA==" + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", + "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "requires": {} + }, + "expo-error-recovery": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", + "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "optional": true, + "peer": true, + "requires": {} + }, + "expo-file-system": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", + "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "peer": true, + "requires": { + "@expo/config-plugins": "^4.0.2", + "uuid": "^3.4.0" + } + }, + "expo-font": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", + "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "peer": true, + "requires": { + "fontfaceobserver": "^2.1.0" + } + }, + "expo-keep-awake": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", + "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "peer": true, + "requires": {} + }, + "expo-modules-autolinking": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", + "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "peer": true, + "requires": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "dependencies": { + "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==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true + } + } + }, + "expo-modules-core": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", + "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "peer": true, + "requires": { + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" + } }, "expo-random": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-11.2.0.tgz", - "integrity": "sha512-kgBJBB02iCX/kpoTHN57V7b4hWOCj4eACIQDl7bN94lycUcZu62T00P/rVZIcE/29x0GAi+Pw5ZWj0NlqBsMQQ==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", + "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", "requires": { "base64-js": "^1.3.0" } }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "peer": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "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", @@ -7325,6 +11860,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -7334,15 +11878,80 @@ "bser": "2.1.1" } }, + "fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "peer": true, + "requires": { + "fbjs": "^0.8.4" + } + }, + "fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "peer": true, + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "peer": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "peer": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "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==", + "peer": true + } + } + }, + "fontfaceobserver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", + "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "peer": true + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -7354,11 +11963,22 @@ "mime-types": "^2.1.12" } }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.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 + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -7370,20 +11990,29 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "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 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -7391,19 +12020,21 @@ "dev": true }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "peer": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7417,25 +12048,23 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } }, "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "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": "1.3.7" + "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 + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "got": { "version": "9.6.0", @@ -7454,19 +12083,28 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } } }, "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 + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "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" } @@ -7474,8 +12112,13 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "peer": true }, "has-yarn": { "version": "2.1.0", @@ -7551,12 +12194,12 @@ "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "peer": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ignore-by-default": { @@ -7584,14 +12227,12 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "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" @@ -7603,9 +12244,24 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "peer": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "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-binary-path": { @@ -7624,13 +12280,20 @@ "dev": true, "requires": { "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + } } }, "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" } @@ -7638,8 +12301,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -7653,35 +12315,33 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "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": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { "version": "2.0.0", @@ -7722,8 +12382,17 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "peer": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -7761,17 +12430,6 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.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" - } - } } }, "istanbul-lib-source-maps": { @@ -7783,6 +12441,14 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + }, + "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 + } } }, "istanbul-reports": { @@ -7796,273 +12462,278 @@ } }, "jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", + "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.5.0", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.5.0" + "jest-cli": "^27.5.1" } }, "jest-changed-files": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", - "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "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.5.0", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", - "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "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.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@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.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", - "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", + "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.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@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.9", "import-local": "^3.0.2", - "jest-config": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", - "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "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.8.0", - "@jest/test-sequencer": "^27.5.0", - "@jest/types": "^27.5.0", - "babel-jest": "^27.5.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.9", - "jest-circus": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-jasmine2": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "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.5.0", - "slash": "^3.0.0" - }, - "dependencies": { - "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 - } + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", - "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "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.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-docblock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", - "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", - "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "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.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-environment-jsdom": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", - "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "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.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", - "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", + "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.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "jest-get-type": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", - "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", - "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "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.5.0", + "@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.9", - "jest-regex-util": "^27.5.0", - "jest-serializer": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", - "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "requires": { - "@jest/environment": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@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.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", - "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", + "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.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-matcher-utils": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", - "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", + "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.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-message-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", - "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "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.5.0", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" + }, + "dependencies": { + "@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, + "requires": { + "@babel/highlight": "^7.16.7" + } + } } }, "jest-mock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", - "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "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.5.0", + "@jest/types": "^27.5.1", "@types/node": "*" } }, @@ -8074,103 +12745,103 @@ "requires": {} }, "jest-regex-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", - "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", - "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", + "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.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", - "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", + "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.5.0", - "jest-regex-util": "^27.5.0", - "jest-snapshot": "^27.5.0" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" } }, "jest-runner": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", - "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", + "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.5.0", - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@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", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-leak-detector": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "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.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", - "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/globals": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.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", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", + "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" } }, "jest-serializer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", - "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "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": "*", @@ -8178,9 +12849,9 @@ } }, "jest-snapshot": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", - "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "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", @@ -8188,70 +12859,51 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@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.5.0", + "expect": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "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.5.0", + "pretty-format": "^27.5.1", "semver": "^7.3.2" - }, - "dependencies": { - "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" - } - } } }, "jest-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", - "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", + "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.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "dependencies": { - "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 - } } }, "jest-validate": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", - "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "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.5.0", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.5.0" + "pretty-format": "^27.5.1" }, "dependencies": { "camelcase": { @@ -8263,29 +12915,40 @@ } }, "jest-watcher": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", - "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "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.5.0", - "@jest/types": "^27.5.0", + "@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.5.0", + "jest-util": "^27.5.1", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", - "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "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": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "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" + } + } } }, "js-base64": { @@ -8296,8 +12959,17 @@ "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } }, "jsdom": { "version": "16.7.0", @@ -8337,8 +13009,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { "version": "3.0.0", @@ -8346,13 +13017,37 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "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 + }, "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, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "peer": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": 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==", + "peer": true + } } }, "keyv": { @@ -8395,28 +13090,112 @@ "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==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "peer": true + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "peer": true + }, + "lodash.frompairs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", + "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", + "peer": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "peer": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "peer": 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.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "peer": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "peer": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "peer": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "peer": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -8427,7 +13206,6 @@ "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" } @@ -8464,17 +13242,78 @@ "tmpl": "1.0.5" } }, + "md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "peer": true, + "requires": { + "buffer-alloc": "^1.1.0" + } + }, "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 }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "peer": true + }, + "metro-react-native-babel-preset": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", + "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "peer": true, + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -8518,10 +13357,9 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -8529,8 +13367,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 + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "moment": { "version": "2.29.1", @@ -8538,15 +13375,25 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multiformats": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.2.tgz", - "integrity": "sha512-1dKng7RkBelbEZQQD2zvdzYKgUmtggpWl+GXQBYhnEGGkV6VIYfWgV3VSeyhcUFFEelI5q4D0etCJZ7fbuiamQ==" + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", + "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "peer": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "natural-compare": { "version": "1.4.0", @@ -8554,6 +13401,30 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "peer": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "peer": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "peer": true + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8561,27 +13432,26 @@ "dev": true }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" }, "nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", "dev": true, "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" }, "dependencies": { "debug": { @@ -8599,6 +13469,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8638,6 +13514,14 @@ "dev": true, "requires": { "path-key": "^3.0.0" + }, + "dependencies": { + "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 + } } }, "nwsapi": { @@ -8646,11 +13530,34 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "peer": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "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==", + "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" } @@ -8684,11 +13591,28 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "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 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "package-json": { "version": "6.5.0", @@ -8710,53 +13634,66 @@ } } }, + "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", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "peer": 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 + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "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 + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "peer": 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 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "pkg-dir": { "version": "4.2.0", @@ -8773,39 +13710,111 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "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, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + } + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "peer": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "peer": true, + "requires": { + "locate-path": "^3.0.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, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "peer": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "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, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "peer": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^2.0.0" } } } }, + "plist": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "peer": true, + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "dependencies": { + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "peer": true + } + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -8825,9 +13834,9 @@ "dev": true }, "pretty-format": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", - "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", + "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": { "ansi-regex": "^5.0.1", @@ -8843,6 +13852,15 @@ } } }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "peer": true, + "requires": { + "asap": "~2.0.3" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -8910,6 +13928,18 @@ "escape-goat": "^2.0.0" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "peer": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "peer": true + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -8922,6 +13952,12 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -8933,8 +13969,13 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "peer": true }, "readdirp": { "version": "3.6.0", @@ -8945,6 +13986,50 @@ "picomatch": "^2.2.1" } }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "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==", + "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==", + "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==", + "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==", + "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" + } + }, "registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -8963,16 +14048,56 @@ "rc": "^1.2.8" } }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "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==", + "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=", + "peer": true + } + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "peer": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "peer": true + }, + "reselect": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", + "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "peer": true + }, "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", @@ -8991,8 +14116,7 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve.exports": { "version": "1.1.0", @@ -9009,6 +14133,12 @@ "lowercase-keys": "^1.0.0" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "peer": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9018,11 +14148,30 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "peer": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "peer": true }, "saxes": { "version": "5.0.1", @@ -9034,10 +14183,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "semver-diff": { "version": "3.1.1", @@ -9056,26 +14204,42 @@ } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "peer": true + }, "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, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "peer": true, "requires": { - "shebang-regex": "^3.0.0" + "shebang-regex": "^1.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 + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "peer": true }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-plist": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", + "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "peer": true, + "requires": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.0", + "plist": "^3.0.4" + } }, "sisteransi": { "version": "1.0.5", @@ -9086,14 +14250,18 @@ "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==" + }, + "slugify": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", + "peer": true }, "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 + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-support": { "version": "0.5.21", @@ -9103,6 +14271,14 @@ "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 + } } }, "sprintf-js": { @@ -9118,16 +14294,14 @@ "dev": true, "requires": { "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } } }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "peer": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -9139,21 +14313,21 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -9168,11 +14342,38 @@ "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 + }, + "sucrase": { + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", + "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "peer": true, + "requires": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "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, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -9185,24 +14386,12 @@ "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.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" - } - } } }, "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 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "symbol-tree": { "version": "3.2.4", @@ -9210,12 +14399,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -9237,6 +14420,24 @@ "minimatch": "^3.0.4" } }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "peer": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "peer": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -9252,8 +14453,7 @@ "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 + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-readable-stream": { "version": "1.0.0", @@ -9265,7 +14465,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -9288,6 +14487,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": { @@ -9299,6 +14506,12 @@ "punycode": "^2.1.1" } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "peer": true + }, "ts-jest": { "version": "27.1.3", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", @@ -9315,13 +14528,13 @@ "yargs-parser": "20.x" }, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "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, "requires": { - "lru-cache": "^6.0.0" + "minimist": "^1.2.5" } } } @@ -9347,9 +14560,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "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 }, "typedarray-to-buffer": { @@ -9362,37 +14575,51 @@ } }, "typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true }, + "ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "peer": true + }, "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "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==", + "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==", + "peer": true, "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "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==", + "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==", + "peer": true + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -9403,53 +14630,54 @@ } }, "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 + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true }, "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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==", + "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": { - "has-flag": "^4.0.0" + "lru-cache": "^6.0.0" } } } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "peer": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -9464,6 +14692,12 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "peer": true + }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -9528,8 +14762,25 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "peer": true + }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -9548,10 +14799,10 @@ } }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, "requires": { "isexe": "^2.0.0" } @@ -9584,28 +14835,44 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "peer": true, "requires": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.2" } }, "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", "dev": true, "requires": {} }, + "xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "peer": true, + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "peer": true + } + } + }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -9618,6 +14885,30 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "peer": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "peer": true + } + } + }, + "xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "peer": true + }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -9632,8 +14923,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "16.2.0", @@ -9650,9 +14940,15 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true } } } From 743dc71a97b2d41983717d8d37281bca6f799caf Mon Sep 17 00:00:00 2001 From: elena Date: Tue, 8 Mar 2022 15:53:42 +1100 Subject: [PATCH 113/133] style: Fix some typos and add some small fixes. (MEE-3225). --- CHANGELOG.md | 2 +- .../sequence_diagram/did-registration.mmd | 12 ++++++------ documentation/sequence_diagram/did-resolve.mmd | 2 +- src/identity/hcs/did/event/hcs-did-event.ts | 18 ++++++------------ .../hcs/did/hcs-did-event-message-resolver.ts | 2 +- src/utils/ed25519PubCodec.ts | 2 +- test/integration/hcs-did.test.ts | 14 +++++++------- 7 files changed, 23 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2727d2d..4c64f7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Generation of decentralized identifiers and creation of DID documents based on old [Hedera DID Method][did-method-spec] * Creation of `identity networks` within `appnets`. * Address book - a file on `Hedera File Service` that provides information about HCS topics and `appnet servers`. -* Creation and initialization of the `VC topic` - an HCS topic playing a role of verifiable credentials registry. +* Creation and initialization of the `VC topic` - an HCS topic playing a role of verifiable credentials' registry. * Creation (publishing), update, deletion and resolution of DID documents in `appnet identity networks`. * Issuance, revocation and status verification of `Verifiable Credentials`. diff --git a/documentation/sequence_diagram/did-registration.mmd b/documentation/sequence_diagram/did-registration.mmd index 59e6d49..c33fe08 100644 --- a/documentation/sequence_diagram/did-registration.mmd +++ b/documentation/sequence_diagram/did-registration.mmd @@ -4,8 +4,8 @@ Title: DID Registration participant App as Application participant SDK as DID JS SDK participant HSDK as Hashgraph JS SDK - participant HCS as Hededera Consensus Service - participant HMN as Hedera Mirro Node + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node alt register a DID @@ -15,15 +15,15 @@ App ->> SDK: Register DID with DPK SDK ->> HSDK: Build Topic Create Transaction
By setting Transaction Fees
AmdinKey, SubmitKey
singed by DPK SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) HSDK ->> HCS: Create Private Topic -HCS ->> HMN: Propogate Topic +HCS ->> HMN: Propagate Topic SDK ->> HSDK: Request Receipt for Transaction -HSDK --> SDK: send reecipt with Topic ID +HSDK --> SDK: send receipt with Topic ID SDK ->> SDK: Build did identifier with topic id -SDK ->> SDK: create DID owner Event
with identiefier +SDK ->> SDK: create DID owner Event
with identifier SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) HSDK ->> HCS: Submit message to Topic -HCS ->> HMN: Propogate Message
to Topic +HCS ->> HMN: Propagate Message
to Topic SDK ->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) end diff --git a/documentation/sequence_diagram/did-resolve.mmd b/documentation/sequence_diagram/did-resolve.mmd index bee2749..f061692 100644 --- a/documentation/sequence_diagram/did-resolve.mmd +++ b/documentation/sequence_diagram/did-resolve.mmd @@ -18,7 +18,7 @@ HSDK ->> HMN: Subscribe to Topic HMN -->> HSDK: receive all messages HSDK -->> SDK: receive all messages SDK ->> SDK: extract all Events from messages -SDK ->> SDK: proccess events +SDK ->> SDK: process events SDK ->> SDK: generate DID Document SDK ->> App: send DID Document end diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index 1f8d882..d74e20c 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -34,11 +34,9 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); - if (this.OWNER_KEY_POSTFIX_REGEX.test(id) === false) { - return false; - } + return this.OWNER_KEY_POSTFIX_REGEX.test(id) !== false; + - return true; } protected isServiceEventIdValid(eventId: string) { @@ -50,11 +48,9 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); - if (this.SERVICE_ID_POSTFIX_REGEX.test(id) === false) { - return false; - } + return this.SERVICE_ID_POSTFIX_REGEX.test(id) !== false; + - return true; } protected isKeyEventIdValid(eventId: string) { @@ -66,10 +62,8 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); - if (this.KEY_ID_POSTFIX_REGEX.test(id) === false) { - return false; - } + return this.KEY_ID_POSTFIX_REGEX.test(id) !== false; + - return true; } } diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 3c24789..4432a7c 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -95,7 +95,7 @@ export class HcsDidEventMessageResolver { return; } - this.finish(); + await this.finish(); } protected async finish(): Promise { diff --git a/src/utils/ed25519PubCodec.ts b/src/utils/ed25519PubCodec.ts index 1116dfc..54d5490 100644 --- a/src/utils/ed25519PubCodec.ts +++ b/src/utils/ed25519PubCodec.ts @@ -12,7 +12,7 @@ import varint from "varint"; */ export class Ed25519PubCodec implements BlockCodec { - // values retrived from https://raw.githubusercontent.com/multiformats/multicodec/master/table.csv + // values retrieved from https://raw.githubusercontent.com/multiformats/multicodec/master/table.csv name: string = "ed25519-pub"; code: number = 0xed; encode(data: Uint8Array): ByteView { diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 7aadd29..e7f8903 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -1010,13 +1010,13 @@ describe("HcsDid", () => { async function readTopicMessages(topicId, client, timeout = null) { const messages = []; - new TopicMessageQuery() - .setTopicId(topicId) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, null, (msg) => { - messages.push(msg); - }); + await new TopicMessageQuery() + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, null, (msg) => { + messages.push(msg); + }); /** * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read From 8a784d50db0c063aa53ede0347902b1f74aec948 Mon Sep 17 00:00:00 2001 From: elena Date: Wed, 9 Mar 2022 11:12:46 +1100 Subject: [PATCH 114/133] docs: Add a few diagrams. --- .../sequence_diagram/did-add-attribute.mmd | 18 +++++++++++++++ .../sequence_diagram/did-delegate.mmd | 23 +++++++++++++++++++ documentation/sequence_diagram/did-delete.mmd | 18 +++++++++++++++ .../sequence_diagram/did-registration.mmd | 7 +++--- .../sequence_diagram/did-resolve.mmd | 18 +++++++-------- .../sequence_diagram/did-revoke-attribute.mmd | 18 +++++++++++++++ .../sequence_diagram/did-update-attribute.mmd | 18 +++++++++++++++ 7 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 documentation/sequence_diagram/did-add-attribute.mmd create mode 100644 documentation/sequence_diagram/did-delegate.mmd create mode 100644 documentation/sequence_diagram/did-delete.mmd create mode 100644 documentation/sequence_diagram/did-revoke-attribute.mmd create mode 100644 documentation/sequence_diagram/did-update-attribute.mmd diff --git a/documentation/sequence_diagram/did-add-attribute.mmd b/documentation/sequence_diagram/did-add-attribute.mmd new file mode 100644 index 0000000..92d57fb --- /dev/null +++ b/documentation/sequence_diagram/did-add-attribute.mmd @@ -0,0 +1,18 @@ +sequenceDiagram +Title: Add DID attribute + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node + + +alt Add DID attribute + +App ->> SDK: Send Add attribute DID request with identifier and PK +SDK ->> HSDK: Build Client (Set account that will pay for transaction) +SDK ->> HMN: Send Add DID attribute Event +HMN ->> SDK: Ack +SDK ->> App: Send DID Identifier +end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-delegate.mmd b/documentation/sequence_diagram/did-delegate.mmd new file mode 100644 index 0000000..90cd017 --- /dev/null +++ b/documentation/sequence_diagram/did-delegate.mmd @@ -0,0 +1,23 @@ +sequenceDiagram +Title: DID Delegate + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node + + +alt Delegate a DID + +App ->> HSDK: Build Client (Set account that will pay for transaction) +App ->> HSDK: Generate New Owner DID Private Key (DPK) +App ->> SDK: Register DID with DPK +SDK ->> SDK: Build did identifier with topic id +SDK ->> SDK: Create DID owner Event
with identifier +SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK +SDK ->> HSDK: Execute above transaction with Client +HSDK ->> HCS: Submit message to Topic +HCS ->> HMN: Propagate Message
to Topic +SDK ->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) +end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-delete.mmd b/documentation/sequence_diagram/did-delete.mmd new file mode 100644 index 0000000..7591e16 --- /dev/null +++ b/documentation/sequence_diagram/did-delete.mmd @@ -0,0 +1,18 @@ +sequenceDiagram +Title: Delete DID + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node + + +alt Delete DID + +App ->> SDK: Send Delete DID request with identifier and DID Private Key +SDK ->> HSDK: Build Client (Set account that will pay for transaction) +SDK ->> HMN: Send Delete DID Event +HMN ->> SDK: Ack +SDK ->> App: Send DID Identifier +end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-registration.mmd b/documentation/sequence_diagram/did-registration.mmd index c33fe08..52c3662 100644 --- a/documentation/sequence_diagram/did-registration.mmd +++ b/documentation/sequence_diagram/did-registration.mmd @@ -8,7 +8,8 @@ Title: DID Registration participant HMN as Hedera Mirror Node -alt register a DID +alt Register a DID + App ->> HSDK: Build Client (Set account that will pay for transaction) App ->> HSDK: Generate DID Private Key (DPK) App ->> SDK: Register DID with DPK @@ -17,9 +18,9 @@ SDK ->> HSDK: Execute above transaction with Client
(responsible for transa HSDK ->> HCS: Create Private Topic HCS ->> HMN: Propagate Topic SDK ->> HSDK: Request Receipt for Transaction -HSDK --> SDK: send receipt with Topic ID +HSDK --> SDK: Send receipt with Topic ID SDK ->> SDK: Build did identifier with topic id -SDK ->> SDK: create DID owner Event
with identifier +SDK ->> SDK: Create DID owner Event
with identifier SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) HSDK ->> HCS: Submit message to Topic diff --git a/documentation/sequence_diagram/did-resolve.mmd b/documentation/sequence_diagram/did-resolve.mmd index f061692..1759683 100644 --- a/documentation/sequence_diagram/did-resolve.mmd +++ b/documentation/sequence_diagram/did-resolve.mmd @@ -4,23 +4,23 @@ Title: DID Resolve participant App as Application participant SDK as DID JS SDK participant HSDK as Hashgraph JS SDK - participant HMN as Hedera Mirro Node + participant HMN as Hedera Mirror Node -alt resolve a DID -App ->> HSDK: Build Client (No Hedera account info needed) +alt Resolve a DID +App ->> HSDK: Build Client (No Hedera account info needed) App ->> SDK: Create HCS DID Object with
DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) App ->> SDK: Resolve a DID SDK ->> SDK: Extract topic id from DID SDK ->> HSDK: Subscribe to Topic HSDK ->> HMN: Subscribe to Topic -HMN -->> HSDK: receive all messages -HSDK -->> SDK: receive all messages -SDK ->> SDK: extract all Events from messages -SDK ->> SDK: process events -SDK ->> SDK: generate DID Document -SDK ->> App: send DID Document +HMN -->> HSDK: Receive all messages +HSDK -->> SDK: Receive all messages +SDK ->> SDK: Extract all Events from messages +SDK ->> SDK: Process events +SDK ->> SDK: Generate DID Document +SDK ->> App: Send DID Document end diff --git a/documentation/sequence_diagram/did-revoke-attribute.mmd b/documentation/sequence_diagram/did-revoke-attribute.mmd new file mode 100644 index 0000000..5a4eb7a --- /dev/null +++ b/documentation/sequence_diagram/did-revoke-attribute.mmd @@ -0,0 +1,18 @@ +sequenceDiagram +Title: Revoke DID attribute + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node + + +alt Revoke DID attribute + +App ->> SDK: Send Revoke attribute DID request with identifier and PK +SDK ->> HSDK: Build Client (Set account that will pay for transaction) +SDK ->> HMN: Send Revoke DID attribute Event +HMN ->> SDK: Ack +SDK ->> App: Send DID Identifier +end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-update-attribute.mmd b/documentation/sequence_diagram/did-update-attribute.mmd new file mode 100644 index 0000000..3122adb --- /dev/null +++ b/documentation/sequence_diagram/did-update-attribute.mmd @@ -0,0 +1,18 @@ +sequenceDiagram +Title: Update DID attribute + autonumber + participant App as Application + participant SDK as DID JS SDK + participant HSDK as Hashgraph JS SDK + participant HCS as Hedera Consensus Service + participant HMN as Hedera Mirror Node + + +alt Update DID attribute + +App ->> SDK: Send Update attribute DID request with identifier and PK +SDK ->> HSDK: Build Client (Set account that will pay for transaction) +SDK ->> HMN: Send Update DID attribute Event +HMN ->> SDK: Ack +SDK ->> App: Send DID Identifier +end \ No newline at end of file From 3b12204c1fdf82723c91a2b42569c52e21b82870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 7 Apr 2022 12:46:30 +0200 Subject: [PATCH 115/133] Update sequence diagrams --- .../did-add-attribute.mmd | 7 ++++--- .../did-delegate.mmd | 7 ++++--- .../did-delete.mmd | 7 ++++--- .../did-registration.mmd | 13 ++++++------- .../did-resolve.mmd | 2 +- .../did-revoke-attribute.mmd | 7 ++++--- .../did-update-attribute.mmd | 7 ++++--- .../sequence_diagram/did-registration.png | Bin 169386 -> 0 bytes documentation/sequence_diagram/did-resolve.png | Bin 131877 -> 0 bytes 9 files changed, 27 insertions(+), 23 deletions(-) rename documentation/{sequence_diagram => diagrams}/did-add-attribute.mmd (65%) rename documentation/{sequence_diagram => diagrams}/did-delegate.mmd (65%) rename documentation/{sequence_diagram => diagrams}/did-delete.mmd (65%) rename documentation/{sequence_diagram => diagrams}/did-registration.mmd (68%) rename documentation/{sequence_diagram => diagrams}/did-resolve.mmd (95%) rename documentation/{sequence_diagram => diagrams}/did-revoke-attribute.mmd (65%) rename documentation/{sequence_diagram => diagrams}/did-update-attribute.mmd (65%) delete mode 100644 documentation/sequence_diagram/did-registration.png delete mode 100644 documentation/sequence_diagram/did-resolve.png diff --git a/documentation/sequence_diagram/did-add-attribute.mmd b/documentation/diagrams/did-add-attribute.mmd similarity index 65% rename from documentation/sequence_diagram/did-add-attribute.mmd rename to documentation/diagrams/did-add-attribute.mmd index 92d57fb..0d68657 100644 --- a/documentation/sequence_diagram/did-add-attribute.mmd +++ b/documentation/diagrams/did-add-attribute.mmd @@ -12,7 +12,8 @@ alt Add DID attribute App ->> SDK: Send Add attribute DID request with identifier and PK SDK ->> HSDK: Build Client (Set account that will pay for transaction) -SDK ->> HMN: Send Add DID attribute Event -HMN ->> SDK: Ack -SDK ->> App: Send DID Identifier +SDK ->> HCS: Send Add DID attribute Event message +HCS ->> HMN: Propagate Message
to Topic +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-delegate.mmd b/documentation/diagrams/did-delegate.mmd similarity index 65% rename from documentation/sequence_diagram/did-delegate.mmd rename to documentation/diagrams/did-delegate.mmd index 90cd017..b978716 100644 --- a/documentation/sequence_diagram/did-delegate.mmd +++ b/documentation/diagrams/did-delegate.mmd @@ -14,10 +14,11 @@ App ->> HSDK: Build Client (Set account that will pay for transaction) App ->> HSDK: Generate New Owner DID Private Key (DPK) App ->> SDK: Register DID with DPK SDK ->> SDK: Build did identifier with topic id -SDK ->> SDK: Create DID owner Event
with identifier -SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK +SDK ->> SDK: Create DID owner Event message
with identifier +SDK ->> HSDK: Build DID owner Event message Transaction
signed with DPK SDK ->> HSDK: Execute above transaction with Client HSDK ->> HCS: Submit message to Topic HCS ->> HMN: Propagate Message
to Topic -SDK ->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-delete.mmd b/documentation/diagrams/did-delete.mmd similarity index 65% rename from documentation/sequence_diagram/did-delete.mmd rename to documentation/diagrams/did-delete.mmd index 7591e16..01d487a 100644 --- a/documentation/sequence_diagram/did-delete.mmd +++ b/documentation/diagrams/did-delete.mmd @@ -12,7 +12,8 @@ alt Delete DID App ->> SDK: Send Delete DID request with identifier and DID Private Key SDK ->> HSDK: Build Client (Set account that will pay for transaction) -SDK ->> HMN: Send Delete DID Event -HMN ->> SDK: Ack -SDK ->> App: Send DID Identifier +SDK ->> HCS: Send Delete DID Event message +HCS ->> HMN: Propagate Message
to Topic +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-registration.mmd b/documentation/diagrams/did-registration.mmd similarity index 68% rename from documentation/sequence_diagram/did-registration.mmd rename to documentation/diagrams/did-registration.mmd index 52c3662..0388f14 100644 --- a/documentation/sequence_diagram/did-registration.mmd +++ b/documentation/diagrams/did-registration.mmd @@ -13,19 +13,18 @@ alt Register a DID App ->> HSDK: Build Client (Set account that will pay for transaction) App ->> HSDK: Generate DID Private Key (DPK) App ->> SDK: Register DID with DPK -SDK ->> HSDK: Build Topic Create Transaction
By setting Transaction Fees
AmdinKey, SubmitKey
singed by DPK +SDK ->> HSDK: Build Topic Create Transaction
By setting Transaction Fees
AdminKey, SubmitKey
signed by DPK SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) HSDK ->> HCS: Create Private Topic HCS ->> HMN: Propagate Topic SDK ->> HSDK: Request Receipt for Transaction -HSDK --> SDK: Send receipt with Topic ID +HSDK -->> SDK: Send receipt with Topic ID SDK ->> SDK: Build did identifier with topic id -SDK ->> SDK: Create DID owner Event
with identifier -SDK ->> HSDK: Build DID owner Event Transaction
signed with DPK +SDK ->> SDK: Create DID owner Event message
with identifier +SDK ->> HSDK: Build DID owner Event message Transaction
signed with DPK SDK ->> HSDK: Execute above transaction with Client
(responsible for transaction payment) HSDK ->> HCS: Submit message to Topic HCS ->> HMN: Propagate Message
to Topic -SDK ->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier
e.g. (did:hedera:testnet:z6Mk.._0.0.2..) end - - diff --git a/documentation/sequence_diagram/did-resolve.mmd b/documentation/diagrams/did-resolve.mmd similarity index 95% rename from documentation/sequence_diagram/did-resolve.mmd rename to documentation/diagrams/did-resolve.mmd index 1759683..cf804dc 100644 --- a/documentation/sequence_diagram/did-resolve.mmd +++ b/documentation/diagrams/did-resolve.mmd @@ -20,7 +20,7 @@ HSDK -->> SDK: Receive all messages SDK ->> SDK: Extract all Events from messages SDK ->> SDK: Process events SDK ->> SDK: Generate DID Document -SDK ->> App: Send DID Document +SDK -->> App: Send DID Document end diff --git a/documentation/sequence_diagram/did-revoke-attribute.mmd b/documentation/diagrams/did-revoke-attribute.mmd similarity index 65% rename from documentation/sequence_diagram/did-revoke-attribute.mmd rename to documentation/diagrams/did-revoke-attribute.mmd index 5a4eb7a..3491c8c 100644 --- a/documentation/sequence_diagram/did-revoke-attribute.mmd +++ b/documentation/diagrams/did-revoke-attribute.mmd @@ -12,7 +12,8 @@ alt Revoke DID attribute App ->> SDK: Send Revoke attribute DID request with identifier and PK SDK ->> HSDK: Build Client (Set account that will pay for transaction) -SDK ->> HMN: Send Revoke DID attribute Event -HMN ->> SDK: Ack -SDK ->> App: Send DID Identifier +SDK ->> HCS: Send Revoke DID attribute Event message +HCS ->> HMN: Propagate Message
to Topic +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-update-attribute.mmd b/documentation/diagrams/did-update-attribute.mmd similarity index 65% rename from documentation/sequence_diagram/did-update-attribute.mmd rename to documentation/diagrams/did-update-attribute.mmd index 3122adb..1ee6667 100644 --- a/documentation/sequence_diagram/did-update-attribute.mmd +++ b/documentation/diagrams/did-update-attribute.mmd @@ -12,7 +12,8 @@ alt Update DID attribute App ->> SDK: Send Update attribute DID request with identifier and PK SDK ->> HSDK: Build Client (Set account that will pay for transaction) -SDK ->> HMN: Send Update DID attribute Event -HMN ->> SDK: Ack -SDK ->> App: Send DID Identifier +SDK ->> HMN: Send Update DID attribute Event message +HCS ->> HMN: Propagate Message
to Topic +SDK ->> HSDK: Subscribe to the topic and
wait till message is successfully submited +SDK -->> App: Send DID Identifier end \ No newline at end of file diff --git a/documentation/sequence_diagram/did-registration.png b/documentation/sequence_diagram/did-registration.png deleted file mode 100644 index 9e537fc01b5c70ff1d5cefc1f3367af76d1ff3c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169386 zcmeFZbzIYJ|2A%5BBG$6geZ)mq~ZW+6(k)<3nL^1#^{tbkaTqDDCykjQ35I@ARr?K zj8M7;(lO$9a$om#-Ou-XUw=H$-@oe*U(Ch%IrAOI`#8>^Co1wZXPM3(IdX(XQ9)My z$Pp?y_}6m!BzT9tc4i6uIqIY?|L_Q|gJt%}k?ThkWglq1FkDDH5q+t7(7(>5e)yPQ z1>L4!#YML<{)S=6O2~wq?a;8(xX-w4L*S{?D)tuMt_Q0OANDK)28NT2{mHXFJ1pl5 zNd^Y%UcJLwsybTJJwzgrnVIVPk)x;YA31j6<&poqyw7n=RDs@#>Ob%N=fkIwM+km; zNB{drN2us7+{ZlO`@06gPsIM_IY+2IU3``vB%-o#;=kLw|Lyd3_(KN!VCw(=?4`&t z1$w)Le(L|(@55fc3cq+CHR1f8jAnA%j%HQ-&1Ww_PnMg4 zYW`*-PhUNnuK4Ykio=cnp3UE&Cu3-O&jSLx{&Oo_Hv`jkgZf_M+yDOTGxO1Z7Vdwo&_4_J-@Eyr6Zcq z{x947kB|Gu$Nd?L{1cq~ITL?*n16zkKf|>D*o}Xp%D=Y9pOf-WI`HRA{3nb0e@F)) z@Q*lL2R9E77LV_1ZEfWh5GYV%+Ns%}n4U&>d)H`bY3aJSlwD?IL>Ln8?-$>^vK=q{xG>ntk-fh>sAnuY3*zFB_woL5k5 zrDN#+ygqauSB*<_>JY`Za_3bfOKuK1xsG~o4jk-nO2^-GNF~>7j?hpx$Rwiwc~&cu zU7hz=dU8ppl(6wvKmSoypRHf63q{R(NF=iDs&ZlT^Ed-@x-0emG|Df$Aaq4`b$fln zgO+L01mc6by^Z+wg@JA{=b4{`@bm#>R^oymy-K0?=CH`5v*?At;y1Hk&|3{N#Xl0u zhpN}P;Yr>bx|Ds&61kDlsC3l#U^vNl-+i7~VDu2_*bNu?K-GvUs4-{rUW+hr>D9u6 zG4X#KcNnMc4P z*&C0(a_6hlPLX&=qB!x)$E+leR&70GhQHCR;a+V-dzH(4ta{a-(+KQ>pyCl^q+(S% z&A%o#1$rInSWhF;-^}K_aL-byeJb8=5fW&okQxE)lvsU-E&O`c_CP~bvUh)LoK}R6 z(YX5@QowPxlZio%j4E)p}xX4fx02{&Lo>K>HP{g2G(+thRF{CKu^cz~Kevi#XvfQu0R~?ilX1o4Y zo`Qu|oM7Q!nenT~boVi4k^D%R!^3eu`%Hr}{g-=7pH{8cX1X@MQVW#cgu@;_-}?P) z15A}35of?$6m5A$;zc2=^N$C%m)fpcB>a;7-iNTWp^(dyqt26TtFbi)`xF%`OXrY= z`ZA*7eCD!(qr%k8W+WF_%^I8H7O3l35LZLVP$%Sm zbW%g)3f60HZ*x@G?Ary(?|Rxq-iV*u+tbP9nY1uGjmXfCGuK<7=s-31fxoiV`_MDj z;ev{BrT;<^uJ=&UDMlgeYI=iCo_QB5hp}w%Hw(;M=LKC;R*32sf}fZ8eVxT0?hG>Hd`xIvQ%Fj2ng9dKHlbI)w(E)NV7K+>WZA+Uy=CRX0(5vi7_B%HmQrDlR zQrANSR3UQFonY=rlL+=l z2gJ-##TCo;*qb^*F*9qaPjp~sY5#4*?l%EIM$kXj?~eg2fC12>Q!TqQ(TF2>PGo8q zD+ZT(OK91syGtR8uY8CAuM-7Zo17ZL@7S#mix-a7^maX{}{^<)mTQ$+HCi*2NaWB8KkW5l?osa|ci#Vk60ztdb%rUZdOuEC0B5zgsB=|RGKh8)_OCtHFGYIj<} z4DkkqE{4M*zDE>xL2sm~@rkKuxJD;)CA~0cS${hMcG>ypycI5Fqb zE?&d9u8bb+69>ysaZfOoXxbn;G((qj^o(=Ni_Tyh_d}MXymiqh!tgzP*YPg#vDuU63`3O z3MsU@q?8Zq8obG*xVqM@TAd>$wo$!Q>%^f08t+&Xnb5HfGj5Q(Wzi z71!NT#dJ$QWiYJH02<~gx%ZahyT9wnUGi)$sgJ1Jl&FTiR@?cFl$24q3K&_&LanR( zl@oNE>ui&h1g8!Mqn040$gK!yP$u8o6hk$+KcUH3)}!ey#is2a{%r}`-o4D+8Fr9O}sN#*sf_xL5g{7lLGmUgPvUWkayIy8WHL9F44eKH97Q z-g{uneSp4%wZM!C|9R)H`0qLoI9A1i)@J`+*Z(t@eD#Sy?;51%)_G!f4}xO=<7Ena1!#*F@Ny?pY0t!_j)&I^8@tp&i`obkMEgr z0z_BaAN~06`ho;)KBk9y|G9vFPA%~8#Q=tf@YKs?{#{>Spv}xPQBr>eTK`EEbPpqg z7-Np^zv~MIwAt;a$o5yr^A}L_Djx!-y0tI@`8RzLgo8GbU(^3IY5&Iz+}Ec2T?5N` zdZkFg##{R?{<=cabJZL`a?T)fHMUh?{D!o+zKyVH;d zANkeoCaF2hVe*k5r|Jx-gB`Ki5Tfr@guf_vGFwrV825^xY*JYkH*bf~-ZBMm>C-Tm z)9pj6QL^3E)>#xOyuZk^qlbCSWPpr~Hx;eiuX|Qfm1!=vy1uTBxLhQ~a|vO1lr{eG zIMmyYYN{iwrolLCrKi*Xo2&i%GA4--dLm5ldPSE z3+QxR19(HQvLhCi{MDLYPRX4}tx%S?8nW`;F}wNJgL4B9BIW|iY?3Wlt0}7kOgTB_ zil*7!53*y|U0lpv*840PO-31-%L!&9-Jay?mB^Kt^8su*BhmJk!& zERopT7qbgQ;(vR-Et}P*%QQJvl~0|e^R%uv(Bk8pA*Hv>2cB5@HzarPrlN zcrVusmwAmVRTsIsxwLg5T%Bi?U#NxmoxS|KfuSSYo>do3^_wJY^Dw4&dJ6H1e$aYA z<)h;RbQ#jL*8Aub0x9TC7^D7j)d8Q+^~A`??y?iNO=ZkXkD2%F<4<1BwTi_H=QJsa zvo9aJprS+N;^(o(V}en6a%?Wm@!bKWf z_-p#M>(Nw5I=`F3{KpB97kAc`gTkRcL9!kzuV4=_=~>XX9GBA-?~N@4sI$Y>-yP$C zt5Z#P*M~!;XdWw+yoH@H{22lL5|U%2%-=zy$n>dbq4O3KwpOxoUh_Y`O zpv{oQq+dCat{D8&%i{{6A?wu{Bt9Jag<9hOW^4q=BYP>ybI7so&welj=--KJNV-q& zcQRxZ=<8(JCAaTmuEPl$QC}l~lV)+)khv8By(M=P8OeSx`ICy;cZ_b4gRU|4A{VTuMWCjruU^ZGx__Wz@0+r0^|r7WUA%7Iqr z?)v_roBW1$--6k?Fo>^iH+W;nDU9SwBAXKyLZ0dZE~Y(2Vapsu0!3 z-sw(%(Grea*`8+8b$739)2?R!%8QEGkg6@2;BVq_!u3-!*o01b{GmL`Xf^%(d4d0hkf0seLWoOO*!B8Y3v3( zR&?b@f;}=L2p5*@yWh1u*IyKct=n(HNghTtox-DD;W5$C!fhJJPn#nM*KarEE#6TI z>h{gXn-6-eNn_or(uJ+9N^t=o7a|Tb`s~blQf9N{m{tq_kBsb7^{`Rs)Ed|1mPQ%YXEG>B;!f7t{tLr zdMX_UB0etYn*E&+*NF(qAhp1!`H5zSW||^w`N)@+Sf@@_E0K{GVIc2kpt)&fWn~=& z*LIoilbm~RdcH761N9jFN^+xr@Z`CtT^j=yfi-&@c^i{)$%DN*qn03VjBi`Qpf>QU z9o1h!CTaq*13R0UANAyYO0wZxlT5DAWn?6`XecV^GeL>oz#`7T6<@P8c6VcYx~?j8 zY;)AtRD7W@V%U8;4S%p7AY2toKPgW$XoJ`7H1Ei_yH$PbV851PTLN}@car-Q8ruEC z+vMlxTGuZpbOx?k=v%5vZGS|wY}c?lG%Rlzaq(a=X50J5Go+9hddpee z#D!V)SyPxx=yhfK7W{f2Vg&bT<)rv>!`(z@@$CtYgnRDmycXkjtJ97YlrXS}e>~*+s zqn>ttkBokhOS_@2^H|zJfF9L8F8DRm5)S3-jfVOxi69*tFHaBT6-e1lC%RR#zWDiz zrV@w4;lF-;2+|&7<@f&PyVNY!6KVl3m@^(c$9IU43f{KOQ^mFyMjc|m%k-+QBho^}vn z=lyG=SEz=JpRcBb`#oC76!8XjHWhtMl7wcN?MnM>=t-vMQmWmVyUS(fO0r4zmyvt7 zMc5$O$y0s>EH9?yG-Y+c;CVrmDetNhdA2amjc`zZ6G<@4t@`pjunRk_BR2m^ye#VJ`|=+QjS2Dpd; z3M9)_6n71QKy8Dv>S0&X8+`rwHwN{HO~xR)$p>STLrwyyZvi78MO@gdu%71#>9ez< zzWdwpHu!-#VTZ9)|4;zd**vE#IEAx%uRUSZY1Bmc`1r^qT=pz`1I_~vv#6uVV@XX( zy`hfY%&NTcQ#5+b0Q=hWXAD@j(d+fJu_ET$TFIu%nKmYA)Dc7c08sp;MFAbylX+1e zV70G@9ozO64{|A1BJ--w8aq}T#2!tN=(`&pA)!+}E==(UnS*^*uDyMIqR!-rX@OYf zIlp;{oyx&4B^I5f=UK&sT9uuMfrP+L8Q7ANxR@TcwDfzT4szDRE+?$$-f+`iVCLe) zgIFlHlb7d$KQpcv0M7&0Ui=)8+wAVAq*Ub98o3QWSK(hQAH88anrU)5sHcj8)L4Jo zoaEAXW}}H&U|@UN$XK4$B~n?H!+)`6Q+vKANBIraJ2Ya!CG~xtl>GetHIEQ7b5qk( z0YdHm&RvnS+sn;Ht}g2C70XT4%n+Yc3p5c`k+ah?)ENQId2;uzv?9IaIoqmPCXtDy zeTto%tGLzit zPLbZ_SBaAKnU^T*FZixc@m(0!_2_xCzpqE-THS9Zq-<0i(O9kOhlq z=*c{5B9VZyA#u1=M@Y@2z~JAC`RB=>nJev8G=m z+m$UKG}LPh5K^w8C83F(XpPX)VYg8te4u)347C8p?4n@-tJ2b#>2dA)CJZ0$Ms!#t zxp%{k-REc$COu{yU0Mj{u`L99-r)?Sh%oWN;+l(1Qi@EcBRQ-;$G_`%d=+h3pX5m- zp%}J3Ur?DDT7d^8mcfnT&1YP2P3iT7u9@bN&f13FFks%>2FvDuX1eCsa06&Hz=H#~ zkvpQ7>^iu;F&3f<=B$n^_xNDmDDIxFz>Vd#?y&bGTdK)Yy^?ty_r{-gM{ne49N?+> zD+uUTJ*RdTeb24m^(@GP zSqQwCW;0Y#7h5s1mXIi77wWycOmW>D4kH=)qLupb+S@`d2T7j$rXWHLWp(NCu}#k! z9AT2QZ@gST9N4+qAwJ+z*vlVwHgO7fv5b0b_2d3)lOK6HY;JscQ8=$0>EFKsmimDi zdzO{pXj|fau8|{lTZVQ|g=MbFb8lVMAi3D6?x?Uy10!x^{<+RV=4zt-*Q>Z1 z_pfKNNB}D&uY9b{@%uq8A1!QHHpKmkouel}j+1%8(bIb70$uBKK?`|^a&VoYBhTzE zH=iRu({-QZ$E8|%9~u4)AYdq$t`ucKMuRh$6`5Lo*UD_Bi7VtqJ&jwHXlIFeyM6ta zo@eUyaxy=;RB@%CZqt`2W0$<{x)rJ1;cS=W@?h5F#}CB;HC=fcN}TB4@A@SJvyEXl zdCCUq&eg!kO-KZEM7PLd>dY1#lidIUf?&_;k4QH@#i%$VpALA&hdXJwuEPBnNcLN) zT^v>)m70d!Mm3b3t(-e6Cn8IRm}y)*)?%Nk-%|^idQGh&1Q#G2M-XJ~e)K%)D^zPg zW&6kZedE38tQZBBtl_-a%;{6gc0o(E6b3GM&l4Z8HxhsM`yM1Nq=w*%>h_sz=;-Kj zs&GQ&M+CE>ifvnT5CC3#;BP9%Lw&1-BAtf;tax^#-&6pY0B=wS6d*P|8P`R-WH>dm zid3DCm3z0J=19+4pzi_2 zmiVC#M63oRo!RX1tKyN0>rYXZjiF})`y^{LC6*gxhD3XX4Q(q0H9YrXbdo?mM8*dU zg`BAQs9$)0?Ds)Id2sOA%>_+)Jq}6E`;Z{IGA!rCgT19{{i{7+SfzHAc=-5SRvsRE zWaDf=j|t5ZgR4`dp8tzD3P!T6D_GMe*!fwnm zbxLf!Rop$nb`r_H&GqFY+#6r(O{o^kxD~LR4-?#~7*{C+`Aw&a*z9ecPRiOW(Ig*Y zipgzOL#7J%2lKcVpJMasz#0pBtR)M(En07y7;g6U?%5yhl~o z(S1Xprl6SY)J*?79u_1#lZuKcg}{4mc0crpEGsM9qoTDQBB1_FGz%2;km-(Nx3Y$UX( zdtoeVddOpb{d~G?qas)0qA73TUI}l z9hw|$Ti+y6tm0=jnYL5rcX#Fm+yqS4gw@p{gE@qCUiZ7tTVYk3ga$3?!+7W`(-WnIz&1gAitCxKfT~(|`-s=J4ny*zg zB!RyRH1OHB*AXdG?3e!inbj8ZjWceyZSOJhrJS-FK=5fNkSm5+rQy)+>&Ogr>{0`^^cybx>C>mGpHsW5-_ZrvrtIKP4N!A86sVZ<= zs92dD8Uc$)=sE3(e)8icJ^G2=EK`?e=$6FHeWw6Z4STyZ`1m ztX;2@wTy?J_24V@Qa|7eEX*>glxcllOSsgs{Rp$WF+Nl9s8A}Y)o&5r$?znZh0($Sd_ zXJ}F5ae1J>Xm#kTHikCqR|V6c+j65tg-S4Q*2slfnwJb;BOio@!oW;*jasI~0GP2) z<~%j@DDXsQ9<_5M3OVe zVy+;!ccWbc&Z!3=Ld+tm@c3)5J*qQKn5D%tIn2S3mPJg*kDqk5RM0`+A0AIdVJsoR zBib|9vO*)oRO$mpe=!APnDffp?P|9_FnbI$f!sqVJ77FvHXKST^&%^tn~}UA`)C%J zlIhxa_UpZj6>&U~S3N>*%~q~cnm_+2^FVC9C>Xzw=#_;*x646l33 zaOHVbs$ZZ1B$Q7xcf91>F1liXH1S#&JOY&$db>T;yI z+|ERCH;2x*VNyF^ddFulP$iky4^ehG=M`KRD#n{YOmL-qD=)n|Gk3P?2{WRTuH_uO zv1@H38`hTC1n;wL7)= z7ISWqBWWX{Ro7s_%H7JQ1tRFuh@USeW5R|`b0;DM9;Fc=cpI!ma;DVGi9D%|j{=X8 z20@Le>x*-t-A+aM`QI7%^d|bAZSPZxXizyY7j$+vOY*6j&*(U)m|^!zSfnP0QrYY$ z`1&2dZ6R^K&s%`o7>7fvIu(U2yPf6N*CFbqNzc9ZdIGt6Y59Kg71eA{A*#Dn+8c8- zJn~oPGJ4xZM(5?|=C0+%>CcH<1%HrxDM494pm%)R73o_X%8qg_XTm8Y#nP?Wp{~_O zM5`c`w4N&6pirW+B>MHTBaMhoG6p3C0A*{9?FWF%pip|0eoq}ewUk$%+Nj_AvBCUGS<2#Mo5C|O-+xui>FTWrfY&tTi9g}6{5Yk(_{o{_u z>DdDhQc3eQ$^gIwj4cvfJ~3a*_5u*jp6!)1hWNu{l{0@&od5xciTXz6je&^d7*V za0V$V@rJo99y3X};S`s?9tQ%W3iR=n`OGHE=r}3)oTg6<$0fFY4wG~9Y@G?3bwua0 ze8;dZjHOcbGPJ{FNZ!=vJTys@&J;Zepa;!EgBO6ZL2e4my3W z*-LjvA9uO#(mwB271pTIi<*;4KOv8pzxD>E$P0(8^lWH)YNnm(osIMQahkp6Rqc4F zeB$HoINdc-BlOpB-XA2_GQ|4bnj5}9Us((}DXpt?(zx*Vs%Uem+ARwuKHv~7eepX~ z{Jg6G&DuFNR)XmIiECvaVnQ2+7!dihRDqeQmNaw*GF^|1v`)FGWTZH+pCdesiQKMo zb(XU6=(D=i_TUujtX#R}T8vn-Ul zDy=ZBrS*5crCv2_(fM7gYH9YcVDru4O(!BTCE(h;6gf9Sv_j*2CgHBo0>JGm^(pc}I9 zl^arJ+cO=r7JF04`BNOKB4fu7)^eZJLQ7~+E?N_oH_H7H7?F*Qf_1I2v>UAMOk%b! z$E6ufMqop63`v%k$1SftA2k)1FnA$qqRKYuD$hqHP)WMM$33DvQF>hRzatwbT7Hz1M6|g z;DxXhtH)c&G_T=tZZ0Pi+;Uf2iE%vax6x3$Y
JhdKMy5f4U&jX9TA7X-hDXZ1^^{ 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 z zE_JgEA5> zLZsyKrnW)Z>TAw?XHrFzz#Qv}aR2kOok=iM_|u&t6_YI@B@01fMGy)(mavgVBn3R2 zCb*QwTIQS4-x@{v_DjdxmOy{Q15l5yuW6>qlvVejU|}FrDpP@DK!fx0@E#fJ%Ud8G z3-lKP?M^D6V%aj)t%-i)v9bR|w377P5 zKK%KI^_{bVvAD4MjT`Ig1K(bXxqW~A)4{O%=LK;D@iBdWuO$NopPn>zfo_ue6@o)mw$8 z4FnqvbxORY>aq$or$`S-p-a@MqBF`JVK{X&(*1Rvi)?r_#|^Nz?~Iv-k<`X9<~P-v z=ZNr)`Agv0n2(no@#W)((aZNC$-WC^POxfxCL(=`?D2EoS6?@RcYOlN{*R#L3M?$A zaz$CbwxVcEZ{E-M&oe*5I9p#noW_-K=}d8lmH^+q@=#SbpjIk-B_Ak~>Z}C_vc5O} zB5x9kAZIiHm{~||1oEo4lu8w&@UNl7{Rk6^Yaw{z0SIkZfeo!g91JSFJG;TF;G&Vx z#~+dpd2-)DJJV8FOY=u$J#P3CjDEiMz5Lh6YeuUCO5@xS;Umo1mQ-S9meTe``Q#q| z4AIpLcnMm|T%OKyc-=QobE#k_yG`()rZT|g!UOGi#7alyj1|GK>&71{)Qa@(-G4uT zk9TAJI^_2BKE^$W9^y`;KWu>GMdt5oaZxs;_tanHVQjATSG_%KCN^wBpcro8Q*`D1 zeF({BQG@`pxUXG5+jF}6mrn8takK7a8|W0@jx+Me*28?qaeAhCbK|1}1)6U)K0Wz+ zQG$RXx|J+Nt#WZeQx|`pw=U?YeP$$}U?SO8gkOLG7PV-IB?_ed3546*iFAFGIolgj zG-CMZ2><-eY`h2WT9{`CXFA?vi`SjzBxi+5ZdUeT??0FIymAW9o1GeY*k`rMDS`9I zP^q+g+Z=GQ7RGWozum?kJDO?7K9XRdL*;3zGgQ*}e)NyObBG2cPXrBUZjQq?mCr@G zK*uLx#9?Ba&W@BmXr6Eo(js#3D99sTk&14w?8nLb!I~Bqw`OQj-)Yas_{bogm5!zE zi2Fv*qYZJ?8|6#Ryzb`d@n7_?JQ>QeR~cpV$_$@nK_jNaM^UnbK^JPPI~ge?wY4uX z=Z6f%lKHhR4eHYJ?L7n*$A>ZxguQ6K=u5ElWv1qUvY2^9s?M$iOhC8$T+xM;W zJq~VB(06d3w1kC2XutMxYumgu)zP|}fBp_Hgo}C1X8KT^tJILd8nqmvG9X#OO7V=V z>es>}Wa^u)6*a{ilEK~B^`+!F0$jPD0fc-WTDHLGS->y+9_g@2!OL3BDTf;9-YLhv z#gx+$4_50^&?xuOTZXI>c5G}(-|GrDRFL${8Nb$otv)&N>5?0u0k_ow268hH< zZ2H%+42h}SOt{S5$x>>3e=4j}6I5qwg{ro05QFa%i6TU9ei_qAg0Iv#KYQ)S0g4Rq zrCkF7_Ni!1-$85IqNaGnYQIdwue8@WS6^1N4~rprQb&qTBE3;AKH{@=wf$09MEXfR zdKNyhtc6b3T&f|et2*=ao0-R=b&85)ZpeUNFMEYHnxK=0Gms3Ymo*8fZkkP2D%E!O z6_Ykg-<$6}Tg+THWF+IT1<)UFiT)d!ngZZ^c_hpilw}yw_0q(Gd2)OTR zjl|15{2gCcdrIgn;|gDXqB<5MIqOwIzg{M2Wc?ei@V547n57^5U|b#IuDpx>#9p%v zx8UE8B*I82q@$F5+yC=qQi4WIH`cT0=sHBWw5Ot%V%)^Fm0&J4EaW^j?uY8@PleJt#p zM`&SrSAKTFW6OzPw)c7D6o8L&@fI*6z>xW8}~;P;t#F*ljv?7 zXMBMKKBAN>G4qn7yk5(oV@_E^M1j&FZGkqj{2fD{QX0#R&bYtmqNz&cxg&C z!^t9Mt%1+WHRfEK7Ydr}Gx?tDWOoo=rRDf@rMI}avtBP}myQ+(HYz2rrzjc&Z8`W^ zgv|+7Ftb3!drbMz5vU>5g4b3}9MXB6LvfbfgF3N;>ani3oihpB%xC;RMN=~}HMhw> zOk_5(aqmnHC`zE88*0sdj5A6ik>lil2=dIvhHfms>J<_dwC~=PMs+xSFg#Aa1pkd85nZytCFG%SRyOG4q zB8EO;_;Q=3 z#1PSQLkwJt8{Z$c6g=sw6oSPt;X7PzSqSIR@-w-&)}*ib?-OfE0G1(K4DvAUtn*ix zEi;oEhRiSgL%P`OtwV?6zW=_{NAui zzE4Q*^3bzo`=AX6XZgyrp?Z(u5y}df6%QYkN?4l5i@<()xb4Vr>50%V^GF1}o??G*kf5hRFP^>s)FNBm;&K%OADyHwd zF5mI3XbX@_8R}tx=1>LDBXm+GSp-KhBaZXnSldbn{gwet(M3=Ll3e5bVy zx|NG`k3K92>H%LI25L89;Tor>3}c_7EwuNF{6`DWMSA6c$9;I8^XAQ)WuI3A@R@o# zaCua^qa1S_>G+o^S68X-^x|h)+3Swf)txMuQ_RT_*ILSLz9_!;5PR?Q-gNwzK0DZ0 zuhSDWR$(531s3~A4k=62A*ZG1_iDO6i|-4qz$7AFY(gu*Z=cf2rqEynkf4p0n)2Ka zG0yz_kkZa06g?Z!jGH=vLnRfYzB)gCTi2YDqyZZfc+!<$1qT9@9?~UZs9?~^CuQ9) zvIZt&)eh&OA|ZdCgDUEo5PPL5)GdNk>Eh?QF8ii@9Iw5Fi#E@K`M^!*&>dv@Nvu;H;L%T&_hRt4(E7#w1U^DLNEW*rGZ=Ui94?*1qB+Su;RiI zUaMN1V0`!VBX7tay7PG*>c0N-xdG_LVsz^9^j4QOUb|d->%Ee?S(m!~Eget)tdex{ z&mOEX=Oc#a=A@n@nF{xInVOP)Pse-FRQ94jxa9q|+r`E8>QJJKm8F|FYOdg&(bI8+ z9s`vTIj20HT>Ncs+Yh?yb8xo$*n8B0oMaLTMga;vyJGY}xcAvOLJ*L?J@4z+s*Q8s z)hC$`I*8hcu<^qaEus(Xk*)6$P4J*TCRls;M(RHO{!XvUd(9rsDxK1}JI>v=uYPxA zUf20S(f@upcx-pqpfvk8ChuUv_o;gKt7ecwiedRQ+_YV}6AA^Xt^W(=ls@%#yjtm>zHHPH%+*sN7Qun9tlo;FEcIL=R);@H-kuzy< zTU;wf=3jM=X|5Q?_FMLr z#iRD|L44CkNS;#Dl)zsga`Qt)Xzh{yt=#i}g8z^C$>nfc8c_@!`U<8%0tWWdiLojPhNbjR{NLGb2~3tSr>w zduy00JNjx*lxMI1MLUm=Y6lyw)PD4NS%{(UO~&S!r%X}t}1zDe=rFM z_#uk(n7wjdPZY{O;Ug`^@FM9_Aa5B8dxdBf=WezKi^VA%f@b&8dXIt~lDC+w)CK>n zcvIvxeT9aEst8n&sw}2FT$9DkhZ=o8iRauXJ;J$jaf!qm$d9=edl}YnTh2Z^r>e>K zldiv&8#FiH48#111Bc=36tPGnmL#1{tbu)p-s}Bwx3?#aGlwz~&3?LMH>{MF9TG{6{p&%2;ogJ+RZNfC^wnljrCFxm;4nHa_=cYY9 zL@W}}+09lKZz2W%TxwUfg}D{lWrNTzYxB6N6Et~^{VN~tXgpK&LLD;c2diDJ=e)Ps2jo zeSpH_h|UL94?+9=W>m}R@VkZDM=Ycc!7Y@w@9KGe2Np@YELtS+>Ysl)#Njn8^-MuQ z;ABWHd@{y8gq=b^pD6cSBw6 zsqhC`)Ts7QOJZ0`*8A=zp07Is`lR>S6$_ENc3D}=X_QJK-GkMwVH$jWed}q-;y3@yC zm1Wo4_?r9EliI!iZEQyFyT*jG&I=^BN9ihI|5*S?{KQL>zh|Di6U1Mk%x^w z4JmekBs(L~0dnL|K$9iBhO{(i6qDlOI(n3!eD~W3eb!$As@s^t1CO`bixl|vlQPpuWNvFf*Wckc_I+wWny=R$eG)ywcjXUI$E9>=5Ysi#jRKThi zg2v(5D$Jt-*JsPC=K^1mlovWxPdHKPg#7#DzlobgRF#{Pe!au>=IpEZIa9+bjdBYvlAJfu3+;hxO$OR26tvdZ^;`d=tq`nKbr7&Vs&;o^m z_#~vCts)J>J8ftc9exZzTIRHJi)qe2-+{H^@+)Wx>UjDTWXeDt@I*EA9;}>6)F=Gl8NlS+%xEGS3`EA0iPf@{6Ov7DFYb*JRBpuA2FR;&Bp!MQ5lOEaSdFE5Br- z1nzMg>zwwm*964@X#cOhB@XJ!erZNyS0sPi0toW91q{abl=Nt@p8@`W`pUt|N7LHg zH_idH*VUaRz_qX4=;QRzeNM-85R$CbzjSgssM6oyc$0ba=11kLI<@3_clk*0scm@obkiV!A%-b#FH0$(JOQ4{B zYRow`fW#w@-nE52cZ~8{Rlk{+w=(r={96H`o!-)Yc5po zu$5e}@=7qmbkEIr25QdSr{V-AV$(%wrWZfe%WR=j>)_dtJmt!J?S;%{QqZ~t^ z63*X<-a~;sYakfP?N2JFtBc;GSfcVTq0o+Drr0MLqepl31;sj;A;w_GDma6%sb#^C?cB3TeKpp?V*KqKQg~#Hb z+)*$SahW&wIG=y*tZFmDiyBd1`rmFz=Oh)sUM^0*Ao9Ddgywiiov!P8cYL;)7De0( ziRfr1Iw~xO^N+6|WCdcFMQ%tRc(jqxE2zWk4M7t=ipJvf3en-Ok91{{WDzsHH$YzBh(t3VUD2QL)#_Ju&xVt+IZ+0K)$q9IJ@hamjO zeJ9Y|HCO)6x4V~`_ff8$TQ}>%aKw1i*PWE4ZT{TOcymKoG5QG`WmaU(VFQXY?+6{t zUR?CMlN(!8;|#!c}ZCs$u7FElyq#nAOfxL@1EBQ z8bHPr19tlmWiOm~pLQbW0FxNa%DF1!U+5JR>4>?U0U>uympR8p52w2)N))7&z@c*K zjk;m}b0U3@|1^6RM;mc7*_)%2gJ(cLfZe*_ey{9GtZJL(eJsO38!ku%B6{4HGyjvqS{6l4^9*|^%`76FCF zv8D4nlhSW=JbaGR^OU0%qkXNMxJyB)TT6H)_U^5t_Om7Y2D=94#RLqfZ8hQ8d6c>9 z&6PJgLnkE6q6@@7CyvdZ)x_dWZ@`jMKh6kY5ux<0=BM=?+*V|$`6`&i|W#nU*F4`YWn>0TupLA zT&oZO)5B?`?9omW{J#5Y^^tf>R%e=0v4|^7iQ{GpE(~a(-bz$-2%U)%g-7&;4#wcx zf`MBuRo-#sg+xl_I`10F+eDSKyW3oOk40Z5U7#JpB(W#P+IZ+G(?nX2Hx1*mm>7G` zEk4r?>Oj6S1@Z14$Kz%+*gE2{%lOtkt8LF#Of9GVXW}8bXNyNTNA+n~qhmuwtkMtA ziJN$i|61>ZDGbe*)8OF6RpXO#sK|w6#`&~F9Zz99Cq6+4_mcHW^y8_!2okpYO8!hG z#ujS&Nhbr!=;eh|D6#GDW?DBTd!s2cMD0XAYgs68{nWx$q$>*Y_1Rp;YKLSBM<*ur zZzcBQi++88L|^hCU891Bp2rCEmU9ZZ=}w=c6rEDX*Vk}Qq7T=+9B?_^T{Iq?dtKyQ zdfb;$f&FIDHe+Lj9zFQm2ZqAT>ktIo2w|MHRChAPE3I?vg61xp{B%ope~W5;fwb(j zVo+B7x4x6~&^yX$q8-h7eBAqZd%HO2F`XRxyarCczA{)tLpMZ58r82a`)?eE;Lw5`KnaGc`t)Ke4 zI3#F*9hfVQh@CI^HD9>OT43DRi%47Tb;U5Z&zk&?M4T6|>FFOGJ-S3^yCaZX!A47- z?YR6o0d;Bi;n$_30aa_gj00!RP;Wb z+`&Ro$xPwLc!NW77E`fDro)X6gvD7{W+vjJsQpWr;+y5P$8k=J@1iYq$v|0- zlCB@qFuz+OD<$C(Q3t=cgNizxVf6c=k_ zc|VR}rZ$=u=5-7!i?&tZwJL$_8(i;2^uiZqI8M_rdV`7o;s$?OTO00di+%7eJO}^o zU73o_R}6kapn!ENZGI%fZUV#QqgeG?x^;FMUALOHGJHcrjvMdAo+T#Z?67$?u_f;d z{!BUQ$^349Sb_Kr!2%X6t)vFi;fY#hK0M{IZ!cI*8ybWL$uiqDKcwIrV7DSqM7e- z%j^V@t3WNeN#)tBv;j=IJPd5w<@+Z8cz9w^W`rD7;F5#KRiw# z(@uU2GDywkbCVBZiVQdfaF#z|fnY4K7>&q(bM_XH_Ncd#8?`k$g?C zys2P*3=U9Xvmkw#rC7jEz7ptXgbvsd>ykf+DS@WBiTmqIb6+$(1jkkm%d?gGz9x62 zF2jG>toZT1jdlG=%@6&Jih|$fYfG)C#5qGU(78(|`8LxKVJv$yW@=NQ^R}W}{N){N z>>WSIiR*6>KLy{Qb!!-L2j<85gZ~?zGVwR`Y&iza1usAoukSb%ro2BeA}uW@hI2sN zsYuQc7ItT67qw&0q13mybm>w=WOh3@M@Fuc#r?MKbj>>`eB#j973%WFBb3I5`eV)$ z_%Q0))?B$-XIedW#Ef_;SN|5Izyq?$rR@sEf#(|1?Tc?-Gc%l&EB*Awf6@6R&pobB zuj8%XP752{5iH2LB@Wohg*dlwC3nSKOiVc{o_bv^)rryXbWKTDjWKMx4ujzHfT;cr z{X`~Xv)Gyrlw?^nRTM89M(D_|w#A}&i`_drD;{T&nmnHIiqsD~W|k^8hJSzOH^Jx| zyZ_nz0?bnB_~<&F4uiFq@9O^XVEapo{ngchyTa_#6+Ik)DsbT$naIe~85x9?cqkeF z`uXE+u?)FW{2-)c1hG%0y1Cx{6lj;epK0+aQvSs!#HU=S3eq%Cg#wY?qVC`g^s*n5 zec>hf>iTrS^qr)0CjbMrhah>NDp(_`LPeJZEOhHu&5}`q^G)Mg(0X-$$R#L?lEv9 z#ULTTJhX@9C}ZP?V-P?czLQcYRoi2tb$E5=Mcn5&6c*qv+CDo3FdoBlFFBUZQvp(F{q*+XgCxbx`E;l33ZVSF)z#HSOmc7g z1c#=ZeAgcS00PvX3$<3sN(Y{xco7}y0o|fj5SZFR z7|y~R>b6iON&tXA*2B!6`4Ho6Xobk6Te<}_2m`uvHK0=?K!~2qe)>9^bCN$Qj*>|s zSB;lNr@RJidfwEOpmdK))U=fr0u(|g(vh;Ap1u@3(|i!Qw}w@3!S*eRGU*%*nE^1s z8F{;8(!3WmjYU9P-Pe^BzvVf|iBasMc!5OcK`EYmLM@|>VQ(L*yN&8=8nU>)yMcOc zRE{bZwZtf%_Ue{1+(71q2q9GPp_Q6?{!piOAW>Lvi)>Wk^6Jj@iIz7v-%miO$7?7q z?4X^z{RQY^$kl9IA#h_!ZqZ4WJ*^CQB0kWQ4g-hiqr$-bc~|$Jx07Vec`kl)6GLeJ zKTv}chAA4IlR3d0FRA22j z-0wa=OneWlhBd(QN)oVc3+>$L04!P3bJ}C}K<0awoQjy}x^1BRgmyeq>8q>&Y0`68 z0y&mt(tBxm61{^*ZG*Z(yul{(x*_R&#U+hy*fCDv6zHu+xxAVK2_!++68Q$MD31(P7^u~kV`VIOe${KwlU1d0M96)VoRFtCLWEr7~F zDzaknfPPKRdXxgup!s3fH=sTRaz1dzo}YbFTN!Y$O?oWI&TYzyFSS4?$ap{|F#*O9 z(waxSu41=vRX&8P+79QlSxVn)t6S|l1~i3%Et-OINF)(U2r5r-T+zW&^5CRdh*)i! zODoUMy%{D}9uNw!MTiHF>7`C1ES-Je=JK<$H{p!?c(g9s5MPB@*{JLNqLF{DeuW88 z5!x6uvuwj*Cc?WY7A}KZ-;EO6r03LW2C{54tYOZ>2&6Dd0M_BUm;4XH9t}PA>~>A= z+Qvr&({j2g)ociB^(F@Gw`-w2c$vWDYB$lXd8nq1gA05nzB3FfxRrd(h*3e_jU@C^!>c{9^OfOZo2l`68XLMg78-NsC^ zFzZ219%;nA$M59C{lx|Fg6O&0oFMQVjrU@q31_OnX<|$_6oeGKEY=kg`lioMgtLMYyKCF&ef|+r@ey;<(*eLhus!VSJsGnxGmcr_2s{c~gr% z%l^InJI;b#p>e(mz8rM2F8x9Qa5h^@qE%FPT34ob_sdO;|)nQcbH zI)Pr6exbV4l<91@vOKSLM&ZbauNtQK@Qsd%T~|KFFv|Cbt8ylPTFUg7&m`m+>$1K* z9j;FyKO43E168J#`~cyBab!r84Q01uMz_>qK})JWd7fX3Wz|4d@O~W_prTfFzpSS&ny9mY)iYk5kO2{u*qS zXB7z_Kw#~vh{34FSC-K2w#}PFenKeb5K$^ha6o^6vEKISAYrK?q@P{>M^prcsf~T= zN)|r2;#8|9FR`|9Gg^iuKqTAb-Fq}$7O%i!`GLNlo-4vQm~N566)Pw#e<^TxvSg!> zMFwU!i#Pn@m!YwO7w=LvMW+esn(gz_^x^;BCd%*FmXGUC_@O58_}9+>PM%#$ml9sJ zoTj}qv|a^}W?JkXHp=}2ZwssoIpL!3 zFCyTztkaMV8a!GkyEkqq>xt>ZOW1A;V7mpoxP2YA!ca7X!qK#UbdgIc4S^R~ikxg7VF@i1mL+|AX1M!@gZdv?0m|^WhK>&w< zQ1&*khS^1JfWl!<6s5F$D7za4#MMZ$WV$pJ?V)R&N}H!sRc~c9=MBt>1K8w=n2TC8 zU7TqGMTl$&pD!X>sVU0$9x1gOhKpui^!DDJtl?3!cd9)4-s*y z=>poq(te?&L;!&=+C1Ay$k>09u;a1_6C_@hCdtM=Gh2#I!S*fR)y*K9hce{fk310O z#xkxopCCXGY7Fh)_3mi)5l8k#A@d`zbl8Uyhc$jB46Ub`@sCpIgv!#9F6S5OGzbx~ zw2v_I;NN<3b|O)>n7QMkrZmjjby{yb8}?CwQ4H^57@7eST}W=W(cT~5nWba1&0YOq z3j7%X$@?i=D4$GON@S$0JC@zG+slB7g;m(@i64`XF4si~$8;ShQ*( zJ=7i;)2OSUgl##HcKGt+q}_ozv2?APr1BY&wKj3TUYnhbN8}m%LyPXLx`)Vc9bTm! z3&Nkr-1um(R=cx8K)pzMW~WgG3p0VfpYlNSO7u=o`U?CL_Hli;vF3+6X_YsKTum2m zZqsr|$ChM1mTQ9-C5=H`_YuW1o45gyKbdcv{)TU8ZQr%X65ftsGcDz#QxiRkI_!MM zK{9} zwmP2cFRm8sMj1}V#Ysyp-|kkh_gY?f_$hWPSp|oi`aX2&9Gh!7aR+!7a#`JsDViM< z4Guqv)9P4K?ATW`6fD5|@mgbR*86wIt~PqLzrlEg^c>)n{~22aEyBZ`Wvf=ZO1;yp z-;VCToZX|z8N#Z)hh)wo75lV^iyT+W!1+0Bv9dV+>{PTYzR7ril~BC@ux_YALS#(j zJ$&T}DylgRv6c~>%swhwwJV9t8KwPZ*ReN~AMW3`5F)cq3~AhUGMrIMO)x)=J=3q_ ztmwTE#b3NUG=F1(Lm*N`p2 zN5#3gZCHM_RuL?!-&T%4z4m=VC+XwmZ3+&w>CH;4N-Z~H)`NZH&JUlDl` z?VIGA>dAYtqk-lM0`(Ybw}kZCtB8gY@+%8v8`sBkdgPRQhcV_=^co zDLFNmgl)fg@2D(@{<$dlPaE#7V&J%GVe@r2sq_dBq*%%T9a(h-yT7`_i!Hdo5^>3o zo){F| zhQpR0oj%o~j$s>eOA^N4V<+(r8Ox|Xl4{#yJE1pYv?RA)?lI+>-91Raoez{Cg}bp5 z7}7bC3-&SLCgI*v9NKyJwJrYOM_yGOWNQgV-s(bbwlvi25Q#Ub$``~rCQu5Y?^LmKaROl ziAya>PBbTbUr-&@EN07baw9p2a@oIC&iT5e{BEbvt^-FpF!<0@QrbK%%qzBKggXrf z{jRZa^&R*S6cu!h)wg8dF3OZXdx7Nq^!?0shVl#y3F0k}9!mkKTA*}VhzDAKLQK>Y zyB-iy+LsNrksI2b$wJL&!;$BTDS4XZ*)Ch>nllBXut6GSruH|va*xSHSFi1~Jo6yM zbTlYd5Bf=c>fG@&EK%-MnQccOX&;a_7d@$FM%=rDm+LLdUCmkJ0ri1C;K7MqC#X&V zc`xivtNu2G?XVP{@2Nnb19!!?%Bxl`hDlRjyflK$ZbGl2_*rj?bEL`q$Ux9dphzJx z@x&IT;V3W{FB_T@=FYvTd-tm+`Tast1^zUhuKvK(4i;cKA8514(+@Sd@=eULm;O38 zRoiB+P^^BEI+J37mCkVoam)+KqiP&XLDp@X#S)p%4sLtrp_|t>o2Pg#=!-Pn08EMx zHE|y{N3%m$g6zFuL^prR`aPgS%=LxhGm9!Hg?k=o{#z>(N83x4q*(xC+_0UToV60n zBpHRb4p8Nn_L;c`$Y_mxw)_?OI=1Z7<`;j~+xsYzWtSIq)oJnYAg+?KliUDVN|Y4H zFp?mL`~2A_1Pv{x?70-{~XUe$QZ;wx<1$rKk zQ8gCvX7H)Q6cIY+O{F6#_-arB5+Zb&c+4rCygg>u!l8`<==ojdwsu8o}jS5U$vk#p;39E%u zpv4#0mo{<@RZ3Z(WG8lqJ@@%S=r;Z}qGhVM)_PvDEdJtnrnngd_ zh+C0*I4=+i1vEcDi*}MtZHO|kG=8|Pyn8r8&EuOOOV|D|*Wo7urQd}UM7F5gL{woU zr)b1JA@Ml17-XVLZHxOw9s;DH*8l}ro-G7PPbs?q62Ty9(UzVJ5QdJoFTlMH_%mPB zaN2snpbTz+l-^J90m~q6EPzz$>Gr^Sog`jXXI8F(k%g_N#y*>D?R-5Q%UU_!B;DC{ z=EKkazo6L<8>q09xjr5K!Ma!amlnJ-=hR5- z#(>FcfcVXe*Q!XzHhoeKMh8wW5x-c^=GC1O@*pb~-@Dhm*#Vhcj{zGvvL3lhfT9d*{=-pTJz8XwK1-!Ao}#yd}5I^7MrOQzEndyI8WR!C%q!*0xAnnPJ zO%W+Wx$r8ChPhh2tfompQvH7)MluE+T`Bvds^1i)rzG(>-Aq^N)c=+a z(_<#q%e%BX1X2>XE{6%g`?NK^*B%9$Nfk0f0FUedOOjvl$~E>4>JsY;=ow`uw&Fjkj&1%DealzW;NcYnLt0H{VK zwp-?iE-*f+#^p2ULe+wv}GmC=EofsS=LTbrU z&Kiiro#wLh`F$&WKx|7S?DVE~K0FzG9CmhY^M0W}Xv4W2@YbCnH{fFpVL>!r z+ukYy+K>BSKmMC39RulEYIBc|9_#D^dYjW51jAr}n;LzJ2KIvn{Bw41#gkhl_vLT!Sl;y+o~c?AvW$ZRCD=Hl(oQG3>Qff`1Fn*P@M3rYQT{va z%V79cj5ad^_mQT2dSyV_VmAiTPcLFJ&vdL9i;pcX>|r7bvNHtA*3l9WIHN zDOsu_6l3sHY-N6~Rlh)n68$dn_oGb0(#$PpiortE^qOePyYTeCKc&y`wif4SHZ-_gx>jE6m2-7 zo*uq@uiDg|RBHZM8im~> z&5F#)j7q|(1n-&RY;5+?t>S7I`dh-V3)%RIx}fT~-3D3h4q(J{>kHVOpe%Qwc126P z_^tv7(SvRD96)%fkaHdAvbgU&_Vd(m)tOgfmKAmpRqi7L($doPJ=bWGuU{XAd93?n z$90b!nogfjugx7D9h+8c^#{5wkdk_7I&n-BiodAPDdU|Xvjy#4@99fUeCPfDULf2Z z?IaYyj_lXJ!)ZLI0lD8kB*2{eGvwXt1`=X41mrLO3`A-_cer$`*FKGiC}YP*5!JJE z-;=;@Cn7%*b|V+1fqMTHPka8$XX}?W*Gmv00V9A%;W<0ou0bjF78%BXyOMU(+;nZ% zGTiG|zt_Wv0fp?Sx`HUVX@y@3!A6#I@IlT2_tJ2qk}>FJfsVQsuIFAnObhP_9zT3I z6|^_$2A!XuJ{`EUTQ2lVEC_LeXGk0!O0`q{v3gA8gvEoiH6Lb%ggL1tIt5KNK($~dQgNF#wyMUwpCCCpbMuQ@Zk=X1 zL>*eJY`VF=7FeDyznJcqp@NiFxKt_8>WIpi63ZOy>_3czf8Lfv>x}Zg9M}?Xp>RVJ zj1d^wn3oCBc$^0n{|HnLTTV?7O?c>IZW!XcRU!}MXnK<7+I!%41Lp1y`fkH`3=@$@ zI}{1F;n+R|de%+`x`tO^CyG30#TC;*44uSFxKDiBv=Jy@lV3=e&WkP%P_zvppRerp zq1}gkEF1sRecEjH}`L=GYczdHe&siKIc8mwBGok zfN2!8M9s6H#mny``luG_uFg{b-dwzgFzuv>&! zbTK(8Bp1Jr0)~v6GTzs#W|Bd3G23Q)`hblUlr0z7cfs|6bbsh*fg{mG-0d5YHas3j z(qoqv5Owf}`O_z;S}rv4f3r)v1Y}sn1C6bG_$@E11EJb8!}5WO78 zPA^2?=WRw#`y$UQh~GJQ4OvllbEUWN78ztZ!hk5RQwcwdY{6U$j!OTa$GRly_w`zh zv!W8Lo)b!zEkW{7&HaTmcP_3tF=d0l>U$)?`0KhAdMKM07|uXMh?M)g;gV-b*wq2Q z)jq8o$+&WiU>hcHklJn%N#4<*$AN%hAhIO)VuV?k2-e7`0!=MzyEsUD+v*j-1^tEw z7uZSkty8%)`oZqbWZ!4i*B{=~cZdKoY6!?&3}^aW;Jf(Fa1XK8#Kgo7_|r*2FxS`; zx1-RTd-b2Mb~@vGm4Q^f{|reIL}ZU)borWy7pS+5}Ah z9PbcL_lkr|^GItwSD0YveE!_WBx0VcfG(YzmiJ;NMje6VB5q}Mvtr+Y5^S|bcUViQ z*Eiz8HKke6)EjKt>>Y$V7BZW5nGZGflE9azF7kdG&rh}RuFQiyk<5GxX$PF7-A0Xy zn5>BUB~CCydVtKzt{XPe(j7UyOWGju2Q1JUI6#6*itwxQ(2aax3o!S6VE)kYp-$Rh zmY?imIBj?`>@RJ|jfZlMPU!n(zohGpk=gUq(pp2e1*JAr%^BQYhN+6Qkr&Vjgz7WO zuer_MtmNHLEtJuYhP%GMJk8l?%?RjpbG zL$k(eIk;+aBrLN9lz7~i#$DoLRdi>9reiVp3z%y zM@#7^Fhsb(wQn_9r*%H@<7E{nIXA9EoCT6699_q&dP>&Yi#*T11 z91l!`Qt`iZM%q3uO(q``@R78_``kXXUxKj|^PAReHr9-L0{e$n1#!gPASkUs_QI;W zSEn$pVIgcc@8sTTv#lA0b|dim^|GO+r_JJbRcX9w(q^Hk5?s` z?=*_felpczKj$oWem5&{Y&D=kk&^H!RE%30caxoSX5!Y2vw8G{68igiGiG2T-3~_; zH{({RR}d=8pBZj&D4j9+)%k>14Lb5sEb=Qbdl4GS5@Zpr%6mqa&SOQ;?mZV)LKjZQ zcx-rSCFm#DQM?gTD;SUEym12Ru2+OU!?&yF`woZ4vSu`zR5wSA;)*c)HE{g z%`MEL9>z~;17j{LPx(sH`L+SvXgP&Aq^!OXMaM7rfD4c&LxH(JDsoR$ij+r zLF~J;HbaeVc{M1d!`xU&I!GZhm=k_!w{n;?7lF>4Gca=c08=`9Aafs^^+Hn`;Y{!T z>+GIwymUg_OhT7u+|}BdbJPPdDjQs0Q(S@9zHdmV9IN>l6e?tAsGM5$S&kw!mV1Dl zd8&ElaF^n{jEU>*`{jG=4Z1?8t6;+4OP1=5@$$nCV^=K{zkW!vHlshDhaFk*$_#^!*5T%PI#&Cm=?I{&XoAYE`1&L)BNWr01J5PTJ#&Q z8EW%RsLfffk%`Uv8BS_rG0^v&pPF zE@;+sdrK(FfSOA-sKP3!6sl7vJa68EjIoCkc8Uiaq3m9eO&%Tp4wRlU+*O<|`v%-T zZu3JG3#&Om;VLnYDS%jMxgAOO0Q0$8_{)_lGwH5ox$0@!{K>~-e{lg&xz}A%(iLle zMf|P|K*Rq&H+5;tUC^L(a1&gd4tk5^D}&@`D>oD@x=_U8r0NeaSgo0G@{Y#cVFPSu z*MX+p-CceCsIN&90hFA(Z>j4cNYlGxf2Q*u%;I+%|56BU0#{E?DrPUAK~qODzyLme zfkP?^yZ_ufWx=~b-^L#-LZHZf71IZ`q@qh~?k>*~syg)q5M8WEb56+D1 z=?*;Z_ls4QZ2ZmBejdNybQ}XtKZar@{JW<_;ZVB@hOja=NTqDN7i}S4*g}0&C@35X zZgH9j`ztFeD{t4YDNgMYF$B@4$-*98FVVg}VTxj1OttbAZwL-*lpnI8+CdaD~^2$qF0As-v*yhnNXQzGyr1p2@Dk~fy0(!dF8M7 z4{WGXG~8bI+%55b#_Rhr>QBn9x8OZ1i!+@ZoR(M0{ud6UOo1Yi>7{BKHa-P7ob>Uj zw)S|s6S4c~^Jxnt0WG`F=>A%wWJ}~ukIY)-+`%Ov2M=h0&cTohcxGfmZv|ivAY8Ai zsfZat)kti&HXgH&`&k9`$y2AY`_>5{SRDYVU2l1>TC)xu(perxg(uLH&PTFqrcTb( zp~SCG2mBvd0Sft-Tn3Ieo&+R!lxPX&orgb;0N# zSv^dc1nbaqr@1~Yd!B67k5$_qzS;i|9lCgG$`I*@@PMuL{{l~7CI2NGAEEWJ$g6U` z;b341P}!fL9a!SRFh0v}?)4!f6$9nUtzq6IV22;$5ZN2bD;$CcAFf2oV%gF)CH;VOPkVDVv5U@oyO(`kk85I45y;WZ%GbE z;XD+qfSHi zx;{|tW$#*;)KgClNTB$;S(=kYI$vThTmjJX6T*<=GgXBtY~hM!tB!Jg1Rsh05q-NM zn#{8DBPiMo6z!-;mqJkVKclbTTjT#iq7mJl)l%t63w#N)v+UQWHv-AG>=Y`WCQtui zYGRQBb;66S$I*wX4b^|DjXIItXaZ<|{DrFl5chu!TVJk#p-h*OiKD40M|8lO{l6)$ zVF~~8BtSk-e<0$;7z15BJ@VdSl#%%%O>Z^<6jli}8#}21 zxHc?Z-_&?CEn+4lAPXyQkmR7}`tr8j<@RtI*IXW;tL>GHHoF_)pP=s$Or_BIz1gp(s3@;rzVeIO&JAQ~(&yMdtX{^R@l zgIK>WzZiK-u8W_1oq6uD3*2VDUiuoQ2uTGw=RDAkuO0dh;_HCf;#+UhqEFGLA-s^q z2&o?-ab4tFUqS6XF_)%&(~5;v;9WEMp>^09+bw2tSpas4{cV7}|FW-uMfUv9MJ~81 zi>${O{YlX8jexMXRXM*dLl>b`>;>+MBS0-r zB@Wqk0dZjj*(AWMssbS+V1*-tT)j&n`&X*dakL>s%3i4NE||DvU;5@EV!(80em_87 zdaE~eymHWWzXLwz1g_(_&e0an&(ad7G}HdOe*A4f08n*!+%G^o&(_w~8fwNVWJ=a47d4}fIB|MMI;x2(*g?49&I5HLOfxmjE8e$hScA~|k=H=U;lWw;J?*$8qR z7#ofA>nRe*-RQ2XWyprgaATD-O~ zocnxwkbYcTSU~+lcECb~_kj5`tbW>PIP?4W08!89hB0~O#69wRjxHUzT+=$G5Yonz z`URl2^|Oylen7I<1AyH{7U}@`$08VRAHs znBW0H&%4aqW)KiYk+j|-Rm$3}C5m+o1;ByD&<(P&3_#4pkb}L;d zkCCctb0}X0etEYS)Kmz~R@i$1Qq)b&28(ZH&wgvDhfpm;tTjYjuYnQL&`^baDbT&k zx@hnhKrXH%U#{DFSILER(V^Jk;Pa?}QEllmkrUI%8^`nSnfh^X0Mpoq&c}a-I%xa= zXlSQHXfLhz&&{uf&O~9g);6HCBP*ZE&h2AP1po6$FjD3sMzV!5f20QHP`DdANqp-0 zjX7y`;x6Q$J&ZwxKQa*A^5ciiWL*t_Gzv246dQxwhMR6NlGW$e6H7zt5vp&kNjoV6 z=f>k8K$uWE#1PQO&kzDPVH{z2-wn`M!(7ZI7HQgSpdxlhr-IF&Ie+pT1CM+c!eS3% z`?omn(p0uhX%%y?K{q@PUBLrXo;XwzLz+)3uOM$o;lqS(A|2&3!Xrd8Oh|y)c0Zt@im`Pa^Zsf~?2&IP)3 z^f_9`G3qS4x?&bzbcPq*177!yB&iTt`~uNClrW}BGO0=9u}2Yra@D1vQa(#Opw0K8 z6AdsJ@NihQB}Q9wPAa45x`|*}Jhum5p?>-8_PxrCUl&fMx{%J8N4rw!RY(6_&!t}1 zjD3t9R^)Q@FswB(`pxr?pXqUm6onib(@~n$$(7Q=d5J$urD71OdHcwbBR*hnrr@H+ zp$)~pbuFD|$h+OEB6$7Y&Mv*sI<{MA<_q zR{fwn=cIfT?ZqtOWN7f{N*jGfv!)*V6qsIiTPu>&hIm4@LyiBDm?Vfa|M;0#gNcj3 zD^r@gmH)*Q(mAN;v_%3OPKfa4zueZ#|AN}3X|Iwtr>eRsW30*8ozHD!QMK|c>E>|~ zf-+y?j~QEEF_( zP3tqMpbCgwzT8_!=Gx0oX>P-Lj_21;5}odMQT0d@HWR|{6{oi3sCm>1zDDInl3 z&^*u0&_q#zziG<-!1E3xr-4!X{+XA>NlDxKI3MYVRRd#2Y?B3Fd-m zIzPMc+6V3ey7hjMN$4KW$GIvp((-EzGY-O;<%W#C=6u!K4ePxVzJ?ZznQQO=qTX20_S2dU3 zWaURK9ln?p(iA9e$vGz?9^upw^2K(H#I)a! zoA7nTPXVdsZ~Z2mP5(0Ig7JcmwFmPDwcZy(@(%^yd9|?txfvhohcCyNwsGeXt}M!} zp2+l;Tg`I)9C&^DWq8Vy0AY}2dJA%vh*q8G)B|*)+JSKVc<|pYjmXn+eAIPDz?c$B zZ@J(?%NLOiAeWg3no~vb`|fg6_lzOO%ypmP9Wxgb@;p$q-5)GKH68tW?_&$cTY zQ~45Pi}f*IAOsvokS z0&hqo3f`ObaC6q$=h1-0AVJB4#GDEftVE+gH=U#w^H;Oa9b$Cd+Uo`8`elqJ6{`ep zGlRq4%M^H%+}mfo1X!ft(TrX7H9PqbAwS}s!%*_YKB)mz*A?mSwknvOq*3la;V;`G zMc#w#A-D{xYd0S}N9WrIof(pRN>Zxrjls^+{X89Bjz3S?l)j!eiy1KgB0F+k6*!+> zZ%#_=tth0wT55mIsC>@PE-*94HWh6!B#MFQvy0e1 zYcC^miq)a$!N3~OLJizotoCVmd}YXVWc{kR!PMrX*A~^?)sCgmszqA-n``=qFZ=Hc zeYWv^;7VNFt^)!Kb=MTeX;TfP{gy_1J^DhAh2bt;;tBZv>EJPYl8cfa6r&-+F9^d; zY;(PjDgbx-zxr@7cJMDdJP)JNxQAPTwyoFr&Yc6AMnujch^3HuR>9|fx%C|woZt|I zXVo<61Ksaj=GySp{EH<|TiJc8`(PHy-8gVH54OF) z-ukc-}fh&9;KN-*?@3R{!@aF}1C()KLk{7gtW4}w*z>c;= zn|kEJ>C!UQBSD(_Y7VE))N6fwPH7~ZFViOp=)h2T*jBghVwXOQ;K{QHo@4>ILgQZ8 z?*(#51DyKqXcFhpnR22wi;`KnR|*=a3udGN;y9wR79uwDEU=mP{>f%G)&n!7%!VPc z9v!m8v#c=d0$yE`h3$(g8kh^{vgZ73yw4Aq7d{|;9zw>W=bZ=3ZtMm%>xn%^yl4C@ z0v{n3!RU+}Fl^Lc&>FZx3UYD17G+^zgz+x`^Y z|3R$NPYT^xnDRoQ8F{S8EhS=4EoaO*HC>J+%I{nh75&G@f7=eidE_ve6nqzHetkp1?afI4l5s288&zMYWqt+<4)(-uCQh5jo+j0Jp_8|JjuHlOJo96Y+0f9iY}&jN^c593MPg;e^eOLmi+h8mqG5}Rvya^`5U&efBIdDc-qOZ60w|C=RDiuuuI$S{{Q)MmjQBnp2shGe5HWoC`S`ig zoY~4$w`&(Seg$YZBVfDXAS^7r23Xnh`hKBKsyb8Szt+J~}N&uSST|bLb zbh@K=U50K>>bb~`3yD?W^_h2T=Ev7W>^s&uavfy0u0wg#MHs+I6gvQJM%m`~PMJHx z%WZadO_5_?^U1%-SU4qZcF@hyv5OeqM@|ipHEj=G1vlQp!#HcN=hy&Q?*x?mRps2* zRGM5L>b}8`*WL*v0ez+|`&>cBY*g1A2?==)NX1fn{ z;vw>ic5G%%x9aD}*!VK*hp&6{)ZJl7YZ$)dM#3)CPVbp}b$2l1pd@J0eU@aT<(`Ai zJ=GsB@@on%EM2V84ZLZ54%$yPKgVR!2ustlkktI9V9X>QICc8hx6~va$WD2T{2Zhn zZcC5>Q=K`G$M1wFF8wsvV6PB1gouo9lxpDmvxjQdE4GG69rzPZhu0IQMh7L6CBTJ3-q2Ghq&( z(+O$s+2bN=k&HZ3AE=rLAoKCb90h*I3x_ZiN$vv{o)1eXsOWi?w^El*niDQ>5VzCO zJ-XX=$L2Ksz^kf-tB*={mX|$>8QRG*cgJji6ly*HX!8@}oJGaK9md3Wbo?q`4=>JN znm4GaUB^ndKYG8OIo-~__-LiO>+202!n-Ul>itcFu(Qsg^6(IjQZtlt31Wuc2EKeS zis}9ivIozVCqT!Q8jqlqVF|e%o4c(y{7XDc*^gwMHxoHRV?$O?#$A31Lw%HM)m}nX z#B&?1x;4uHWtIW}*QOUEojK?~`gaKwzUYzjWO3S-c4zxjP)cV*H&T)yJ6=e=Y9;3(+x~6;FGvcS$~Wy5 z8#ve?k*^+AM1G&#xHpxStv`j#u|ayX)k?YZu^*6Kd6#f2ND}3O0(UL_{c8i(0K2?; zmwb(K9BY(4KPBiM`(=!CZQ_o8^O=Et!B}M>=YFb+mvYCq(`JNs+{lx~nqM>&jWblg zNoAmX$l<_@Vx?Hg`)?5`r9e|TgY<4?oDP`&A$1nlNBpKoaT($Q27aZDH;S4gt zqevspVq6RLm2*t1yfx9QqqyfXarmS#CZ)C`28a+TrAw*M(3mRAjp+g~W3qwlif;q0 z%_LkF-Z=7JJVC8~H48EmdQ~A)Xy*c1T{(7?s!FwdTUujXbT;{CSR-u^z3U@R^cj3&E|7-hjwV8Pgkz$DKWfq#@BH(+L8$j6a? z#7yvfXdQN_+m$xD{{#3%{RbFER`o1rJ# z^KRn8nP(L721#(4^pukC+F?XFfD>YnA5|aV+lW%Me7I(K>=F-zu^o~8!k7dJdA6S& z72I{G49?t{b({4q9H=_^*n2*k$B?|gMGT_3bfrpK`r41DicLuw;VU z-Xh9E?M#9B3VFS6_|u+z^Rf}i2z@f{HB^*f*k56 zZ=X81c;1;NicB|32_t3;jz}H}+g@(M|DX`X{t9=7c7`vQmT5gWbco`C{`Oc*M@X1* zA8Qxq%f3-EqmV(r9->{8wotqtv1Y$MNh9G|>0YF*UFr6(GMrt}uGehPn6%jy;%qFRoyatRtAao^KOzqZ?}B-i=X&U7OO>!Wjm z&ix&GPF^$=KZJXMvMym6n?iD;SbuuPOSF={n--UF&!xGlU z4)oK4YhMAgWvC9kZe8NuW@BO@HM=zp8@YG2@imR7{h+Svqg|Rl?Qx zUzr-UF*0Co75NrC9U@-vg=(q5mfs9VmrJwJ^z9sYbaVPQk!Q-WO{zWGIWKsGDh;p@ z8_qtpilZjJ!8;gp@=~_X=)`i-8<0^Ab;#8r`GBQJAKQ-S+bGD+Y5yY6qKdE?mS@bP z>*M-(#ju3=MwAtQ)3!(C#!omia>WxA8l(cBWsm_3&g!8~Fmx->Av5SDwk4RoH`WUO zCQruNAEoV`zqEk-9P`6_gMTztz51vt#sUoLw`}8rTou@6*OLD~|?Ke&Gv7dAiKdSO z$DS>GBwUpBDiOS#r*wC-%~qUexy2V3MVHHRR4VXRo8%msD6zWPb`KdD&Uu4@B`WMN zw{g<8{kY|k+yt?vdK{ZcrosnGduI)6vSf-ON?CGh^5SylAKDT8!q{C&a?&&|dLJXJ zhcZO_g~)g}5=VTNP7{@=<{ROK3#N%%FK5R*b*eW?rd_PObgI&4RJY_@)cy>}k5&N| za#@sA+}Gg4!K|_b#@M)PUm2n_G#J+?&XlL`z&;Mf&Wn6|_9B=ks+V5UjJ}r%^YrIv zRlnCNkNNh3Cvd#ZEZ)3*Z@>A)=kuqVq9b$41G0FV{y$I|FunrP^^mc&b6ag)E4SnfGT{em?K#TGogiEM=lt zld#(i+ldr13Y#*j2^_)OvM0E0RcW}F_Ru&py)1aJpP4Mo(khC8Q40^Pz;Wg4D+JRl zkrUZU;+zzeD>>fXJiN4x$A8aIU0 z{T`uTq&d8{%{9qyMx_+I-G4YIkE@TbK=9~Gj!*s^BRt=zhr*dF*uSUc43aSkg!U4@ z_VFBEx}ivheIwDb>HNG~t3hsx4r8d!Xm&D})2l*jd}gqPZ^U$_ECX9A@DOW22`5B< z1D%DM+P38Eq&++uy)Bh|x*R7)62G1p_d1^T4%s4=D3vmjEhS}-R7j-0kIQSmKi~K7`}_R$?tQzxoO7Pf=k>g< z$K$>pWlnb6gGAeoU?okQB9F$3m33TciO;)D+Y>_`cAYO(ST}&8VfqBVQ0MyARoZ%5 z;)$rtTK!$Rv1xUEt-BswDl8cnzA(&*CUdQ#`rGp-hM}@H z8u0Pb8AMXi{apE|khQUO-p+f=uio-^zsMctS&6sOI$lO8Y-}f4;jO&OQliDkS)kHa zsJREer?BAaMvN&|D{XI>qP^1YXfb)QOq)A?XD$0|dY;^wro^2u&1xMo>NeC84NfJ) z3%XGn@QmN)OuBWogH3^{*FOKqC%qvNSv=Pf0oVoo;S)VXbS>cXio-Ml7c9e!!`6+^ zEupz0XJhR)W@RO0-HnG@isdZj!(SWTRtyRfDZIy6<`hxfQ$>3;kt2l+hS=+#6YPM` z(jDHs;c~88yE5>Om9^=#y_9rU7en;^AedjBBXC$fjk0D>`R6doQqPI)O`?E=iIql% z3ad{FHpu65Um&I+(+kQ3-NRVAPp7lY+HM=9%`9MTY@M)L?28FOR)X+K+q1bpfG8>OODcpt7FofC!kfsOK>U%HfqE1y+8iX2;mVe9wHPBr?9dH^sO52GJ! zn~boMEJBn>gi)dM4g|2i(4*Hsrs6v|Pl*$*r9I)L4y&YAsMi5oG+h`U59Q@%zK>0E zYQY=W`P|$ZY&?~q#9``L#tV|snJfnZ_)z9P3weefFg&9P^|VOEV)Zd*KGby-3dHfG zxKcy-PDV%_MI{+_s%^(-{%lfeyQCrC0#<$qu@fy5}oLg zZkvO5I*O)hz3;B@=RV|6_)=1FLxyPQ_RZbg`Vk|&jJOp%De&FW>Ea`y%N_u_pgOGn z3iJ?Lia%g*R~4#rkQxKzp=E>d?%??OZr~+$t4NcBGa*(ia;qgRS?TRi$k12JsMq~N zbVS_%SKXnLT4^+@hjfk}qrh?O9y)Ezq2P%v{}KE4q?_Z!Ny|b*`h%Kg29YUJd;Q)X z{3um#I+HGumWMqG>0{Yp7m9s*0Z~dR6Zuw1;Gp4<0MXCvn>)`qMGqVptmnU1J{I(i zn^ufc_!bO5K4G6-6(@G2+c2o>mG!MR{vTkGWaF!v2Re+rNjjPK-f4ATPoRa9_n}CW zg5w^7IWp}0O5A4w*Y^kx4n~dKC_<`{9u%b^I_5&^CEh~;*x?K(mg&43RhD<& zw^G8B*PT_)q1>)rhd{sL4KR|W`tF@!GeVoNvKD)f$kid-2`O_%VUWQ5Dzf?c0w#7f z3aw+^$hcW$-K^F5!R|N)<+n|Bqb7e-ZYhCENS8${b7xk58XLIN4Ga72qTjzU6;{S(7Bq@}qhT=nP6nMeCbDna97@_u%O z#IBtwMXQ`}F_+j1+XY|`DNs-(1wyFJccGchn+D%+tGTwL9ko-)>rFT0@wYW zhIod{8twFzSIJ<~Nev3-c=&UI&u;Ij)ZoQ;FO-IZ5O_4^Q`c{qc6|H8!_bH8{PW>l z3Wm&1w8S%O(QtXvmFV*FOeu{r2Zmm~a2s%646!u1CQ}4&LJC;`xllrq7nED8}Q5RilgaKAE zB?q1k|Sd#4h|RQ2s*fGou^-IrR*$SpE?9eOEF>13lrU`J>aNtfnO}V zaQ=oYB@s4n?{M1-`Y&F zp~Tq^V~LJ*G1hRgEUKVHjkG8xecvJYXoaueym*6^LUYC8ShNe`t6%pz4&m`1f#i`nJZwv zfxChs5M;OxXoa$h3goI+#errv>nm?-pJ|Wi(RbHmaPTw=CA~^cc}t{7tGh3)&`Hf* z`-l(f`w6RJ;@IdleW*K(_Lro=9q2TH|CXm<_t_I5kyC=fb)(>IUwj+b?aS)VDqT`v zKY&d_Q*Mw<5bd{ou^cVwNLR`wV|xNYS2u4?ZMo9*1c0H9ujK=p=0b>6TmTi)z=Lz4 zC>UT7xZ^qmm0wn#x_*x(F&NFmLD2p)i_AK8fN1MMV0n9?awvEV9Ki#Cs1ce9Z~7%d0@P z`o7#H8}K2?uOgM)_X1HYGXk=9I0Tv24BD8Qx}Zp1_|whN_Y2^VuBYC4rX>gF2=4He z2Ru|2T2~a(a{AlTi_I=$2yupV7+M30opgg9ts z!K2=Nfx`n$p|Sz9?bgR#zbnzK!<;h{v|zLUxBy6V9fY^O)hoEfuiOiJ@D;8r!bV<% zXG~FIJD>LVc$UMPZ+rjnMfsW&v&!<~nRd_o8ZG-8&qna4J}-giewAq4xuoaC6pRa7 zWmoX5PY5%CednYkiv=_@ZSZ8>5pH~h)&?wLi=Wbtg`_eR4q&hcn@?505JN+XGOq@J zMcoDln=b(BEYI`_=_yo??%1*8e$aK4`U|O&c7vgFeI@k(aP~!uz4`%yGG$F{@pTyJ zbCVNBWF0ICZk!)m58G5REEfi&FMqGJ)w5W{E`^-clnpr2( zM5)T8vF=QrPGD!WgBoBA{tKpN7KiEqTW{s%(@+`k=27zzBqKK7aAz*;%D-xHo+qGI{(CDd zpu;6_VXjI$J$xJXeQ8niIe^WloGz@UBOsb7Cum{lb@;}tcxbT(_|61Qj4yY&6Ihvg z2ytlW+69e(30-Ph0y`Q&X1W9L9?diqzR?NEMvaAjJxM38ZsAL4Y$*-7A}ThCXa{ZnA*u zV9PF;tyd3F^ANZdCkqY}n4lvFoaNI@hT^oU=LAeIWK!A7G%NUJilPEFc1#*9ueIsu z^9a%EiU!uqpUFiJu8`v}3>bz2>Erpdo?^O(n}Ijmt_g!~Ai(@FjV5i+9hcYE7;N4Q zXx&0y@3};4FbwsRy%!y;C@H&1^5=mthmc{n?QnLKlkas6!wazFz>6KPWo8%>uoy*Y z20nV+&hyJ!o1mI>;9yRnNyhHJ6uqe1j4_xPrfzw>izHQiM?0tkivHOg^5#4%pC*(2 z9#QS<#OK5>AD^ji{&gQEJqpxQJn2NGC{*2TV>v@Dg{G^wFV<#fn&O{J48bsA4qPc&2I&s7=96C zn*<1Gn#ecuJ$Cea}6@!R`6TCFkM!j2dnWU;8pH5V;7LfFy5>UYEC z=7}B(gV=IHrmmtf+LIPUn7VyE|P!3*jf+5Ik2>V z85o~#_gglk!V&D%juo<|O2Ne2B3h#E(>K*-sAGS_VUUp{zx8bYe4qTFO3>@{HjN8X z09K4~w8Mc+CtPw79msgW(jJN`0vX45iVzeXCtF8R{8)%@ueJhNvIJ8er73+?PmBbk zFe8ReGiAJzA5jTXy-?Bql2))?G0m3iig(aAN2_Gw#x8eoa=9m`D5C zfFOe5ZJ}R(>X>K*4NKA;w>x=>Ynrzu^H3Fj9i7e6awYrlK}{2un5ZwzrI@6BLi$frHVh*^*qU50a)rO(!10SUS1*%syNta$tYwXl>q+1ct9ZBj zsU$({ynen#j!HT#+}ISsU1Y?tw}wXi}AnL8TSLL&(XHKKrH7%-+nFT7OMA# zW!NN)UxKyJ>YfBHx^PN`kaJAkDcZ5V95rr!7-LsfDVLw=!X9k;cROyIbC}@L%+2w+ z1Lg>MiLyzz91?m)msD*Rcq2d84qCH|JG#rOf5=PubTZQYgGd-ea#O+?U~m!3eUzy1 zq6BLqh!;&*&$~>`m{JKAhb9RQcrH|Z2ZYqAB`~`A1JuE42_%eWN)z^=&{gv5Y<+Zz zxKP^Ozyubd(^30)y9~o<1w{>NT+~U-np!w^0@=5#`?WdfOn2~4C7NKLU`{5S$Uk`` zWrCbVXfb{tkQ+)o1{9~wp@zRB_a}Ilr0^$rmuEw#%SnU2XY8rQmbK%6=>2b<(?#vHgm6e$PKYhshSKm>DzDX7vC*dwi1*q*#)DU--Pj+~EE z+)2Y!uSIon{^@(?kK@$dEb}@~O}Fz3AHZ;t(%pL))G<6TN8roO?prceLgXm~cHMSo zxsT))Jq_o+FD(VPc`z=Jk@60$g+RAaL|&zz^N~lB&KnEK$WG0{SiO70)G}Xid2Zv> zIa=Pl;ZN^)TzW`~mh(wE4zFjypqo5uKX(=0Cqum^GwQH)en77&RZ`D1_ElQSd-4UM zeE(>apuC0|25=v6kN{LUoH|k>asHPJ`R7#iN5 z3N0<0)H^?YoDvTrEEzh|IFh~{r<%kf#3Zi&IpHxM|uZ5aKCHFP^k913`2doGC z(?3j!DN3@0phj@%!>a~4=y`F$fZo(qDbXo>ne)+Nzx$PFkuhisUAXuAed0?exd21L z0QVwHg4#PKTkcH}fT0o|7qM^t(gH9X#g4c04*CW{0wB;z z)Cx!U4=ybUJQ#+2iFQy2U=y;d8h!=cF2BL!Mi-L*1 z_MNC98HIF#6UcZycVP`YVEqoECdB9 z*k*ICL#3>gR97E63~*uHHdfbX1sIa5HnbFRbo^*q4$RBFdu9_lp=vZ5W9Nkx)9uy> z+)dSxruE>RE5f_V!FIxCMi&E(ds#YEy9VPejP6u zgusceqI`J+gb&~mK2Tg*T-WhcMM}aFV2KjNW;lQuIWR=EAJ6IQYtP4J`}bC5WMz3n zhH6HDtN#0k7krWM=Ga>RUo9ORd;tKySPnL{H8?)Fg?`qe#IWk>>IKLpt;`MIc!A_V z$f>h=$(Gvw!b=%G@AA3~G)5O`6Tb7rOGAhB;AEQkv5?$1cPlEoP=li3%HNLq=CSJEcDA5-&h1C^)W{`U;w& zmr%AU0$TWaAv^S46%6Vgfnms#uuY}%$e$dd;`4Dvk1!o9u@}CNO>2w-7*2v@tnCR& zsFS3mq(muI_qx#})htEt4By(<`fGO%ZM{GyV3fI01J!JI*xG_8>QOE%Kc*gdc;OtM zN>K6U0>~We(Kwl1zt<0sLK+gOuL5fL~vrS=NiMgcy--d%X`jURBv~5?XLRnv7ommdM-`9!_lp~cc^W_ZB5}^ zmU@@t9jyF1&$xSJE^WBdI#2!=`L=H3<(lLSD~I6pO=*u?hp&WqH^K^7L>;m>8h|su z`XTfw8UX!S{Xq(u3&1?042}#9j4y<78FJ-S&Go+02b^M^FDy}LvFFYaZE(13(?L-= zxtB*3acX6MaP}4$kJHmbo4!-chDsaNrVxU53hWCps>N(xyZFZsgP<&rmiiq^SBqVu zrar@D1isxRmY?AAZ6cpY5z=|9(5HtX`qRMhujH}ES9`*3O~@m4mI2FHWGXDgU~sZc zGs1)M0o+%j7l1UF$a?{Qx}+f@Kp+>NcX8nViBPBSJhPPiU!iXe3}vCF3K+i?aGjFQ z7oq`|1RZT`Jdv_1H{kjrM2x78e;W*5;f6%I%}Z_4CJ8zk5sA~9{QPXnuPR_wFQxp3 zrtMyIkO@24IE6H7_s1fM;&VXc##49Fu^`5Zvi$ja%<1sC}8{`A_VSb6j9*szuYB1bUQ7sAsAB)+ZjFy%GW%(}Uw!iH~{R+?VuReWsjcr%w0{Xu9G^$%@sM1FuFr zhoW#pamhnToeBz?^a@&h3Upq9dE3j9jNur{GUO-TQrBqNu}<+G`2n=4?Un^Jo@B0H zi@Wkgu}%}Cwt!tDOMdWpr_0?+_aRm6P1j>p4MVOAifi`%(TwL()nB|jai!Xd{NS^l zC*^AH43BE2Bgm}t*}G|XLM~;v*!u9edrW&b!y(nj-Aewn@1N8gXR9=Z|0F>U%`2^J z=v|8)cl~5tm=D`E6U*`3AI{tTZzEZ)!&{}|OFZ#5-pb0p(o%M_${Gy-;vEYPK6lwY zcza_`ZY=pJ32a^62#9L)Zo*|T+HBg^4ZClt4{kS5Qr>U(&-(SKQ)+v zIpi}vaov3I)w%aJ&N;u3}LmnQ@geFe2bPRNAcAw4gAB$CWn@rm3Co}At z5Z5F4H-0YZ5_b7U{{ZoRe!ASBtm{BB>Ayhl6O#TQOKfVbdSUD0k}suw#DNRSn7{Gt zLez0V_XTKZ`T(~@vg+#di+sKXf3aPya3tyu{n+n7Cu&NVxcit()EejxB7)p z36w%5V6D!#^FEZ%1xL9$OM)6|>!n^XU3u;4k(g&FrK;Ccm@bevTcnwQDx0c6HzJ2M zC7nN|vXyiMJe(!VUA$Jjf%B{fmi+@Wh#WLEa2s6K{0{mY$;e@6l6v!=4o+bWTeZ6# zT(3%N6$j-i7jCAfb^cRr{)?6=Et^{yJvL>X8!k}peYYNW2JcX$c@l`5tHZx8w$8C@ zr4i>;HYe{-4is7C1TSRpQ7YSZ>ci*vrV-7m?~OFAzPNZUq8{$W|HYbMdQQw808QPo zhrx3d5oZo)sRVcaYh|w7B&uW`xYe5kIXxT#|B&F6IQ&(^Y~Y(b;^4YES#VbjB56Rs z!=`oT<%v5`$^zR|-WE8o*PB(i`ayC#g=y zyj)hO(TCNflL1BJ?r&uz_eb>^+5Z;$0gt^X2!#B9kuAiCDF!QTW}cq!**!QC3e5KG zS+wil-do=rh-Wc$K$nn#F5xPU*)Z}sdKHv2UylEVYbhuPZXCTvAP0rlNVfNcR{E-K zO*!4;u)n~Z|JNl54cR0Cj2TZ4V0}dKgybFa? z98DuD1HdlLLgIE@hXmR=Ivi5%Nxgx+ZHrKeZdIQ5Oiq`ssQ0_@_1eF5QJ^glfh#o7 zgFi*R^BS zd;JwY52z3>S$hu%n5c)+N=iba5`^gR&bi=q_DD&M)nu!N)>l{WM|rhAz#mircL6b* z)s|}A{7&INicqRVJ?QeSf&JkX$l50kYKVbqD9~)7tV4Taxn#&us&z1VZdZ?R9&{sO z#5POm_kA9z5MLNwxH@%Y#U6i)J;>vrcu4p4eQjdRKXNARtVZ3w`;yu-?7%sa-Sv>~ zTX*iEN3VY@k0B+*&pMFL-z~g*cU8veVY6wjl9Icy9U7vD8UZvI5MqQqhKDz(FUr05 zw0{KK!Fs>dtvh$&hR@FPl`kAZx`-eDyi`&z)Zp$-n7%cS1I%jAo|0qSoa1>BK`pPU|lh{}?yM`Wv@C>}yYIn<6@3jjDaynXw7>liuaYj?!2 zH#ujgc+P=8;_Zj}s&?#|p-LA^pjx0(c#tfhI?(wI1ySt!wHzNNI0d(;KCnyq8A@yc z2FkW-AkKSR3UFayD6nLs0qW?f&aCNyI>0?_zb}oIf4JHF8;aQxC@%aw)SSx?jl8&% z#R5R8?lcXxK2Ih_JToUn{{!s#f zulCWp=y-aTJowrn#bk`NIgYh3fU};-titb0kltnM^WE2vYyVJUys^YG zRkhIOz2I@b>7t8OgZfp;xdlTlk|3Noh@t+AvJ$XXERszR0quLCpjL$rLi+8abIptgZ1klt$DQg}uK zR~SK(VXVsnT5dG@FIq0-oGFg(L;|9N{dh{tb4z0J*e?NG*u9t3vMN|PP$`R@ET9JPhPSpF`+?DGskJdct^Wc#V^ zY1JBD*{P1EZ`Pu;6(9h%gUm=U;Y|r9@HNDN0^AmiIOGQawGEDdXTo%w!g~~IPX}|o z=IMhT5#KrwFhx~9tQ)X>spo`AuDmEgRd5oL-zVQ~k67J_W@$*`YEjaQ7WKg6o9EX+ z%iUC0-5wPZ8!}O5o3jy%FsqY3dKOw$nM|m{_){Gzm)X=Vl z9T=)}k+mem>kYX=Yd%Vs3kl(Geq?`tU2`N;)^FF=?6C-2Y(Nj;xwsEQEqTRf=LYmpQ;{Hv$?qsW8o2e3g5;WnXtg!dwAi!T zY~((IKwpnF&~v`i*`XovXQo8QW^Y~5IK4N|;eJT{yC%MoB~_;SOffYN_IKfLBIyW} zseFM`uL8Qs8Gtd`kvT_Esp&)@H;D-oDU{A6NuQp9%h+k@?c#w zLx!5jO@6^3jZ6ibsuHp=gD)lQ)QwK5*Q;ge9yb$qd>8Ti0(B%od?-nPn%|$mCxSVE z5yS|D6^y|M+eHYotc3wJD$cP^kY0ZhvE?8HT|1D>m61fY5g+=;$pJOvEvq&+v+9+b zBewEJ^G~l0(r02kkE2ugu=%xqUP+aw*@5Mqzvs*cV%66tyaXF;L_rHVrD3Xg)mZ=$kzppC^X6P z8UcTBI6?nDH*8Ll+KM2mtK*+=%<>Jzy)Q74r_mrTt{W?H@ClxSXPX_Cf&f(>nJ&D48RUQ942vyC^n>JPRFV`6#lp|b7aECmsG!~rn>Q2$KHsc zGVbiQI`Ja8wbqI5I6glQWRcrEHI8vjX=l&sh>kFZNPq)W7swv0Go8m8VQvt(E-@1@ zm!0Llu~@KY<>;(XIrXVN)+bQZc}BI~AKF$C6rI8b67(0?$GI6V6nAR}G4v!VvVXx^ zyU0~K4$#iDo-8n5maL@6trV*j9f@1nD{RAidkCXfNxn!hKz_t%(H7A>CTBpxJU6}d z>5m|ZD@QE8p$FA|Dw%OzdAdD?6$3uAt$Q+wY42sbwB&=lYIC#@;Aa(f**#M6eES}j ztekIPvAg$Z{XO7PR2Re ziP1zc*bNng+6Avh7gXv-C|JG`<#J|O{Q?O~&n{e!K9DL(NE^}*qA``_pLzsS1gI$q z3^R|tYx6XY1m@G4iWR=d3-uva!%!p)2v(CXPH=wQZA;;6t!gS#C=npS+)d8E&U8;` zj-n@pftYuQm7kD!M$s5}_i-A{n7%tGB**9=lRfXxJ>By%|2nxc^?=|=RJ2;j0WcE@b0qj- z3{s*VYY~a;@c;3igx!5#1wmg5zqUXmflJ6XcA~7Xw~!2%;FC8qgXU@V29j9qiX&S$ zF#1~LE0~?dp=_G$Ol!@TW5slDrbP8#Ghk=>b?Hi+Cb{sDD0A+2;uFz*V#2ofj2k~# zynLm%!R)E0fMH&aNf6>)#S=_gV&L_lVJ!#&6OIf;7Fcwm5>|NHryd#dXo~}Bw2wre zWxzuR#u}<(twLH2F&SzP?T7^m0_%mVGrUtn2JCARCW-1sylk_FK)SFgrBCl21vd!C za>PNW2pY)Zw>(C!+d4%H%K_UEW4@PNj*THFB`7_2BPSWXlZB0Y`eYr_?!j^G&6sOL z_hdjpNG95Y03jJKiqtT)29Je`;=0%Ae?w9IiD~_3(IF-EJ5GF_oKQXS<8v-lsPiJ9*Rn=eUOQ*sQekl#-8u&qHi4udQH zNXC7H%ag4yQ7Ad-IonT)=U839q`a5T_GTss3*o5*Y+gG3`nqE}Vk4C-Hk(BKoJ=AA zkV$fr6hUdOwHXr2D~uUfWVpD%wm3aYeci>l!br@GE`dzbRA}hc#@4O=fo%j{_@9%q zb>*f?&E#&yj6tQBr@v9)&WFJc`j_ZXBaIWof|0y;`Z^W2kT8LU8n2k3e-8@Uu|;{U za@qnR1DsGfWhL45ykd#Hk>=Mi#(VwzqmP=TMfdSybb1WTK8$x_c?qpQHF@S@mUnt8 z^H-K6Ym1WQMa{7Ax_(t-A&lA__x7*6?Ci_`N!k3_xyw<-x*jQUPd@PR&34x`A5&ps z72>F+97@^A!C^kBC>Y<~lyH@Hs!&t1Vc7p$ckz*m5JjBV*QpWHh+PW=hS!RHsaS&m zI~Fuxo#~oCJA;y9MvjitPkpDkisfvNodp5Qv@8j$cx$fbE$1;ANTQZZYb``c`{=5Y z&KB1=`BvnPW-;5{^_S^NjMV7Io&5@M3I31$3Q|3E=U7~#Ixn%0VvZ05eLnG=@7O8a zpP(Qx&cS${d~d!btv7=$NrseccO&7eP&WPO7lCtx86gMdn=c-v7CZ>iO7qw})G6E(&Nxx z-0{Jkr;bo66-W|j-+vJIBWfLRyk$4u;H*KQ)xbLXKTx>)MVS|`%f%Nx$oM9zC#nvA zE2eJZ8-$KDZn3}ZAYU0*Y)Kwb((Owzjuz8Qaenl4gJX;!ynZd13$6b!aZ5{M#WQD~nI>9H{It90N=m*d7uxf*}YB$A<%v?8R*jMLFx9PYt z_tr!DG+9ZZoYz2H@}~wjFUT{w^QQgD3j==Bc#5`n$GwYExI`0JL$17hXaO72i&8xP z;|U__DyFJt$`9};i#LN3Kp4P*zs>yzbEpDJ~!OpFqtFTlAauIZXXZ05kc8apjO=`+OP`KNwEHxdmk*T2j^Tj7JO9*dB-R_dy5fq;~SeEE8nSIPnJ>ku|+V~G&UMnJ$53b#E1 zV?d^Kt)a1kP{ms^6aBrrU80rxta&5YhD6vEkJFcN^b7=bGHNsX58xq;=~z z5QA?6&$}Bd0@}FW3>NOIl`PAxO}H&Tws^fL9?^*&?Jg;)L7t&Xoy(jYZkrAUPY&-; z@SJ1>4AU}%a66Ms$ix|>lkHZnJtv|Wl`3Hl%Sgzm@AO79gxiO7Dh}RL5D+#djwI;c zfJsuD8-VhReTThZ7y;=I;kdhdo2ld%P};SqsV|p!c-zkc7MQI?I4&m&i4U|2xn_i+ z3iwn+U+VMW<{rBT5%=#6GNF62EwDEk2e)!%+1-atrXH=-NV$a)y#OluAdCxnch;Rx z$>;ha6iH>eLYj1vnxFyuNk?d1H~MI^`>Pj=1?Q4}zwoGji9?Aqu266m+a z4mXH&=(ayWKd>wmI9z_ExfYYu<8ebf`ng(9B zA9bxs_dor|y65z~`nS`{Sb36T2kvSy8uNKU4N}=MOWFIhzU*ECS{LPLprBo9(>?@t z9)tVZ`$o<-Jp%sm)0@N-o(nhl$AyjZ(mRwm%k-1aBt#;fR+4HBSUDqZO z!915?KGHSO=P;y4&pC}V0_RyNnr&ocv=GB??Em!m;miDud*b@I;W?6y!>3zT6ULqQ1M&bdj4xWf>;UKwy9?WgjTh2Q+-*S-%cvdc z@9R@2)e8@Qm|9u`dV$*OjvPt5aqch}p~8fOHlkTnNrwHbj- zgKIEOL7>1GBaTcqg_*D-XD6AJDXZa1{9ZhJgJr7AYbg6&)|8Vcga~Ozw><2{& za#xM{s{F5SMLntAD6`LcI;Sxsee7h>@IRDIifm7et(Z<6LzND*dLI?@PJWjw&x0gW za?qi9$EkMDZ}`Xhptbx@4dmZUd2Ip`w~@M2V+j-Q-Q6}0K^HK5_~Ml1@J}QUYSVuC z0)(W}4M>SAs2>>=DF&2k!wq@&5%_q~-^eo)hdw#qthSH~IUn>+42V9`iPQx@_5FzW zO5Az#p2Eba^0}oX1)KgPFE!Zy$k5UO@yIBoNiX5{YSKP+It0A`IT-s_4s#br?Rl-? zXquAB11`u(RsF^=e8GwO-vyOn$e@^sPR;z|XUkIy%-$*v0>+tCDoybDii&WODizFT$>yY`*-A^=lR?7L=bx;o<7vvyKCX&vG)yV@>YhNlOLLN(A1>THFs&c!={05Ys>GXdl#sb+`^U>dBP~Ud1ig{tY8`>0OA0-S>(B zK>NeY+rB2>-zDzVrw!T7{_*ShJvd8JUwMA!Wrvq5*x{rkUzgh*Kzs+Wh~>2?ga8E{ znDEbDhB!_Bgl%_2)!?tK%>&-{>c}Vh5}3N)uSD6#4K7_sQ#< z4LQU^Xshy^*RLRfDyP~O+^khfNX1mY{p>9xX-_>o1t@!6r_;e_Uf$kTY~o6EqBgoT zCKM*xNM<6nFj8hEM}3%zfqPuo=xVaiXS6#0+qz@ZN^7#M=`HHd7?gea^=o?0x6NzD zKWh=;+bSy?_lHogK~I4 zAHJ&pkDQJ@EOs<&W6X{X`&`?HT4U+0f<9RCp`#itjWx~xs0@Qoa=!GI7MGhpR3zBf z42aDHZsa$EG;FKR+fe|w=oFgO-61~-*=+7_h)hmSu0ddxk^1(>Z8miLZGu&|N-~Ii z4!AlSkCi(qA9lbGDo7UvOglh4NDd{bla}`p#k(_Wtmi!dQ4szZm;vEC3)ER`;CTtp zZ(Q1Ej|5dHhGbh%MF+}xQuX#T%OPVF!4+PG&%q1kkR>U+e)z9?)JSLuxfaW`D;=|; zbhdD;L59q7&_(CC{c%%ZmFkWnQJFc~-1K&@(%yny+GWM-o{!ON#|NJpl289%Wab={ z>~mfyg@z6Nx-FsqN`?NTl!IGXPO5E(*8q<%6d-Sp$AG~2B z!fFOe#SfTHAhYHNa|j7@#d3vvfW_UcPRKT z{Qm#TS|)>5v#vg5u|~%;qKO+~Q95$qr@2vk zgh{fXGhKVZ{)QN(Wj@^QGLxf>>85B0ymnu>(HiZ5qi6?odGT`(gi-bmSU0p(2SNt` zR0|5C_yZk7M=COy{wL5Y?149PaDNkS?U#LS$|k;|@xy+#P7)Ac3oJ}ByXnhFn{z(` zK6fKE-v33?!-xH+wJ`>n1eHR=VmX7m>ROK%O|QSjAQ2_b#RtGlUHlGM3q({m)SP&u zgBLsvm!R7{>JiNf994N|``ypsP@()eFi9|-wfPd5h7Wq9jl2e$rg z65M^UG`UIa!A2b%S)^_A2=eM9qwH<8{RMTd=pKZnOdG$e%|~y)$9`|G#xi$&pJC6F zX$^2VmiW=RLWf0}+NTG9a#AwSAnoLf+wp~(pWu%YZ@zR}j(`>P+VVeK%x*_YeP^S* z=7+7o&3a^8x#a;q(8T%}c49QC0-Xi~ps+JwD-ZRR2j`#1pnKbY<{(5Bu zI$R`<|8osb46|RHw)mrLh}M4D^{=u4uEdubuH^rIn?Pt|Y>|!Is_$!Bd(m)t41@!3 zzWuq1^oWImSDRqB>yd`vP28Qe^D0>?lKz~Q&3ybD;9p%kp?|xkJC1n!{HW$V{JXmP zuh(I}ek75|i^PfP85z94$3TOKvgIZ}{k*erR!=W>vl-YPOM81CIJ-S+Pr2&f;Zu+V z7yr|XJM0908*QEPesepy=8D`eI~=Tt3@9H9Clv=T&7vm~wyss?VIK*vL0z!ErHFv=h5Js^$$F2ah&O>s(zW~`H?aigYh;E+UUhXZ>TFRWB{a_-l*ZE+Do^ql31vNZAAbf2|Ggf&4*@Gng&693!PqX)D!zSok z{s5x8lwdM$`asy*fM>&1&vtqb50_0vtiM`C#5n{%`+!F55hP&Vo?u%|B}+xXd3D8= z<_}R~sqe`=gfoP?A%IjNM6OW+UGXY-T;AJ-6z~r)alnZAH<`R)QdR5Ol44)EY>vg5<^m08gwv zJM^o{QB)6uGwA$*+?9)?4Gr*I-lF-us^bLm1tfm;PL35zUR8(tCUfXeMC{$!?-1xe zG!{DMdXY=EPI05+Y`Vrbun#3J_LpU1ubue~Ol9Z>+ZK?r1vreJ zCfoVQPDIR)o&VP9Cwsp2{5+}Vvcs7Vu}d{^;n+RcY!t`{c_3Lw+()3cUI1=9Vf+ZU!gklL>@IXBoOE)hUooMLxBtGP*)}>h3YA7G6pUCp4_oQW{@)I^HB-WbB~O0 z1*LDI$;l|;Fq(q@li?sH2YGMxf|oT+na@80+xFYgxr=Dvz*_vFpN}J1-=Xo@eALe| z2S1E6$AF1coCG6#mXw{T>y&|lSD@xFXrN_U!C;qyUw`D}@Ce)&&PdhNo4{xZQt=?o1Y*mRAX~{t>cqGRZ z+2wq1GvUaUn%$HIP^21OYnHKdMaNV4zmF$s?c3|mXjbGLlXbv=4=BzR5}EE<%+7;B z?}0sCVmW3`9xRV$l!UhIQae*gj^!W0g8r9j43hx*oi3yxhYK3z|Cz@ee_GfW%@hxn zklVB8v~#qMa{QSB84UOD?-9SJ+r>L#+<$$!5^=9dRQIxf-W|wL)D2~kd=2v19eP^j zSK9LoeVp>NQ=+s_JVirW?mqg}GXpRwmviAFw*8>#)8W3Sqcv|@}?Ecc_3j^+OJU`rcQ@5K>! zz{ijnFVdRw_OaY0K}tOfIS?jr&PwsW1MQjHjv{}+=7tamS0EErD}Yyt(yyh74=d2y zdG-^ll$=~>i5MXfiAFZo7U##cFt~Mo%)Wq$Ct+QJ7pT{@6!cgYS(u3|by_O))Dd_B za`Nlv!|iO*Hd){})51$&I^Y;_Uk3Eyff?cM?u>_?M)LXWPKu$q1Y_Or)e7RzRbKqu zLQ`_L~!%vVQ6oB5lSFaSKMwWf%@^gLy?Q-1Ud1hfJG9lh0-5&zmg|p)%xTem` zp2L~(^a<)VQwhJjVmY=013hq=pCx*#CLF{SFOd`ybA5`Wd`uCuj z!3({|6O08*quN4xGHcl?Hg@yIde9_2Ak!u6t?HrJt8;=jl?}t-*9XZkcJ?aAdI;>7 z-dl$;^^hBAl`_nuP#yuz#2uc!m2!DPgngRq<82^!1JlS>Lb}|ZN;$CyeuMU*vE)04 z^q|a8Ec*-rdzG1knmZN>chX*no=^R8*#RRq5Lq$AI|?w` z211yVX;Y3%7eo`}lYdYqwBmGtN`FWoVTj}R;j6~91W?n+i*Tm<|KLmwh?TP1W~KBB z4bPTya!5k33rfZ6Gb3DM!qAi)EcC?)N$55KWO2XXjxLb`jG|O67(G`k3xT88PU+nl z*UXMqmz-j1x+XGbG;)*ru!LF%HhVg8Nsx0AS&${AI1DH?F?`pr7-S3)d4VjZK3Bmh zHV3Zn!WDaf-@3S_E}|o*sNJZ?;H*$Ajb`81cTqhbv56G~d}9bUo8MCNU{rpLVYpr$_7RD?Xpf$Y_!C*lY<6 z`h)^~29r3l%Dy7cS8`fonP+-p+!Obn1&qR;$kcNJ^z-)Ewv}7L(575KrKre1%!c?y z1sg~F#}3U;dwQRgnNi}JJB|#U&F(jOBYNniv~k~`3=?c$eWQ5>9vBQuRGa+lLH?nV zXx74Me}8J>lsK}LynuCaw&>Qvw|?a3u?9T`>Ox;*_91`Dwz#oVg(Hm85+g#8T@j~q z1#B=h5Gx%;rI0^Gr+Camw+MqdbLAIu;aA2hvYgdUPHW##YAy|hv3X2Nm{5<{*u_Pt zfr41#sia#SADU@$wrEl?zTP*4Q=pwa2pJhyYB)7@RajO{BvOuu(x<8^2pbXh!ko3V z&8}}VoO0^aEo4tTh7!0@z~bARmmYt^NZGoEWBc;@y~@g`@JR;UkF7ima2$Tx+JVk2 zv!;bVmv12SRSKGy0tZ%v)fdeDcvYqPA-%0np`^IZ$BTFZc`5(n_yhrcf#$YG>112J z@;&2BmEDD>Sv*-4HppxxsykMjbZ?m4tE;W;!_s4DQn@ctu3#SaB(MoRjsFrAt*mGv zkz|yQ&!NSKM>QHux*Y8_P3XnUfYGwVG2hy6;lqUiEXjj(N{#dF`g>g6=ZEY4_3y%U z<~QRVW!b2%Ke0^=7sAJUugv6?c$=WZ%gF02KlmFzExM){LZKIsNb!NE!i|b$3!IpK zYWQ&8cjoM`=qWxt0#7R0d1n#tR^xVxAknY%-}0Hi_2kx3+-)qq-nWxL`>{&HPupuI z`qTZx>V=vLs2_{Vb(`!!y`ojZXbyh0}$tb#Px!O;Qn~aTgLM9B|o5Rd6HZ2_en3X%;(o7y7>l|{QElh zT~N9D|J!W+6YhB}bAX#V(^&oVNBu0wbNXL|9zkHO_q@;Rn|lDvtFMnWYFlf>{@E!; ziAg3D%HjpdIR#~|M3tQX+>;-D-}XSgX;6mLWi&(tr9mZ;Rem{&Q{alVgD90FR^}OH zVK<~a9#IoT?IPNOWo>JpBOTiJHOQj){P4iZb5u=cM>5Fr5xvv5lpa6}&*}9V)FS{i z7jAB}RihRo$Nt}b1JoU%T%gEWQ|B)ePeVYWX@|pgCY7CcIy=c3n$`sj=A2)dG93D2 zo%`%lvt~|a#<>Q(H14^l7bg{#3&Q2l)qMxn6*z&4>x6LTIpIgA z0uvp_d=>4pUs*h|Kg&O~^ZvWqfD|s+gIeg&9>nvnJt#^{u|Ih2W$4TDBX`y2hhz=} zUg~H`r-NHP^0i3O@(&k74e8)_cNENpS|g9$l=r@Ve|>mY@c1~&phKd&N`EvF5+*-> z#5^?=&;C>)LA4hWFsfWpFR)tik&^fpqITAxavg<|C5sYw^3`>h!vewAPy~9&YrP$f z-sjmnd88z*wlpAWCImLB`*Ia7?HQld&-Ml zfkFIxXMl*rzn(UZ14D+gof zp9YfGE&^TL0MdMNdzMBrh1r4fEM%ix14+2;Xg%fHv*3ohwksM>GBUbq-WaQPMy5h( zI0C^-0?or>ZuLW{c|KbiI46>zbII=F1eae3V;t%`e?l62(wO z8O-&Tf+YNo#iY}|#y|WbCX;?WHon;*2n0uHl1zR}t>>GC>#mopAX{9;|1_lJG|IIY zJ__I3=Bbw>6X-E7kpmQ_5r@E~k3!0UE0_!_R%hQli(?X)bEfQ}Y`L19?F&Wht!S#k z=gUM(M@K(2iQ&j27wJ4&0{KBxd;5jnb7z>Gv3;0Aj5&8r{q3&sn=8?ab<+<+#eVd*JI-n?g`bougtt=`dN%pz7S|vdvky&`8T~K zB?X~Y(+#;DB(v{oQcG7we*ED`u#a=Bzc+$11#`UX>wNyiJg~p%SWL0Hg0|5k0-8*k z9VjiGt||vw9oYi%<(3F?rHbaSMw>v5y!Fo6t-afz8_R(bS!D6#DcY?4NX-tjqwcqI zW2pDWRbdog8Gf*GX2is;@aNHKPLgW6Ky?q=(31(GR|ndlxWIL@7^;o%Rc3Yy+9Szrt;S-BM<#q7c zUb@(a{iPsHoPS?N)S}b1gPs20I-_&i0HwOuL`VYBdb<1q=%I6W0^s#;1hFuc?5(8^ z#fxIoTRv!L2n1I>*E57FzL3)Y6XX)t$vQNVFanU+(aq+drEBO4aVJ=+@z@m}VQmZ- zjB}Opf&lLz7(3A~0T=+N8wM?WX!DkOYC7=Rqo zYweehG%KBh<7hJ&Z43rxn_;k9!G;02bJ4<(U$qCN@Wvo z<`ejU{|v3s*~1hjaseV&24@t|Aym?K2^<3D!@22W7%8k1v*O|9t;ji_jb~^(51%L( zFi33|j9>i2p>*aOTeL#;?*;o8nsPnA##Yk96_uuQ{ZJ2nP!$rc(_ z-@H4*GkZ_t6-qa2UM}w!)jD?s{5n7{PqP)S3-|&6mhuMtv^n5;gEQ)2Eh)9!OARe) zyw>y+UZFU)WKPLZc`%r}>YY}rEBM5vjl@ZY$^vjFvR{7 zzz7{Z?3{bjpv22ks`Zf(@c#WUH5Df^q{mW2WVDaq__Q3U+{BN{T24krM!Dr(V&|`0 z+KbZ;iCw=@iOZVP{^T`Zxi;20G#|4tbYyZ_ z>fLXd>&n|DDi1MordhmMnw>h+&SMTM(CzyO`erNrAB*t^yW#k2%jZwE47%gV_M|hK z?D<<<%ilF7Np0WmCV%XA2)|Tw2B^ROJ=+SJY^m_C{yD{IdP*kx%gL5}UCXfb3?Jy> zy(f)4Zw|&5?-$rTM++SCR>{8wUU6%S6Oblno?J3uu5sg+!-G{`%@^(ad;YQSgGX!u zjF%P2czNG`>A&0}Q4G2!DGwgJ67yfmTTynbUa%}fI*EI{j;gwwj&K6R&gBHZbKi{3 z#yCg;;dZ(H&qywD$vg-PQeJpb0@}5IgasYJbvTQ!`3YWw@>|I%H$;j6^Q)@dp8gJP z9f;+JcggpUcL}GHydrIn2UbpcRr|Dge$GEwC4A4c4@%tGd#`TE#f+j<0YfsXP7v;3 zLkStPu>uhl^4-V);rgo&rX-QPm`G3}&`}aHMd3f`*5<3KMwi9m;dl1mXnEKC&i+XO z7$yJCcjXBg731%4zbWTBHgsPw;^Ck3|2*f}nSd;0NHlJBxb_xk6$r-7y=s0Z=C^#Z z(*DymNTR2botE1TMovYIBPFiX5tPu3w3W*!l>j#?1(m z`9O@la1}mZTFZ@p`bY6B6b@|Jtfj+_!X1@XDZ>sCobGv4!HWt)cd zi(=Hkqn)6Sm2Q^pgJL1U9evPs4z{cgkM%puY@zmO`@uJ$dqM#6R23YsP=fB6q852> zvx5iKylygl%mEy2X=%UYSNKEtaX-1GPo_v^ao61VRNkra;=Tw38ZNzvg$kh;6o>enr~Y{V&7noRa7 zuPX5NSXLMJf9XGM?pod9;p?-?<)HK5YML*`1meD@X_pTkOJVingi4_Iq9O(oHQeM^ zz_fgFoy8@g#vN&XZNwJMqwBxom(IKNm)gUt3ng$FXO4c_c(Com_pG?OBES%(&qOe& zeSW|%*|C*rZ5JXQgV}t6q>z>i?dGBE_MYxF2J}H3UM)&DUZxh*jT97TcSC$tEA+Qh zv>E-uf1zvQ>G6P*H^i(I_iYSIRL%J3h0RZ5{k>uH8I*V43u~yB8BRn+{9VGD1Qe&T z>P%xO;0avl3L|fXs6k!mt`3NX3bf88M$UTWi1<%=Dvpxu=h zs|l_Y`zs+fPvF9TdYC28p8kV6LpZMihPlJgk$z?dI;JccPezq`0Bz9=d8gwY-m989 zq(A9s-DY9Xgof$e%FeN4$i6-1TqcpsBWoVx)VT4ANC6TK_&p~%b7!hwhvUjBPraE5 zoha(wk($~AdHorP?ar*zmbEMqQ8(V{vXZe=e*j| z)9L`ASm)fY`aIzSjI0huhzq*2?>*9^Zk2=YEX9N^om;lnu`U@B-ZM>{+YiGbcJU9S zGO6?gNvJ+8QoK*Y>YZ+|f_7AMhYpW1-JPYg0Xx&CC-n6L z$22JkrVeChmt7Na-)JX%=FTh4{3qpjvWN+{;!OH)3B{UMNngz~4jt^;p#4w`5zn{x z<^1^ZMRc_EjKS@anM8>yH`+M`Z>W=u#Bqv8T%n!Sv^5=AOgXcF1jydk7ec=~ z^cDXWLG)IiXHoPD*^KTa9kX%#dis`GQLGY2(q+MKS*!`N)Zmz;H#N}uXDHmjmX4QA zU6iZ|p1Q06OFdUkUdF+IX2jikoXEWWFbPRRGLzqZdkEsDW#`0KEGW3TnBQf6i)0DY zp2KHaY<{pl6kIQB&f&K304{x(gg&n4ibuAi2&zn8Kfr-qDf+;atH)t z7dIZb3-7vMHC?&-^5o_{@UCArmuowAcikVqW!!)K>5j7QyI*ooL3_mFARpScd#OV3~_0SJIwV@Um3e)G47Qh{*O;s?)`z| z+ZV~57H)0^`y3PGU7Vm}Z%QH=EZjb?1@}d?G~eE1>RSzI(Q&RtkW>Brd)#sVkLvhq zbD=z>j3El&p@3#|V|}&1zp>{kyaTU$_k2FD3P(3SqBvI^Fnk_^$f+iZD zup`mh$+{b9D@xF#Ees7*9yXVL_+4E5Xz9{F|J1bI0gfSF@9}~3_1Uwy2p*`>6C0$} z_dM}gFmyAWQQppl4rcqfw4_o^&~-i}|HSAz+twg4cy8T$I3PcTBLeNy(ckjt6Vuma z2f)2kVkDg9*iqc#Uga_0@_OUCJ856xq3(R-@B|%p|j84t&~5%OlUK{3H@Bh;;ta}lAgJYi4OLhrbjFP)nmtjNy*u}mbq3jB1MABemG zBXWXNAS9iCTG4WgI7t^lj-&F$|yeqAk4A z;^1Fco-nv41gke#*sg}`JO2Thud~3SeNA(y!+nc3fgwKTEhVNMw6_HE+rLumhoBAJ zFohXiS@I6KKl$@)4&rMo9KtgYr$y9ZY=}E#mC0~?i1^h-ZlQ;;_j?eW6JFf=&m@+TDT9)G@^F+q2}sOp!!6vgn8#WvDGy=Z14(&leQm}^6A zS4TQoP$K2`T)yV6F5~?$C*L#}iuiC6c_i&XX+#Pg9_8I1L40%N-?u2) z+jezvje(C$@j&~>Um5!He=_t9IC>IL_snO=Jt2igL>$TyFAH8cvcWK5u`;t` zlJZ!M8bR-%W|a&$@bBNjgCMaO-Z59l7UzUh7j)rg_Iz1gxc&tGy+sW;8Svt(fq#Ds z=X5u~%Ex-bsJ=uD;OhgbFbX_ReO%me=&)p-+nXKEw`$}vK(g>Ze+Z)~*=*Uk_NY4p zFCKZo74yLV2}@YyywP!!&G}~Xs`K)H{0tzPP8%JCbUx!#E6vpGc4`iau6WXc3IS%( z!N3rWZvQL<5L*p2+Vx<_A{rRTElKEU)VElEzptQ0oDs<_oc`Qz@HyN4|NZ?Y>XD$& z61$tL;wp&l9X_DF+4(f@XpD)Ct8`B@-1<3r=(XV&Y=U2qav$CJM!QNlufWx`3qN_j z$6zL=K4#3x;k3snwbUtLagYgJ_^ug{-Wq?0h1V#PmMGRQ1b_N}UH5>_#5xE!O>@aV zB}&!(2x8O!#bqbxN=P)XZ$&(tTaec<{Zfpb-wgTL^$2M+u28qq#1w98QpYtgQn z7SQu3gUkV!B0JUAX%jzMB)MO;NvHSEllJ7yCT_Ga;J3AdE2!NA@14nH^}WNHI9wiO zV*MrbbNW+du%U~ZhbkD>q6!8#VY$$t!*{M#u(Hp;fRbnoc1JjT19L<;emIUn4n%$F z%=X!iS!fwGR@AJBcY5RTO48+5uAy_c$Uw%##OFWuvtyIyZCgceck00AYJrwo_V)P* zp0E_S(redL#!jOzVgKJ`%X0nhy=aNCk}c~TYY{JWeezXG#i1)F08QJu@1-{}z<(&fxAT z;@G&m0Sc8X(ms9p;(lk3!!?wpvv@AYBo8_kjv4pK ze++(;UVBsYaN@g|#C5;E%Q|(w$h*FGxk^1r>nlrR3m9L1rnrqXF6@f2xLODjEz3&J z>^lzA{yD}Dj$dx3986%`_a^Hcd_$Ag?i^;COz?D%o{IVQ{Ag32%ebm@pLE$}wVVsO za6z)eElMa&si$5p8%`CRK9Morxo__i#6QpQ>Nrpg4Grx<(SG#__@^Y-_kx~Y1xW9_ zOTT}0ZQ7rCept8fzx%h8)@@k%tBO0 z>8s1isNMzmgUTIEUAMpFj#&1U@*2l1804a7}cGu1h%J2ji~c`v~X92@EJ_sH{xW?(Iuq>+@C+4GcE$Mt62nAuYBeDbj2Ix=^*Kx zv{&%cy%3p6F!}|G$N>m;8M1AJ{;FZ(AWn9O{u>GX;G&!f2??3C)#KMUZVT=t4T`5P z!A-IU#SZpX|D1J(s*4nlBFNHt&=0z-KFN&ewpoZmECZOR4P!y%&RuF9>+8>T-w#~n zA5G*b=QSgQo+YhWWj;8pD?Qyl9wr$q1un;IPk)-yiBy%58(%z!Lij3Mho9p? z3s~tr;{*s%8E64fz|IazlaQw{Gt!3!={@HD*|3jwP!x{i3dNDuc%q15XR>umN_EZlntg`~ zqy9`c%|WY0!b6_e`sO6H0hF;6$L5B_XhFY$j~u1dpbm(U=hw?Xc@VP|- zqg(ke_?2&mexR;y@L=`}-p8>b!pd?4QY|Bug=#qIt$|GJs9mGG)W!1qrtMk~(B+=3 zncfR^%OT1;=5-@pX!BX0Y!2d=F88FmwC(LT%-Om=fiA&1S%xKHD&>BQ3YRb*nk2^S zR`Iz}z;q*LjmJyTxL!mAsN=(Aj?!7UhJnvLCmd1;yqZ9!r1Z^`ZNYMl`8W(`bO!{O zctNsQ4Xd+gH$_8@gmEUPn#w59xG=V?pd8kyKI<9SoRXQ&jBBSmzPUAca zf46O*t!nl1`VK?-=WA_zO(hV!gATa@9Ef5N=HQaFNk;V|88^F(C5)_Bnz?1OB}KcA z-bW`~$F*19`9^C*Z#))}Yg}a|NrCf}$2oMyQV6MrlW(Ao6I$}~cy!KXvd*p@6eP2; ziaJvwu%!eL4(O=l)xt1Ii+$26Gd`#Qc(RCUP|Bqh6SC#@iFDo z9)O6^a*RJcn%c{}_!u&wW(%&X1S>%VRlnbFK!Ux#rmbfWbsA({zIrF1USXDLj9pQf ziPe_zWU3%>EuDqNq=?%f@&xoyHtw!#yLF!M{bKH(W84nuRE**xbyduX2Pjw78x|n7 z?z%@%$_RvGjele9hjOAGCGD&@24OpY#bb-4^OvK;da}6URs4SC zpZq@ws~d?Z|8L7QI$0KY8r+sjGCh5_GMg*cA$t`Pa$`$Zk!1xUGa=v#EoctHs0tXA zk3fqJZ{|U-wv#~Sd+6~dGLiy+v|M_WAg1w(gYXkYH)j-4=e98gGZYzXME91`Lg?K> zbQ~AsM2!YNAF4>69n;n@Cr+2^P;Hmtew>wQwY$T^|7)z^XhJgxZa=+qu&G&3#tAcI z(Siam5I9djl z*#~(koIEU65^^D8xp=8SIc$5F5*D#*aZO6CRr^iv8ZnYwEk8}ET(kFRGtxhJ>$AKF ztZrbIVJKczcP;e=mFr_Vwe{ok#=No>knADoDRL^bS4N@nq&lWC9Iqo(Tq_u@2Mdw1 zwx&lm@(WKMbGd3Pz;u&0@a~TTg(Z|bCzzy0WwWnVXIF2b+m&Xw6`_&8SPo>+>;SwY7pNS^C&J8|B;iFuk`rKz_L*) zD?Ol4CuV5wDI8&xXg66B8p=*pYfPfPPc@Hc+M4`pT)8F-q7v%uHp9?MVW9@H!+>ufnRztuesoDFvkq!Hae3+W z?oIEZOQdo}ydJi|B~oK#KU#O@<79DDVVo)AZF|-yU|~8f;a&;!f>rtFkskt-y6-43 znolTEJbWJf{G*(*fJmq!2vEbw%RF;6J<-`Pwd7;GvsC}&t084x_53~mX6(NW5iyQ+ zcFD?{Iz#CZro?B*FRhdu-ZQj^w4rnNkPLfgm~JaBmhMwisPT%8&h#9&peg?4<=K^O zdWmMIpv3}&mdqXcylY+fYS=0|c&p z{lx4Oxp9g&k~EdME?%_^r>@1tE!x0CYjp%i3lu9^YR`yECqIFu*YK>NbBcuop!61O zrq3U;BG~TpTdCuQu7~*$d3)wIUx*3^G^8U6O` zTmVjyAIrIO{*o4HB*c%QP+Zg zZYezF@wXNrKvsbGp0ucxJCe59n!wedd2uX^hz?~*;%cEHkI0dWq2JpQcj1^GbA}Ds zC51O`@ng-SvJ4H{+BD-hvPVC+D7-J{*>1~~Pc-yj-0=;UfYs|<9rD1|%>~FYIScE} zU$+eYrV8;j{xmggot1WT9M7g2&Yx`MjhpDH`D=(uSHvIiGOe;#Y;sV|^X1$gR2QS;ka|$03(@^Xn`x2Kgc|-1#r0A$^bRP{AwceaAfM zrF@3wSwjH=!s6Jg+BnOTm?)|FpuC?0ITQerM zb1{}Nj0|5+`Nd*;IkaBc?~5N>S;ui>7w#FAC4wT=Z>LO{rsCAeYl9v2iB$PHHN*W` zMaU0uu8E_D()Z{TaSax2|5QvaY~i!oJ3Ncb-goS-Z1#Dd6}lKlc5nM7s7h(6O;V5N zo;taSc8z{e)+R-1q%CPNh3|NgjV*6Y@UQaNxX#$~`ZbA}aP05a5XzNm=Wh!%TYGr; z>PTo^LBr*9AMb219AR{65B`jEZDv>N)oi{kQdFM6koSYX21l~nxm#WTvO2?@)^X4a+|JmsQGWT!a zyQ9e4n%^?#+abvAD3x=B*@3%6wK(QYLr~VFAz+Z1WMxh65HzvRBaMTfed_H_MAa?i zlD5)9yC#CD^P{WwUxPZ()Bhc;c+AB|FQl)oPc-&D z@F%i|scmaAL^z5Nx>&h0-rC6{lh^V)#~pLMd`RetwM0PIf9YTR2WXM4Oi4?AyTIoR zKW|}b65k|r)QB-QbrhgG4DOmgRU1JMGY$vvizARRz|857E0FiKzO)#0c4%K1y>zxd zy1l`98A-UEO$?3fw3{SzFXSW!-+|6%53KVEPZ)~h<`D2@%Q2+Kh-7>YF`x1|jV6aG z{`i4V@z__F$Xy>&#U-_kw}&N6oaXEP3_$_?Vt39AN6a+7-@p^8y_ZKXBT8D^?Bn%? zV_Gqx3^hd#t=ecmFPvO%cz(s718xmS=Jc@|H7?>%V^=zB?!7Y~w`) zv>ZQDUz#=v#jc6R9~Cqwd~h(g;Wpq-F8t%h+zuFj%_@r_0f3NWc?(Vz+f5aeGVPv) zRmeE-a@Sqa6F`n$T9xzrJ|#Jic=_oEyU%*U?YT=*D!aI2 zn9bQD>OaG$ovqg}nkvW~<-MoP#&1pxls$9-eB$+~x*h;u?xLv@wPX)KTgWWNki8u# zC(wBtw2AUl{Utd!?2myV6sEQkJP|=wsB}ZBY|tL`200$Sh~P&EP{sFcx(OfX3?HSH zl$3}a4a&MyFH8oLK!pg7D&+^Tjf(r@zeAD8r;g*8V&wHJ$o=5Cf*GENhCmmDrl4WH zyU5|__f3v+XtbY!`tH|j*Qxq8#v@_cD#Qa3)cug6Go2_l!Jw$YSHm(T<}waNj-_zV z^vpi}?Oz2$$Xf?gZ)gqqvfcUCDm_B3ynhj7c|Lk);Zk;}s3+Vt-%T+rFCP5D?_jQ% zloH;$0y>tz{5Y%V_g#1-e|;xhyNMLcDYPwk8tp6o1;(=og&?Hfl>G$9?X)P=MS=oa z=?%yLN5}MtDa>5B7gT6#P&8#;X$HTc&-}!Ya3fTvSigD&RV8#obDChe8MX;^r#kLH z^QhyF<`Ymt;<_f0Kb__CC&xGU`(S>xvc7>J2)|_Itu%H+PiXKX#M$Gs`T#w7+lwa< ziy@q~KkqDPp^qDsF`i>fCb-@{PeE0X6_s1J-SxZ~q=iKRf?&ratFad&(wP-K0oJJe zHi7XBPr=t`=%|!b_6R78fG)p&V4-i8rnWcy$^`PX8}NOB=8uUy%}?db<$#W zokXbXZ>ieU>a7KuHWYAPF&jw*uSI)t$;ZUV#g((9vQwaTxy%~+S zVq+_x2FQSfGuh*OlvsmerxbX-PLPZ)!1F%?H zO9K5oZjB!R5J(iGq&C6H$C@ut(+V={SvuO2z(KoyrJf`K{f+ zN&Lq;pPfvPKCL;!G3oCMkvhba`t+D$IRDf6l>iOB8yy_#DPYSw%RcGXpvgUX548p7 z>quzZox3wTppw`RMU>-cRMyFkg^cOZq|>8}3K5HNNL+ey#w@>}wZOVH$R zLqifn0{wDomQ*$w<8|$5&-eynWuH07XR z#O*9e{|%-lMiwUC!x4>uIQ+*4{w(C{lt52U@n$8mvSlEBDUmYg=X6cK9{*fh|6!1Q zLFaVJeS&a6sV|X&dw@wWgnfZkw0{e<-Zin`@%38rkXxyKd&yDk6a_Kco3WFq9+o2s^5 z&iATi$ma_iuFMO#whnFf3aeo7_8xRQQ07YG@IWyxQtuqs{oLqfXC|a~2bPa_8YF9# zX@{f0zPB4cx&IUv+{?GN&OhFkF5PvcttYTAL;jpa zq1XF@+oK=y*&w;^Uo^Dg-r8+U%rD4n>;ykUxAL1XC*^SDucc#hM;9ZPNIcWpvmgdAWmMw%&^Uh2NxqP9cWUWhge;UG;lRU z4;)2blBwqfwB)?KDi`^(C%sWdIx47G_}%z^LDwI4uGl7$TyxAWagipU?K(|88mT6> zEMCXr_k2B>x17qk$tkyB{U(xhrx9zCR&wF~v1bnHywCQc*}xp`GED);4f(d;DT-kWE9zAzwtq5FZK>(~wn{Hn@} zl0LS>TL1J+<(TLWW(eH>Loe#!NNXUyH`_zjXkpDJ)m~oqu7$j{{TnPE@aRA+On9lz zsvF`B=B!XUea2d8+T0aQE!mj%{&S$kMb?R{^LLO} z9KM0aH`jw~q#B(lzQI2OfJM0cUin^zh#YH|9QcF*6md)zrPcF-h$bf`lv8Myeo)W* z#GNlIyPbPV3V&Wdt7a%H0o$mSXvgiU*G{PiFJ!bNSb$7v%uFLEvDx}0bF)=jdO#5L z0R1J?SWR$5^;W&xGZTjs#ZZ!$M)dNs??o_;xx`s}yX7#Y3__}7DV*#EU_Jo3PB9~h zW(*A=U0-7WOCotsP^bF5ET=l2gh0U0z6ZJ#G|=dZYgTcgDS(1>3b@Rdpq1%%oDo|! zFTvAdU`$6wER?=I`qlCSL^*r%X0j$5EPH);aRbReQIw>^%F;rSy5EwPv3#B-o0cAK z@H8!YahrldkGlu|K)_GVqGNh{)!i#8we9FzuPki66|?Pd>usfy7Z#;WaCq<_!>hAD zKJR~9D$&~B`eN37DE0#+I4qX|ooXQ0pwfcU0eayoL>mIZ1RCkgzUjWAtDhDo+P6Ha zbR04ic4BJ=qc!TvHjcd;6LU&QsY3pI+a~Xq8RG|Z*XJqxr5M@xX#Ql|$^H-foVzx+ zS`-`jTx*SD`@cc|5;hcy4%*kFBAKj&G*)i0asiJ`pb_Hr1DeJwe|^LzxVUMlWM3a5 zk=yCcbXBW=ciD4nsy(x)!y~N_z?9#}ZSr>yj|lYeC=r|1#|;20)a`#2^pBuxLOKdA zT_&W6hO=t!x>ZvPI*3(RY^&AOT|GbY26w`v4c=9jl!Mq|)ZRS+V@K|(EAkSI0#~I{ zj2qGGNP$ip@Kgy90K9&``bZ{}ywLleadLhc7WmM!?TLnW6p9)u7hap{!i=<Hpyw#{ zb*m_uz2$6fp0i0Gk}QuNeC`1cyC=4oivF6^T>&;22=dDI5yUCw3JDOAfXSL98u3DFU0ZCd46aPEK z%}G6OX;ST}o6#VON)`aKHUv23Cml3Dm@z8X0tb-XRk5Y*DRkHUv&`zwYME7I)@5hi zmnjDi+J%gMkaPFao&QUnobQ0}*8dNE93i4+J)eo0Mia^TR*L#{kaqpg%EDuLZ_?|| zd`#QzJSf}58`SkLow-D_M3bacRfH-~9)I6ZoeB^fkX69MzP=Y`4--Q*Ny#QyhEM$X z@nfUFRR|6m0BYF@34M@f)hs$`lGm)-w?fLgva=uBJRkZPE4Z4Q-}d|Ra+|z!_YMIF zjgf=@b==U`1G4H8#NB~o(;4Li$+-^pR)cN)Cx{eWUPNu~PSa+0&RP(&CbMyXtPwPq z`%pHYcs>6EZR3lhG8w{$B=Zcsx4gL&yU0<6G^j{jcpRbC- z+CSQB*jepmW8TYgGSmDIWN`+8jhk@b6DoL`D-=~hghQ0=e9pbs_4zfy8Pp~Vpw9sA z;qb6MDx8@HRZsz(;ae9US30z(Y0JBR&_OjXCbIV)f*#@JCjUjd?|$7q;2P_)Ijh-d z(Uz|6o!O{!0PdcST@ne$asl@}czp#}DkUNUN2!h#C1>JJz$&jqUf^EF~pXf+iB!$qYahKb{M@{9cdnV9ilLJ+3I$26e!8 z3dnvgNm5=rdg<;Co5#JcmBvYUnL$XY>V9Z3K!;E=;Mw`-5Xf!CK;|L|p+YlMP6S!i;}xGEJK(nTiUZt6 z-h{Uy?0l7l(B|!ekV!Y;ClD|*4S(Hh?)1Ya-yYrd?thtK&Uh56r~DwH;2Z3w<(_MZ zbx4(ja62ULQl@mk140O(9$O&M88eiFNN1h6*g792>YmobMAEn` zHi5;RKMM)V`zKpb5m0y6!{bkR$;{Xs!X^PYt?clTe!A>l1&L(V5vzz&d^0yi;}r`( z;`KpWr5L9dcq~vJjKZ^R?@{pTZnGxXE?rJMzh?cJ`2N5>E&e(6N_3R`2DiU*AN6d? zGl({$OqiOPO^m@@!$%N}7jkY0{|uTNl^#N&aAU*W3I@6OCUA?-*jK>$Q)S}vHC06! zRCNrA0FSQpg{|FUC9y_15maTf*55d7PaaM5Af_1eTGcpCaa$9 z$RkZi*5U1AZq-OusuD8Q!e2R8$T7w}{ShS|X>flVFLxUm{6*}(62xRZ^4$|8VS_eT zkAK?roHRn#^Udw6n%?proIYnmx-L~B;4c40`(wiZF~jUt7eMYp9n8TFJ}?KTnAiO* zg5&33OJ%7`etSF6gspoYgRynUipo%)}L39BPthQK6~wk(6!_ z)%_K~D3z?5p&Q?iLeTd)Dq#&~qe$_<#%+&Gt|14i%fI*am}t1FX&$nte52^ETRENgJX=LIYnxgwI7qCan%S5zXEH+Ajw>k$V1`-ahqqT=VYbK zb>t)#T>Pj2fqzIml*u0Y83|lkEbfZj}d%yP7KqDiHqRVf70O-PY9g?Ax^iF zB8@yBDmG!IuTO70=@J>*Si?5<+D>o-Hr)rKyI=vPh0~(RHvd4aw);3hl;#4B)Cra< z!U2Ue;ym7WGci|)inHASQ&*791c8igSbLz+p4iEQGbz|f)1wfL=zEHBG$u!VZ1dm_ zin`A{N{sM(&VJ+Z;^IWyM=cHIfQPDA-J$Mm7%%)Zd+s>OvbezxmJp3Pd139vi+t|&qn zN=ELIE|PV2sO?KQ-Z7sD7M!1}796YaQK(4bzCPR`m#u`T<$>2gE$4xP`ESKMg@wYf z1|Db!(mb915_h|P3&Di=1LGkkV{9ZYj6wJX(whnd;YIXfP_K;=0b~BXJihm>-MVe8 zGJ&NeF>Vd+L?%UkRCbM$sP9^eDlQMN*(hU6^ElZ?%w!|<_G)fVZUM2E(w=vI->prf zM+QAwy=*_A@V?M_z<>ttAGtkDd^2ANi-&R?Zbs2}WCLbTkFCkur~Cr2+KCj-*DSv< zW}Tn5S80sZD3RZE9&&KXchiWqaP^vRsK?{=na|;+Ijy$R1O~-Wz+ccF%Jnz+8Kq{0 zv+o9LnU|Pka66D5fRCMqi@GwL_n9Btfhl!vx3kW@{?IL!%R!j%RYWdAJ+NOyksM!- z>Xp0eN!0JCe~!qL%6_7V*}iT$NO9L`Y?qmk^Amux5~Eo{0r>|3r^<8Ie*AtKg|@Ac zsRIfagEe26}b*;N;Hpvtc_`GN0S2$IwoGA;U)%01N>n;>qrlYCQh*r6@c1F;L{H>$c`K6kqd`(1AU+tA?-Wbb<25GYgW4c`5I;}4 zAvK=SjPdEmaY5otHkmtxiQqy$G+keN*OE#Vr@k0xowTDCJUhj}gGtNmP23nta(@w# zAl4jLuShu2p@Qvc_Ik1q9->11TMN+b;av9_)8CvCtf^$nJb|AeZ)scs>d_>DJ1R)- z&CdK=Ko};_{cC5)?{O??mv!{d@X>2eLPVc1A5z{=a0WV9^1!<~Zy^FQ+! zcn@nP@amB;?Kw;tWXc$03Nw)>QK?yguvR}v2~(mDU?x;2x_YfwT~DEcwA(R`l!(HL zm(2PBIS!D(<5dv&t%gHbcQ<8Sr>w?xEjc|iNjj@-op0}1V8_YPT#N_YL<1gM&HfnU#`WsYg}sc|?QuOcKU zHTWYlG%h6pCnc?W*@)AYIeV)wCqZj@^KID>0B;An$T(HTY<`gA_+Xg*8xQ-tVzooJ z>XqoUpdEy1Oajx3KS15Ud<)x>HGq@F>=}hOZ%Uvyrp&St&anj#7YM6e_92xEpd5$s z_?np7RDJ@kfHrVSak0o`(kTUJyX|}%2(6SFm37THiJLIiub_oHjvYzwq%Jx%Ln%SC zk}@dlo&>jTUB9lt--@qUkPFwzP~6~5g&0fa9A; z#(t2(nr(pKZ4X)8vo^wAoO46c6Z|q8TP-9SJf>-WzL*ftaDo;R-Yvkc8)(+k!zrt@ zDkP0|MWl+QmTdC*zg6kuJDc)!pMxqLvW?Zx!A=IV(V4!q-Il6Po0aps%>Jn(*3{qz zt=!Vu!T37Rv#lrIrZHHFk-i-4+bkD^{|LgMnZb=1OTODP?R}F(DyD-yu6Y)4g-L-? zpH{gweV*Do?wq&=!$mZ@Q=bVI04G~{i?h1*Jn6;3XLNG&*_9K=JTRun=bB3_&(waj z?49LoY?$c)HsbqP^?TmT@9(uqk}vyg=b1mbl75YD*bA0vYYr|lE8#SqgN_d+5ZT{7 zdlv8&*H)v9k7NBx7wjhGIsmuoVM|+JY-6O+-Y`ksCamE7P!8hcxv1`&FU&PA+7hwg z@`6nrAvzC-X+k-*$a-f*QrxezR-`)J>;_vf_m(V6h8(gIix?ytK7y1Nhw#sV$gbA)VGl@eP zpSvz!ti`h3>iADyg z1Z(cL#d_HF*qkyk8R~BR?|44kN>rtWQ1gw?N?S+7h6IHfLO(BR?rszHR-0Xrkov%R40Am z+hIm0ZK3g#lxsHpiW1YTWSt4eZNp$2>$+%c* zeacRm$auyn(e7LY|D$_MQw|zWF%3Rz+)V^LnrCXgNJr!8?XQ^z-p(j zS-KU$oCs(HJ$~SBOU2C2%G@_v|9p=8G`WcpqzI+p=jx=BpmcnP_0s7?9r|THVSI?b z62;>lOX&WHi^FU~!mSq-b#=N@h5Ww~=jcCqoJHk=rd%BHXHqY{8{s85P<8Tn;f z-Mp5-{94eK`S?B7<9OPG4y>kjyn*jI)6!bWU#ERNH|s@Shf_j1<1U9C-wsflh}Uk} z3KcNVi#1NOSD#kb&=?d}f7~?Qz?p~X`Cb)k-qIUXIP%EE({9I@wvVoeT3e_Z|L-|< zejLSY=ZV7O=6fs(#K!QE;eveS>z`%@{V*x9Asa2fV|x7T)0@g)=G!QSJrNI{9zn{b zVwz5ME`i`09{~MHIh9rN~ul_--ojQPotyyZMQeMrik0? z>d{wQ1jM-EVRiO5X(VP%>IaQYbit$v5DDC}?PCAleTMo1h5_40h-=Ki@Q(}$#wl|L zgb36iYJ_6?@7;bzEb@Q-SfzXKKZHE(WB>kTL=U$@?ZE=~S&itW_KH^qxBlhAmX(!F z6(5Hae6H72cMi||5!1fyfy$SD`6@WDW&6VsY4)-ZTMaWO6S-nnNX}J6Gnj5D7UN{H z+itG{qqXVWH=*B)&m#gK$$i`wJ;1E&A>}pA+jRT!{jR$zKd@B04bJ3iTi z_oLJ~(U@#^_00M1jQPa*FtEmsEAmKhFUz>{Di^FxO|M*wUs3*rrBQSsQ)aVO{i{4t zt2+r3Ch?x^95N$7x_X&DbI;pZmP>uRtB3XbRL|LG9Ad>6VfK0}S7%jJ1^a2bujmel zG z-Om%`TZx&N<0Dj65%Ax7Ut#R8OI?J$t^}br(og0M&&5M}^`W1=GH3Iz`$05@3nam< zQZ@k1n1S|a=(4~WNLW64!H*OhpaVvmpr3bg!YgLWN=;u4n<)*4ZCTB*yCPjFK4T?7 z79q(Ycmt1slT1tJl&_mZNyGW;^JkXc_#YFEw-wP{d{5AeMsk$WUVHYcxjObKxmf6{ zE02~PuS9k|X(J;cbzTSxm~bdNI%+y=iDDA;6mKSqagb1+F;0iR64l|(${7X(D2m!J3TCFa|55sB@B#1ywK+8~4rI@U^HaDR__w#Q{zQ&^qR zeK7-?6zWIb@}p*3zOG5qzOud#dRkAxc@&mMXTh67w)6WlJs(ug#&A=$>?YOrlJW1`MGIilY^wECc zlJkyb>XpLbYXEFf_D~w-cB0UGSlfri_5|QFHljq@*5VBiOEMK#vI1#4#YiucmjO|P zxNRM=5m&CDUP|v89HG2??cx4{Srk{ObiQpKkd-3DShfUxS}VDvhJtgJf2bNPL)u&Q zI*P^{-{eT3 z+s{txc9fuqcfh(TuIPf@F;TBs&0FX@RCL=wZso-fHx8Tu!B;U@z1p9-0Wv1}%^_Ee zQVH?>y)ZX90-2ijrtrSw@tm*sj{F{aqCENW?Ga?*j=sltwE_{T!=TdnCp_pJ?%$4L zJ^t8711<-OA>rEEE&IzWg@MM%!{cfgi1)}`*h@IIjT6IYw>GKyln052t{_;U`uDGk z1TLNM)ch9)2LwkA%|Rp~c8)&I=@JLcML>kb1&P<5CvPM^B(H5mhhXdDz!iDD-(pQ^ zOVP;JW1S@szhS)oKRGFz<%Z#Ab3fr`Mo6HZcjX&GQNRIea4vg(dJ9C&@n+Bo63&(<~_!1eh z#|_Wz@=ChhZJA}XTlkBa2Qi+uJH?{iwZ1ex>^35LG^A{~cVWFSw5#cDX|&VBI8!)1 zFtLKu#rA^X!{-1T&Arv3rHXAOuc6~FQX$%2x)G|&?&0P7`ua=&Y)Rowz&sb#KjUeI z-c~APqA)+1iH~d7sNh&bC2kLy%f1R6j8z*NKb??GRr?vHNWX8lv*;I?Hs3#!GU4`| zgwlZlf$}50N9S7-r$)f9z!@XAUm0zb*9_Vd?Rm3+{-}#Qd;l^6ETfm_&&{89KMALt z14rR#^S9xctV!m!5+bE5`3|3?V_|q4g~5}q@M*d6E>s(94zlB!*H8&2{!Q1TgVoi+ zav0}Y7Z4Y;MNS6fiF}G}hQ9-Xz5+@-PTGiFK}VGNE#A zb7Lujs^!`U%=%7rB@w%QTk1(}J_W8cyodJQ!Cf^Vv{w|jKW2`p1dLp+SLBqw3(~O0 z7L1w)sD;=y>UAXQaCCYD<`|LEY8E{P;v|iY&KPP%>@K&|smHXav@w|$ySP^B6-=4Riml&} zT(9y~X?d>xZ7tsm5YbV|%1dn$kw!|!)I%c91H$>wo4!Z;a=$;~eEHHc7`PXnI3fB-**y&+%Bb6Fwi-(;_ zsuSc%)=>YNeOv@O>sS11tj27oAD&2cmAN#$CYMDROU8>n2o%Ez_UyhmAKX2RjZ$Z0 z+oEVVJo3CpqkmljBuS>=Q;6GG$Wm02fu$&>*Fe&Tn%q4F?7gA)g5z;l7<58^hM4(+ zkU(0VQuC{>t3e1eURDR(stm7Fo*gD?p$@WNV#Ayq*A+K>6wkyn-@s0}L5UJ6E~_^} z7a?21_{dB>=wA++iEMo5wVExV5O?(?`D1w`@g^L#=3+ns>Sh;`<1{E9;0!?%|Da;1 z=Gb<{@>y7xUUSspV(}tR<;I0y1;hkxDVv)6Q99sSH7vufh?B=O;DEI2TzsQc?b%s3 z7e+m906~~+nZGl?<{>^T=Y-o#fVyUG#f-u*K`;A(v#kwTm;OQjQi!JHr)MgXTingu%(MF^MItR#d*5IyPr8D2b5*sR+hVP1zCIh%g*W8ZI5w8hYk$jVb_9%B; z@@fm_;bzNYU}B&I`ltJ1huVb5c(QFZwl3wEsw^&QZl$IW7sWPAPK@7HqTIGNj;$c< z79Vj*QJZ#1@qA$MO*2ZJPusO^)C3t*Tb@hYp|At?Yw$1K+c^)8rozuT#02^d9PCS}Qje{f^{fRNPiv0^=;0D%Vk< zB%Nl%C1C&hx5?zcTl$CzMkeu986^;`(d3*4EUe0bRTlO>V7&h^Tx?EZjmD|YS^8Vy zN$%SlHi9SZn_iqLILkuFVSdM7K!0zF zgT!Q=F-@~N^1VP%A>uI9CnC1qVj%ue9%vO3z{?1Oio7hs*j6(8F2>Tr(b&2d_o~o| zC31V&3!H{eb*+uIYU_pj!l5T=;xYzQIuHIv1zOcMe>`Jhm*N{^8}?_PjDu4!3hm_a z=+HBvx$_0*;uE)#*0fk@!g$;1DH3}-v+aBE{?cT7*>~ZEH^Z|BoAsaR@w5MG7mH35 z<8>j1&RoU0**au3DZEN~kt8g!D1b50lDA0}yK~8jY;n}T4(iot%$+Po7V6yOL{*^D zuUMZ_sWle=?1U}T82lLDoF$3?Qs|-{8ANt`|3ff|uiOh4otz{E8SLlqQ0WpPu86T! ziwr(-*|FaC<%=Ca4(D(j@k55@=}dN~KZ~G)>;0N_%!fL2Al)A%)I7ST&W?3)cILZ@@E#yCPH)8+ryDWGP}7$rs~A=p$zjTLAytN9@8m`eg|Bb7Gx)Mk>Pw7~ zh$q`5la3!>$B{XsGpH1;LB@-eooj8)d-gQrbZeuAdZ^;ESj5b<%`T+y{*e;)`b?W* zq;c7f)}KO`;}yZfU%Sy2Q~cCXD1_-Xv2rZOFGZB4D!gP;#obREwCM^e@BNwiC9Dw|%O8%n;@ z{dA*f5@pLP!qK)%2HKBUf}hAuM)BM`m#n~$l>2>wjfhk6{zt$XW?-kW2yirE z;igO#*DG>~Rz*L5%lt_{f3Tg$X%}z+20cs+Lqaz6_FIM0`Vxryx`3vl&2aiRr;I{% z4KPFCzXh#%wYaQ3F^@MrI4+1$$$$1TWBk6v#b@ITuVtx>1;lDP65Xxp(1N+;hx+_f z>Vaow@zi5j7bX>ITdFWEfia0RgqhjCA>`081b#0aCBEZgzgxUY*fn%AUS*fc)?F{i z)8AdZnL@a{S*=;@?Q{K<_hI_cCqB$}D{eeB5lrTCs*Km&uGz_rCLg__gxF@i@720dxeM|7P`@GeN3^n9wU+ zK~#l!=w+Hh*@$6`%;V1or++m1(^53?xM+q_rh5Hcx>^=hZ(V;n#uqKw!K7uy05!+ z`}j(kztjI#6lz#;&vsaNao7@XtxZf1QXa9-GBFs%$o;W75Za9n7u_rPF zhojhv(>-Pm;4a=a>^vU#*M*j>>R7GQicM80DGio=&Hlq%lB3I zBY6(e9y+}9RoC65TALtPV28^;5BfOn*t=yX z@YnwM57|z`tr}r04I|GY1&NOT_C{a7%V`p z`ugCi--y7hG|G+tCjG6~)BI~(FTD(mNFHg`WbcBi)L3zxsSRy!7lxkziP+A$wo)kd*`bMbGCO~j;>l?`s~v+q4{KG=$- zZs?edkj{2cvanw+Fr#D8YqN;ulvdu?C)f;@Ig{pJ6+S@TL=(3vQ+71iBu-Fc>4Jge zXrk|8f3Wec^Ep`VN4A*2I8YXxT=zp#f`ZbmWKq>m%37=K8;T@OI>``MbHsP$gTuSKKSH#?NF8xyk>k$}dldyYW+S^;F#DZ=e*0qR>%+It20vJ( zTfBBYXNR3|m1YrhR{-}TsvoVc;(z!eS(j(&w*40^vY~M@TT#0HbC9Za^ofSQWP$|V zXfT|2^4O5q6=1+MhUiQqIueodFx@_w$~!3q?d2)5fm;zQgf!>n{I)Nq&(_`S^`2-M zsBSp^tUfdUN)@*Zyp8Mm-lcf#uYavMm$h|%$w$urQqV&;a8C3i19uX+d#(jiNWqKZ zP(cOw#}nt0e{C=VMfJRaga}9Aaskz0ANcj=$`Q`c8UI;%5_kYuL`_9HBh6&hv1aT4 z$()r2;N%ZO7wjmJEOxYh$3Iih@1!F$95<#$g)0y=JyoD`@Re;&(G|3xUIEwpHY_lt zMIAa+Qw(IbkoUlp-F8Gz&eIh+uAVyROad(PW_RM~HN*UR|BQ@x7TvGDp-1{`FmbPm zXNL9EMVBb>IQ#QNyJTy?x(XQ(T{t`vE!lm z1ms7{xlIx{f!|l&_@NMSFdEviZOzZy2@H{p)~)~VgJq9(hU?BVRmKw{@D?XIfHe*k zc>m*Zt|bj7Hfy%~e;g`f0lZ#(oE%ZXg&m z4)xXZ2S?7;43zx~nY)U2y65BTdwfj>!(c;@ZmVP#YYN8hQEnM<}8q& zI?D5dyaoK&KSp(bgcbVmz#Wi!!+2x;pHSnJz{XLtJ=<^p#RYH>RV|mke)IN_g-2lO zam|0s%FeC%Pqo7m6upJ0YCT!B zgNo9}6M!s}p=_e&5p?YjFS=hbvRu=OQa*iepbIoc4v+iz`xNVM51p?1aq^-34#1a2 z{(KaGQANN0mybel_n}`MZpZ`ar!u63Te^TY95|Z)#?tQhj3-^~u&M)mp#<5yLJ!Nj zPa>yVxAp|?IqPKQ&sZYHR*y95JvqFNf->74y3e~^sdQw33g%yR=HN2%_m7IC71!P0 z-yLV4L&Cg2Do`-Mb4B!2^+9-vH1Mxj6Qyu8#Y6!_CUdK4i`GIBI#ib+pp;hH&Nb?~6_j z4r2(-E-0WvgiX-Mj!Z9u>;FZzytlHn3$hJ)OJs2f*AHLNB2tn<+p~fjruq8F}h#D}Y}I&aP9p{x;PVBK>Dr z*yKbKQkC(r54mksC$DZpE3U3T_tplr@=ee%Hmzyu7trCf`sX(+tfPc--h)qGL>Aac zHb)s+e+rWu&xG$%)ktQ8( z4R_gawdi$N7kKbhf~r`CE(t6R8A<}1M!}m9Wz6JlI3Dv9@+4=shj9Hf4uMYaprtyDTzI3e8A4Sw8Plr9AmlkxJ> z{J=&JL}s1{ZDV_TTCQ4|{k?WE<7ThssJD}kQ*f4tfuTCp+~{G-0@|8Oi%^?JEg_FI z_Rq@vZ<_v^?7T%1>j@YHdG10chR0xl)^B$MHpE1lgrP`F@~@{zkM`;7&yNFV4@!Ed zKM*~X7YQLlU>CVG`WvMFt|(zPcXQkAz5N<5Sl7J2*57RXhERD|NJMg?G6MFlbm!Bc z$0ueDlb9Me~co2Z$}`SBg$BYDcAwUttfl%{WfITXLJ}A@+}x6 zMuw59kJ6LeL0Rn7PQHE)FyULHu!>{g#DAcpql4Y+Qh1L{b@2MfcAl#o_DCD)uuGTM zbV1eC?Ol%^Fq{m3{a)IMCePLRAh?d^cSU7;8VLM&f?3yeRWP$=N}5HHSE3D%-4Ez6 zh$3sVHnuSM3e9vH*1UPFh&Zfe2?g3z6iCD-VBR(3&2-E%U;9Zc$5V-sBs%S1VKjQl z>2@p%%&n$kGb|Ku1B5e;I|9q+dlzLGjSaM}&H)N|YY+m(_x9uJJpGDm0FX#Vz3k$c%cN zdh}|}f-H^U;KZ}ZM2dBrrK?1aBbisj6eU?0#zK_p- zuYNHP()l_a?hOY#a>%fe`)!Mq>d}0$&x3ndqT9W!t{94HwIypAO*aUWP zXh!#rLz$(FV0suB;ZE(|Fxaww28%O=6CZ68UZZ2Hr-3N#H;dCnWw|s~O4(JjUq-v& z^y){i|9@L*{56S(*G730`!t8{*8pY(uF1bmw%$-2v_V6RU^aA#&L%oh6B0F$25+T1~(Q zk!)=1Ox(c~8gKX;i3Lza`9pnqZp`;wWC1>!Iu56v7I+jsSknMt2?L=%G{0q?@A#uw zG?^3PTTAZ1{FnXbG$)SLE@BQ16p=$h6&iCeZ16hrR_%)>Emn9lnW zIb~q<9jTbBsdB~5UcgRzjN7T`@#4+r+%XZ_a19w)OoKMg{ z=!0`<-n$Pe5n-=IzTl?o>?9^=&B19HwS@C>Ib?OZ_iEh$PyP9!;)b5rcfKQQ%9WCX zD=(0PfuWgQBA-G<&C9BYO1rqYWmxgQ@N000Wxt!PNDM4M^P{T_nbWj^){CFGJj5DR zFb2Q}@%{#<`@!>KFBoQZnOon8Dlfm&;K0}F7L_2()7%>aM z+M(7Q-_I$f0NE~=gY*hz6`TnDx;8M{;30>s7cR;*otHK0;Y-_tLYri?f9|%NRBq=? zV(ZVj7GiU)HLBWfCn$QmOFG#Kkf{jsjg2hkRc1H#gVN~h%Ub%}aOosuQ0?@;D9ryM zS%N!vx`C03t!Qf49snOQlk+Zl>x-|XamU}l=NP2rgHIYt_02gMH#7r>q^E*^+?51j z;aZ!@A!KQwEV~?gP*_A>KhOfR4vh(=V_PPu6Kxs&%oe}AqSM08dY82?Ax+>ztG_9&VOzS3fgTk+lJv%Rr##l?BHW0`H*A#8y`wnKy(YV@a8m!oS5?sPiAW)-bWt!-n&&JtFH#*awO zq0Ye06?n{c7eN`F3O^b>xQeE|bu@6Rt%7jL+2CUaGC(9qT9%oPT&*S~sIzxUF zHxR(#J#z$dIU+;Y1H)NGpC$k6(q{FSKm^=znngxQBLrJtnOt;Z z(jcCP0W+eoF2~(P9@3Yz4n>u#zgOhyG@STak3aBLjFJY9Xgqg%fB0K#jT#;k7{__i zl5Wp@(m!yJQDhrgdDP&%+sjVjSjG37r;kkf7(HuGKD2PkwzH5*O*>2pCFk>1lX{PG?%#%ubkbuXPM z?zrv2EMbX8E3)kCPwkK63OOs6D&m8hkAosuw)D$_MJ)0g2q>}o6$U{kgJW*>zn83B zWB!UOyOU12ad7tqz_)U01S|i-j*!LFKh8-c?R273B^peJ9tN%8rFHQ)FCrBcxL`bx z^^{;!e#mFIW!FM_D4XhQ%SmQQ|G_k_M`IT%_5NT+e{Af+{?APSL4Kz9zAvo1xb5)O z`Ve>Tbt~@AL_5ulLBM;z8jR(4p9_6?9rzQkxqww?|Lz(V;5S^=)M0J0EG;dGx zgwHj5+~w~Ti%0n;t9JjAZvsT1e=&S#yp5maZsTjHa;pz_?#+h^kIC8cA!~JONAmsp zyYO|T3^@H+@W23Rl!j^R6x$%3#f^6@<0`f2nFwnM+Ji^-&wGhb^?|ecB3UM+`QA!>biNx^M{0@q~7ssdSt`ZoH+*1D+CVV(c8s4Y1ybd|OD7$}jnY zH~`vFq<|Qsm3R+N)V!`G=X!U8ZY_tCf()=5_CMKjh)SS@PQAr3h>$jy=yl2>>=y^v z@2i5{+4U`F>fhzghcp3}KWG*E-<|+}GqZTD`43lf07u+TU3D(jJH?0E8_yWL4Rl+J zNX9{=fOomfyU%%0i9H67c1s2;vK(adI-JUSGMcDk>^U_y`Qhx|Nv91Lt&BLp!T&csQ=(yO~@2SDVL> z1<*c)x;8lj;Yv#Yi8%QmD%2lVF|TxAItnP<|CBDDa`Xm`RumA_oS3Wtqd*q*;g_#N z`!Ra!z^-PHE>(g@goy$#SX=DmJ7qJlTa?_&F1l@edetzv>s>r-qw-d^Z!K^L{d_+Z z9yFmj;MOpd)uwwZ4oMq!zJl2aBugV`cNht~-MX*l6zi4okw&fpUGKIjw1K)4`z{7^ zS0AF1aqO8;=DW24&Td$BhF>6r=u^m4Qw%$;TJXc~+CySAM~7Vk+h1qVj_gQFEqnEh zo!?=RnZMFSk83|^%+6@h#kM_e?1;X;zA;ygoTxtMYn_9pHcxwReU9z^lHSsPvE{JJ zkx?I9_a*nww|Blf(64#RZ(wNd9#OL|z~{in2cKRE=KHdJj6<2_?vp`YIV z;DKY{Sz7xZx|$f-X>THUQvp7pc>)~c&r&@^@y^vWX~{UdGMrWx1sHGpxCl`mVI&^|oT-@m3^!t)rq;RR}!x+|q%@HP?l-%-nu}xuy zsTF+|pKg6pEyvTcKbU`OkTT;?8!$`t*zMm zR;5~RMss!a!e={)?;9jkH$S0I{1&2r%6etoj9XyW?ac-}8En*ra&kQU@55@|YaWEx zGWOVy&)pDfjk1>PJv=r92o-Splo4%Aj=PKw6ZSCMUejPM0AINN>f+-3CqedHp>!58XKst=%fk|+_Fe0pim-Ib8QF=Gowk8*+|L0IInItulN8Ky=}d)B8+&x^voKFv zMCEQ9Sl72?0j}ta#rq^_L+yL2TyZTQ`TNv~o@SoJ<8xhg?4GyG&KH*ce=Qhy>&wL_ml?NeW+i(+{Ig(k z>q8EeH+nu-=}-CBS23XgD>VBbPtcwH4CA|JV<8&(eeDiEcqqBDN^KFA*?-o22YgTK z|7*={bLX>LL~Mv&VF0 zVPxaetMB%N=bzukCEn-)=u(qJPRKt^`;Lt z7Ju&A#@dN~B>UetmJ5yo*tAJ?(}HaGz<_fy&T?Dif+WmsbKsSCxBd(e>63=wi$_5k z5dQgzp9NqQ1`98q-Z?S{gV1!}R8135vKNQGf>8E!7z6Lr{W?u&k*ZmYGig+Ai&!u3 zpF6@uNs#fVDV>{dB)FapQa2ry)ZycZp%5x0d+l(toY&xM7Rq+QVR!+(G(+!1>QC_% zbc34&!ZottYB7CW?YVdL=eI3>{USteL`IIe>@b2O)%gvGt>Def%-)ah4-2bJ0i+oT zZ;@j|F$Bp-L~?kkA!JU~pQe|8_@z+r8_>(z?|9QG8*A%qQLQLb2<6-h1L46^8*xpT*Ya+W zce`nto}ND2r!tUfp>)Rqna3RloR0S{M%c4=uS}lCyT%v1%z$FJBjSB*=?>u5&jK8k zVaTp&1Tj1tc{W*RLded}Hxn&~Zy+cy9FYF*1SXz6Bi9_=9s~5R1gC8lSQqpFAHHlx zRRe|#N@$jcUDXDwhB}`P<`rE{@KKt}+-Y4-*p;o|E(Kb(l2o=|<-6|PWfk4#0G34s z$C?1>AxdZi{F(tBx~aLjIj_`=$nX#N3vZT|KSEG>7n}Md2?mZzUsO_#z_eq_-X7kO z8xRz7?KR92stfhtyW86cebQ7?vbl4F_Qm^wZB|C!jHY9G!%_pIm1P56`p3mdd&!66 zB^Czjb*wD2FRpFbLO9?{>ELv0mDcm;PBEAF-9fCRx8f|Si&+W0{jTW^?{SRvCqN36 zH*{2Qn6!L=Dyx4(;8@s)CW3WCa*kIz_iOa3UwLxe)uWWsRm?&Z=l_9WQqQWgs>~fQiM0)lBrbLyT#6mfjpKTThl0L7}uVENV zC}6^R3zNjI(dfv8rxMFlaw$>U8B?9MLWKrV5;C0}IL<+Gp(_BY8)5OA@D~6sw};7* zJQ`+9LflJ?*mr!|2Z#si0&rehC*~7v8;U%sdI9uz=Q5N5DxC(1Y7Vo(QIm6G3eXgf z9>2en$e^u>*w-tc$~>DJ@LbX73qpqD-(L~Ka$#r7+-$v#DIg4%RcMP*D`zLOa@+?R z!*u&s*TBGQ`E(qj)OG&!jC2}tHS43Vk&=3#XfHh$$G~C`H=T&W92i6l9d|Lnb=**` zlvznJOSii;qq%SVB(2>tGQRBMjHdpn_Vo^A=7bWsPF(8VOUh1bpxVeUoc${qz3mvI z%i@Op#6ksV0WxDez14-HtwP7^mwRw0=tgdop^Z|^QXGglkhW28q?q6wsGMJE_lJXWs&H5k^^G_!yIm( zEx(vzC$5a(A6HWhRus(BjNz?$a0HI~B}@ozHx%T-xK{Nx_@6Rr#tbpNu8ufeUk^G4 zc85#Kx>%N;Z`s0`BzQ}!8ozu-Z)w|I&y96Q+-p?>vwEOjsNc5&tCQ(WrX{GvG26y^ zL%qagvN5~%3R)Z!YaTrw5lj?VD9r}EWP%=Dbe!OsqtQjA#eGoP3*V(Xz!ZH>Fki|d zTmC#~o1AoHrXz9Jvut#~8TATFY+0t)@8{TXnc;pc7KFNj#P!RhSaoKMp+y%9(Jo{n z8Nz{7ZxvmMMdg7meQ&Y{&Ke6yd7JU*91LLW24Wwu-am_}VF#w);+MD*`mt54SR2^x zdm*sEobD?gi))c3Ys2Yxt_6k{3juVwK0jIKacPjiVEteVz)_+M;ny+C)*nPopHPw| z)7%LNL4Ej^+n?3(m?(3-Rq0<`00Q$sE5lde$c$n)tB{fXSA+l5@UUS2;o@!QR>c{O z-3-W>gc;j{5Wb)e*dU2~V|9X|cp5gN#@KooplV)4>=dbwUJoxOIMsaUF{e;;I3`JI zr=OA2z#QOyV7C%up(+CtXk}X~f7@~t&YPS>f1G_9KZbLOSC$w~e73=XUYVg8D^xP^ zXJ6Qn&m$RgXExnp*a990lQ&K`t&;zR-tmkqIp=H6Y}6jJO_wCW-sR3okr|Hr5iy?^ z%f+@V3+jtP5X(huo6vT{XfBMqr}YdWU%HEq?k(nNk}6XEc1G`rG@ZivFB{j6C6a1+ zV8@+XJN&u#YAI`P`i~bTSqfuXrq={oJ|7kho4tbYn}HQ~l)R}6c1;C|aM(PQl*7=X z!Wo4>$D5Exsw5`cb2a%yM__@N$Tax@Bbh*AZZSr4mS36;>hu_nH8zKSfi5(*)D#+_ zm1kWSb4$gkx%xrBQKq*S zjuH*IGK`PW1X=`d2Ol9VS#P3$oUvBaVSQ_!MNYa`u~%wpZ10F;@|?$gsJv7LNxu$F zvUrzHoQD`$oGe1-#`wFq;x2__+$rB{&aj4Gx*0HJ5|K=rg=MPMVlxPxJ{G4fyX=Nr z)_cWXzz&DDAWbT&Twj{4fGxeEDEJdDUwN6Vf6OG6o6LMOmhP9yJHDIe!q#)icg9B0 z#Hnm40u0miR1R(H|k4k^l9H$<}bofrtdt$q30@2yt0%8gD`a%Bq+;C{- zf{raWwWe+(Z}g{I?szO%6vjrdBs5ps)&*`fH;IH6H$WT}z{c9oQ+=M)m$*|?9mkbcv8O*zli7~5F8$J_Dlzdfc0ot`+W zUvZNh-P|bn9B`6$YCE&6QXvXw{HW4E24yU~aqBIStwT|$=UQhp#X7)bAjw|{O_Mx4 zjr-|mH`(DHK%@3tBO`*!z+1zksvqvWpZF6zTms*n^DbcW?!D$%aj*cN)52(YKTQdlUJ<@&?Y#EaeaCH&}1mwh62Wn3`qO;R*RX1mLQRe(OTgFD+ z-S>`A=JlZ+!nx@1h1Ng`$-Y%L$(m?j3%vlL)@9gyZ|*)Fk2)=NHF3BrlBc zY^)kztx*(v3B{04YW3dwcm0alZ!a>J?0vv$X1ZQ=vug<2S>z=6ygYU|nh96n;!>8a zO%a9WkZItWX;Bk+Sk;O8YX|A)b4FJtaF5e*a7ym#csAywA*gg=IY#V=-#4}a8O5v- zi|`WbE4<})=io|o%lWS>F<ZD zxa2Oj<INYpdz%X@#@rPh~$iP6UAE>;?Eab)w84CgV6SEktHW>fR0ah2CWy8EQZV zId~f0FCtz!kO=UI3^>mi2bYjD3YnrRgw#XwLU?|{80~enMym)}Va$#}tKXYt7D@tR zWOW9I<8qwmaqyfk6x+}$HYNipg1Ywp;gF^n5a%QoTbMlIDSMik&7Xf-Vn4hhn)4?|H}R=Mk*7p@z+7fGZT z24%8|u&RH-iRr5JoSaQiOtzr#tq&mRHJ@k*o{MD=qj6pWFxW(b^~06@V>S9Gjzg); zO>t<%du}Y@77(9TD{6HT2+CwIM6U)Q1@^g1qm`Xu09UyNuWjv8w6!_@zO_STRbv%! z+Nh~J{PCf>+72@)4E6$W6+YtV+%4pnCjqI2wqL`*y-%jE5yqafbHeWvq(C^F5Bb|W z?l_+05U)-n77(6F{`&Fdu|f*YRLU~9zXPWrpX4~abCf$DDoYBmi(Pq{wb+m&N7pYWuX^g_`)Bt7p4|M=1<>z+Q zfWhKqzzz)&n^y=F-S<=C;_$FXjtmc>EQGA|ju?Xs)VM-`r7Uo;V^@K|bas!QUoV(} zUGb7b<#LU<9#6vT{wHsBlCnKfLYmDuEd*|!wm3U45Hi<5kS61;z( z4Kv{Kb2-$E(luE{G;DWw0*_(1%@-;<`{tG4K0nfG4mBDERpkHlDDh55as|06=S$&hD^$IR=zH=mcd26Rv*6RYdLbX9vcfAWK- zG!v1TF)EAs14VMbCY8sGRH!SgGa)@K*wA5_#n{czx|~ z5&8S!0@bW=1)f4u>IT7u0wN-XXj=Mn=Y59K!FtmT3xolO?!N1uRCD zYkD`tZoP8RtxfNq@7suV?UypE0DyT@% zn+P|1N~$K;y=Am2+K+9uA?`fM9BDJ%VGNTo0D79N#lIwjTZ^=05cZIBG+N|)Lq`QfYJgZlw|EuG_} z;JzQZ6u~L=2qsEwbLC)|VXJBDW6v8kz6EBG&CVgvC7b^O3?WrDV9Z=mKe_Er0eiv2cgKd_94x2imZGm?iwkl;RJ3lMKMT-v+4J2T42FJKdd<#mgy zPlJ_k&f8NjSSUCB9~q>%HisdEoL(4Kq|v@P(7W^c+%PhSrRU7CvZJB8BAQQ0@&j28@= za^~N7fA46yosuiGGM!XY-&<$UG)mF$Q1apvFL^e%tL6syh<_c`#r@Y5M{1Ps)ksCo z{)q;wLIl#zHoi!eQ!fTawK=GlN{Wk(3=e{;qEvzh61~hSIWGOW)rilhwUak8a%cfs zyZ1}yo@bg?9wl{qBV%C(A$dU!a0XSC!sH7J^mgiP5pkT!#;BXLfNrv8&kHjLY8V34 z`)5-{mSN(imXmyMgN}~pM+(#pZ>+TtnhQXuro9q-(*iH1stKOV#o%{Jv0$hncu8qA z9&cZO1&ScOmyIvz7ab70g8DWV5P*m^W5LA*gpNH#|%{UG8F!VzyLpF3eTR z*9KZp=+VL1nE(&lOt9#EX08K9C3Jf}u5zEh^&455unMb6OFihap0L2(gZZYz*2=CN z%1XLq#afH^;or1)uL8KU_iHCJYgogX`QXCjBf9?X?(^Vn5m4uRYr@m|48ZCEiWw-u z{gH6k@~9mgZlg6sR3>#z%%|shZnQ5At7})`s{G$?psRYvkKgUPsJ<(^&r?b5%|6q| zA;BdOb|1A)>H*IS=C5#iIhXIBaFHAdlroR0PY@I@uWz=2diPk=0l93^i)V_Be;hP3 zef~~Us&@^zU4|PYVJP@tVcgD| z1+CdJMnSf)f#r7PE@j7Q=j<7=OmFqPshRO`;l}{WTAK}>CY~x;ayRpmxx}tP1g;*GR z{@-(7Vw}|BA0Fv>!b)b{@H)7`abg*H8wR!ub!cGw6OfMk-~O+Gt@(6-{j2PomM|%o zuYb01=FFMBka33K%78~jiNM?QNYBXNXtIEzBv>9v_hu_(0JGQPn)7upr_$cJbTA4s z11-SxGjyi9)d!mS_!MQ!$jc8uD=jH8b8^atUb)Th$!XCQ?OSjnbBq7}-F^A!&D9_6JT}AkEG#S>lQgcr*M0RZ zvWAb7B2pQreVJJU5hnb`E?lXEf`G{{afFW%YRk(n(q}WH&5BEt%df)IarAn0R4Q61 zb|UkZnj{?H`!Oz@Q8YBBvw%UO=#}8*Z1<4!V2SdfAQtc4H&*Mr)~w z9E5pYAjOb^u`34)JMPm_Pz5mOvTy$xN+eY{U(W{1eYZEp7r|yI9R5u&I93~ zQnTX7>n`H3kC`LBh-47iZFO2U?CZ}fUoP+)$RC6V)^BgF-%OfSBT|S7pEI?Ltu_w?VFRG+XBr&9HZck2(kb z=R*;=-P(7+Q5dtb-u~+#w7C9VGy>%pR36MmD5o%(jz<3iNowc1Hk`}kvDVNBV|x|k z*Zj!_EXYQFz;D&H^N+jR8h>)fL3rhot5^45Vs1YTFKexj%x9HB^wZt!Mg;-@QQ`?O zZmT#)lhmGy(`ET|oiv~@5-4e&m-F_<>j3VXnY;Pg@vATqO@jv8THp(##Cz6t`d#eD zZ^1mY-1&Nb-ig(3%uZ+?n@GB}Ei%2tBF7v6fH^b}Llf^dn|*z`63}xs#8hWyW_H0M z9W&thgnKH@7=&|(26@d~(HX^b(0CZ>sB0G{U#}yJLpH%)VTS}MNQ3+U^J&>kTuQ7n z<3h(_#ve?3Q@};(JUGNyjb7iSBqSsxY)#-u-|XAj1w-%>m?GC5c&7Uekd%!uJ&j$P z<>t%W*!M6U;hQimtD3(95|9r-3=7bKDM1bd^!T4Z23{k)46EA#KuX-q`kE<-@*EY%;IZSWJxrxCnlQ7#Z%r#3LVzJBb%65y9r1q@FW3sblX)ybj|?3xWn!Rtoc zAuJh9&DesjL5X@4gm07~C}RW}?q5bB69E$qRUk_@(C3=wzS;2}u&FMhfJecLdocQ` zzs%@t;6DH&IC(H}R6Ddqqb3SkD&b3pSMj@1OLfv;yMrG#*x3D)2C;b*E-pg8IE_!23En83w1KWB1eD+yVY!acx zg0m^U<{}!HHXVFjgiXT?GzUcbLH=wXGF!k`pPAQ|UDGNqR?4(E2ISV)a){n0(7eGW z8>n0Uuxz;{NG}6)cFq}hp29zv%{Z^o2_6KjD?o#r%%Nu^?c3g%cAfB4iYyLHgH!{F zD^>|ly;%XbX~Y);u;_W`V1YP^cbdJR3;f_qkF^Qnu6xD2-l!07EAtcQ(b|YzwcUQl zGA_4If?qaveO^zd9Lv!fA{`&A=&RVq%PP zI1T-~8N1s~2Kel38^WFW3fPvMz0o$m(vMNa|KbT6nWg$4z63YiQd(@t!3 zu;EFV)^nDm8ox@deYj<{GsJ{!%$O19$6RPekZL?93thlaw%Sgd79yB!3JRAmM0@tM zoBTR9G&(T4Vq?8O1ImSprG7LmU@6&~1k-}k6~n@C1JG;K=qR-qA}Z^Yn1Gj%=__U> zwrE2bF(#Xx_w@zV4JBw6zR;tDD!xLd7Mrv&!GW`o3X9Rw*4#Xz0Xe&YM zP@<{Jt~twj7y>sAPIt0vbiUKP+XKqj$~@bAO)F$@$#w`qQui4bU(uZc$Zxg+6Njhw z0>^6LNn`S6Fx!t)M-cSehyoa5r;!GjKeV$7D(lgHL*IGr5F5t202lU&cfj7dzS+G1 z9|fgxJG;}Y;C<9&iHt;BJIbQxc-ms`%AiO2kg{>$@Rj+73sJyMgi5p<)$mhL!`s!h zZvt3J{!qz6?J>pljQetg!`r5-a09Glu31IgPd!EM=v4I`ak7}sCr5iyNE-Cp|DHHlqRbq8bkSuBS7kszjg zw+F8pEoSNxl!roK0@Ix&_jQD9#l)~p%OCVoGr)jTwRkgL7UZTLkzav*Le$)yGIczS zz~8(|vSErEhEd?Go_;ESiU66gOh5np(DLY$#;_|l? zKlVO!pjxA|s+%HWAr1c_p@_fN#1Qv~(sZ}nbW4yVv>m_RaQ*c@=sz~M$tWmcZYDJl z=nJS@Te`|)r#w=MuaRX<^O#*?jdfb|rX6wTcxUMm5oY+BqlLg~=kMAGRuW5tOeZcB zUxNw0xKLRSv&uIe4ee!g!5e;`!ZBe&nAdVdbXXPd|Em;$rxI%JVplewt~u zbBQyGw_kAPuF6sDPrYrTA#=GLM@6rj$d%oK?Bhm+(CxS`%xW& z>I=9%*BBG-Z&kIaEJoZ<;@{~k|J92iaJyy`?Cz+s<|{5yAqv@7ldc|~ipu@}V+zh_ z0;^{A+0k;x?Phg>Q0n(F!JBopX?^;QQlroBq|eho+zDf=x>3~0#C~9Qa688P7Z-q& z5^91Vj}*99Tg%$FL^;3?O?9e&oC~kweph#C*Lt3fH)4wJ(1+9lq;2$s^a+3~+?Y0B zO)dOiwr*8SG6C%hw7i6lJ&v0Z@x<~%@A*r6fj`-2jmBgE@N~U<+c8+P_nL28M9rLH zRO0)-dEArpOZett(rf=)AycZG=o<(o{hR~Z0$o~lp)&>#&&JMP%|C2tI{>xH929q> zge#^s!q%xNdcnEcRz7#X!|lBwn8wM^5S~j_?0W38KP%$P>L0Hx4wRG-(Sw zI584P)MmgxK-X_rQ3D*%(9&1rt2mp_FL~ z-rRY13!+7|067ld6<)LTRmfemAIue73e-skU`xOL#M ztTMxnR1q0OHZy9DW$#;Y54mlO3gE;et$93U{ocoI)@W{qMA!mM^W>edeqq<%daj)Ginw@`fS&;hpvmVQK`JNdGeC~S~STEq8 z4Y3fkhA~Rs@$avjrrv?stOQCa&wdc1(upg04-vOLP}LuNGkKb}XRaqJ{B=oA4^Zt< z$+_E*=R~kkAcg9_8wgBII!n<0*mnm>Zm}ypU(tx_pt=yf?1&O{u`V)E|b- zX(zMCdMh|7WWgBsHmA0^AN2PlH|QP!Zj1P$gTd!|CQJ9I8!xiyZTfGXt_(ogTszYWJa!|_tCr4Uspx2NM+4qEuxaK5roN%;+M zty6A7aAnvphYo#zdp_A4Y_gm`;K*yg%cdE(jL1kf>iLe5P^^?L-2D6);Y?9oQ|?7i zrB*0zo4DlpW4{XjhCyC{pfONP=X&I>4+rm&i{m_c_BYHdX8}TYzD|&*-GVp2-C247Fl6`_~WWf`bNhzId#JlNk(P!ZES|cVYlWdQXAn zwj!u}Uk9_QF%{K4+IZ3vIm|B9lZhG)w~52CUpgUks7RUKYttEi1$zy0Lv3SH5*{;p%{RF$=87M4wp^{_jrC2wj;hTeB6lg1q6)W z(PllzY;(l-{kd(p8=SK7SAb{t0Y=!b?u$hkK0``=G@lINT0HFCU*P#O_R{5;1(|@y z)tCAiJ`rCS-78dIWHQCm;_p3!kr_~P?X<8^Di0xFqJ~KA1$Gf{_7~RiU$C-s0QYAh z`lYqbibG-)3|_C#Ci0rQrmPdj^ZRH8j`8}oj!o-iWo7X#E8@wFB*t?&h*Su}d@d(J zSL#Vw^n4vRXP4sp(HVOoYQD@EFeR4CYP|xZnkR2qO5Ca>ySvP5zT5gVod6K%;(>wB zK8Vyyxn*$+beHn0x-jbVoNWLA`d+keVQQ$LyoZjVY7MPzsivmmJ|~TiC0xF*R+=sI zGA@)z#?1(qt*fD*MiG`xdJonggxNS^+y-32DO2qUWpOI9bJKDbDl3+8@lDJ@n{%dk7%`CG+ADx zj@1e>w3EFM5#S^Tj^=I0MkPO}UFdja7OdeMLv&XfduKo4As5!QMiy-Q~u< zv-m=&Pux-Ld7^gEL&BvRu#hSUEYQX-@N4+&*E(HeFm<27lDlFv2P&%ZKOQo z-na*Z{V91{{MY&7GF$J9(RL#$Eifc2I%(oFGJ-s+iBHM$xeQ$@bdZF7Qj>TVqKt~1 z1;~8gm`hcUecgX=2>Ls#8t_jd_*{sTqKqdwcDC1SG>13d;Bpl#^sC*8FOc{ zc+6b~KC>+eCp^K-TjgY3Y{bVHed$x;s>xpa!~vv|>-$~~BPvi{B#COCrojQo0M z4KtDBJGOmrz&aiF(*^H-v}CmbBYeV%Z86zZz@u$2y@HdDQ(iBB3TKb;X#ZgTiYZ`` z7>_c23X2$vi|vMcEXNtnu}Ib@rqT#CF9Gy$vc;9fh2a~iLv)%}7!yrB`VDo67>qVe zp!(1M*WO!3Mftsb-$O~abV^GjARwKBh$tW-selYhBi#t1q=a;;v~+h#Nz4dJGj!L` z&D?u_|NFYGC)T=OK5w2MYq?}0&g|Ly+~;}hbrcWS*ilXi4_x+yWB)^q2PuuI0T_mI+cg?*!J` zE5w~7en&nRDfNGJF zmpk&u8z6IA27L$wCWf#g{FXpJsg_ejafBxO9$sq^JNHjOoQut1=gOlxSYdx7E^vJJ)68O#JytNpllPwcd-Jgi#Hp+vxY@UqoFQb{oPm*b6_8X6Ly*-$ z2;xVQ-^UbI4iLdbSMbg5mfwXC+TBvena6^T)Y=;pD=N+HpH}oT7w4G5@!T-3XmMp+ zBP&9EG&w zj>J^#wb&%gBl<_zMFhfMbeZG{`gC5H7?a_QO8}c}s4-M_9k~aR?Rn4f|KB*7DoZM> z3MAs8@9*Am2lh{#)RoBag5*CG%$UfLKwKOd`trWs;C+z&J4|z;Vx}-u=o-adU`O&R zCgWQWQjg<3YsZ{o5W}d3d=^%6gRpjnav`Gw$FYYU!4^!Zsc`Dv0@@syLov&+Jm1Xw29j(Ghrn||&M$|k84}&jfDvII zk^#YP*Tiba276JvoS1s|L;fcWEwr7|4oj!&e8ZAGKa_!$@H57m&#vLJml1@zoe)1$ z90HxN#cd~c4>llH3Z0L|)V||6)ZTiA1=p{0Fb(CAMEWcXV3>5yU?~7O1>_$U=XLj4 z=j1*5<8RuuxT_@F7^GaD5-)c#$nFpgP8i)ys4QSOq#K8<%4OfSNRWrF@6=+Zv9}S3 z;jdjeIXn;HS}5poEeJ%X=bbZ$q!zD1@ZrQ|Xo?X44>{c}s$$O3pn^s*RF;`)6i@Jv#amuN#9yffkp#Ef7PUCn8jOO0mVz4$Bv^ zO)Fi2R?{|hBXtzda3RDlArQ>=ONg8I+b*O&GLPIPz=GTXq$RilF(a|yU46vwGlC!w zAigq};WrQx)_(qjLWmydiRj}DnT?K2>F9UPG+~dwMyrJMVVwZGU_s|Rr8&3r53{I^Qf_j4NI>c1OVE#C` z_H!Wh3x+%TaI9>|3i&W5?Di4m8b&+o3@$4g~0TVs>qmC?2{ADse~pFWIb5Z_Yn z)sKl64U07x(ro7f?X=s}k1;3Tx5$$JPj#TxQ@U%I(fU79Ty*4sWDMAPTpS~ic<~S% zwrU6tXX3K9;x=pIIRt?y@j0~jP|T3E~Q5A4t0 zU}Z`m#4t^Sv+)l;0P}24Xy|f{BvSNf1Gpmn;dQy)2Sk z|GoPHe#nD`oM5TIR`w0Po^>x)DIv%$2xTA<34~&uxE|wkNGtmu@hYSTi@}ncJ&+>A zE(cXk2M+G*xY?NVL`Nd4tUV;4_Y-!3j`NlU%s=M`=rh|MI0Tvd9MkutgDRFg-e|y(0W{u>C|8sNz>ZrVEglW5X8$ zP?uRs#NX_?cfu-^@u~NCVuZ<-liO*0LhvwVSc7<`y5^8X?Xb_%Smz={NQmKkEW*d_ zG*={qPp=q(P0bx&9Lo+&Ccnb7fa*^sf`-+d43GvLqIN9xg%aYxTaNU13?eGxNiQ(x zvB_{0uxBB-5D8&wg*y<)(a<`dlJ-;FK>R6Hul8FBp}j<#?Mf^!6tRvl$S`x5cyJAa z9%SSAlQ`m62W2hzCIn?{8Dm_B)`zNBRwR&V8buXkK!|X zxV{Czi=1&R3kHRxww*?HH)A%jPYH29!U!hNp@GkI(zinZ_~P4y{iOm0VsU;IbV6gM zR7bJ(@Au_j=a1px!RE)qkbvNpCx_*KDr2P0w71Cl1SjDa-1jJ- zuKF;do#+;g31JB&?PFNl3FOA_>{rr&zo6P&XbgHtEYnD)^x<=6ktCj0k&<<-BF-yw zkm;SMyYrAN6Ff2(HhQXxo&+g?RF7&dMHVa2>lHSdO|@}?nzOx$$$Da^Z=IE%_EGBi z&tGut5mr5{906dtl;Mr_ZhPXHVEsJi@faT0%lrjSh$9t0HQxthGQT{~kR?8aWJ;oy zH02`8A%#UC4^ouyT3U~_7M%yNzpOZ2K#M6`-DRrYphZ}^ym3wWDmo*JoOc1J_4-8! zx;`s_CThEmjbvr8$>PX~pr7=mcRlnE_1c|L@BzgOVlVssDr_4VUDg=y)}*=Y(qyocm8iW z1>Sd>3;jC;0{ng{oVPo5F2ctUO^>^W`O^nsTY4)tr@lkA59J^0kgOiyfM9RK;gt& z2C8Db4oPQ`qN3Rv&qi*Aa-z-9fc`f3hXI%xhL1p=%D^KGT7hlMwY8yZPv|5&Kq8|| zK!5TTwG&X#+ZtOysw+aDl$o`Fa?J#J1bW(r^+7N!@8FA3tfN#GeDr*@bhqvrQS&zGhiQ{OYA#kNlj=$Aho$eBdhP#E3iSUIx?aBL`Ust9YEc=v z2UzJ@P3Dgiba^X2j{rwRDUexZ)|&Z1!~bH*_*l%jX?De1%zjEtQ4sS#*N!;>u(;w* zm81`ofR2O02bb+%< z`M#yqI#Bk#vZ584(*m~uE!yo}sSP*RWwb0G=!mzz_5^YRONh!KfNPWoVWNfepeR2D z4htVy6#4YvqRtD)!6^i^8HmZkE5VF-)N_k+{?3aBA20S(YJ`Z|*4aRLDLKxZgn zi+8GpFGw%xmQf@P$9!AsvmN;}uaHbIzzy-ZQo_!oge$PNOSrF6L;Ixa_l#5F0%Y^HEX@29}d=JVgqePy>RAXJ=UB zJkvttHDpT924 za@zKSI6jvnbbH z_;oFG50-cU+fg``cZBVz%NipyEo6k81kQaN!Vc{A-BE;BGfxt~29H!;X4QGH!E7Sx zF3r0=*!HFp*L}zlbe&$cD%&?;f}Xm;5?M2+ZE+E(W*Orv*}5U0+Mk;GJ1Tznv3+Z| zUGX!QE?SLtC)vOS9*d}Rj`{7eMSnSm(ia^39k67|2$O_)ZS713pOOvI`OS$TO2Ak> zQ9VBOt;Rlb#>iG%=+@HggZ0a-wW?gj%2q<$O9!U2NgX!MZilih>Mc3rP9Fzc@4C`6 zyAI5sb4|w`^2WS#s4)T9xH$f5ewp}7Dt;TLIc#uDejGGZO!!?GCLr)2j}Nb1tJ-b+ zu_BD>quLht^tZ#xjmbDVxvN0pfdgXXKdEf2qh< zRzgJN$(SH4{$fbS?Pc)&O|i#g-QB-J8!q6T1AnG+y{76ul;~J51)MLse-g7#%d>0` zuCmT2GHriZ@%N(qF_Wm7@C)}oIPTD@IL=75R;op4>&={u?F8HNputVf27&}6Tm37= z=s!QwzLRoZF-GLw640@}ZaZ%*cO2o;(wp|Jt6q0fm}cspLX?(tSNgf;RBtBakX8$9 z5qvkAerL*BSX(l}A;l^9&fZ{k>plL0{^SjycjeKu$Hq{owW#fENLHTj^%LPjsAHrrfrB+fzI)B5_r_fy1a=?;R4 z)1~hvU1PyaYePX?tzm(KNs3UEaqeAp!zO<1O$n`M^K~xIO8+=~{y{qbJi_I8<-1wc zZGrfN+d@$!8h>3eD6)6P+(HRjWNPeZIdy5qCK*Ve#!q?E^w%`w$7~xXp4+G8^FpV~ z?8E>3$l?HE*WXFhgT`%BtBrcfCh<+RR1t5|O!=qpKZl>d-vvF>n@%jez^q;ktc9+% zg-SJ^NmQ!_Y_hL)OTi8C#$Hb2ajNY$wFp0`G5a%p!J7d498qdY zq@6LyE^h`)#l|t0c|0(|G9IVql@Z9_d6{xid5oHBv>x3IzMkso?QaYqg{Gyj7AGzf zWRtKKzA={2C^PcK*XaK^eqOsU=WAcqALK>I6LQH?-R&#TgkpkIA5Lvu?*-O+ql#P1 zr(Yb$9s3uaw*9!C>O2W_G^-(ghZ3#sz82bOZ?;e51)S&A8^Vv%>+RR1LcNzY0#A{l zZ*R{#tOZ?~r_?gtyFD@A8hU9k6LiV4Dxgq-K+)&&^u4dGCtbX$d#zE5V8KG5WU>U( zNM=wc=kWXKHUqyf?+Oy^O$L)f%H!9na9|=bFke|?r!qmeFONoRH(tsZt7K8NW(o8Y z@G1w?dbXjw{A$ItVt=G6%GDWAud{WZR&gq4t$5bXPeylJ2*apNL=8D^HKSJQkL2Ea z;hpL4PU`G8nBu^wA*M4ZCsR5YwM-p`gR^6oEXnBu*GvKCQ~3Z`qD75>PwnmgQhQbZ zOaWU0>}J`zD4Pgp6d!5^5l}{YJ~?vV^pUS@9hQvouUXV15}CT<#Yvro3_MsJHIwKO z6CR5_7{(#cur>EVSz~Ymz^$?v7s!NB`&N&5u*J9y+}K3yxoM_#-LtMMbBkEJhHW)=hu92+ zUtRA(hID;Pjf*U#w$8W!Rw9FQ#TgvsG7bv$*_a}w5NhT$Nac(CyN~~K@IvN6x?ClN z(u+QSo_POXS^)5)eAa90yydj^29W>}0o&j?Nq6n#b#^0HvG}jQum{N%^Ku?aThYvrdcq z*YDO`hToL8ai}D-+e^1!^~2mI^+^pr0q#;$XM}=7?ssih!qFf$8Zc_bTJHN=+78@5 z;;NcdwlD4nhgvE|YsP`FQbbB{(>v{NP{JS2!oRFWi`&vFZ6ga_bv8bq>Sx_E`WJ@M zulxix9!DpAza933h@~<&ms@@4V$8pGb*pjLmRU&+C7z(tL)Y^S$rm}Lv~A(I+OQLW(sMMXmDDs*?p|Xe4DhQ`Py_%ppsqiyDBgLgf55p z7MHrWxQ*Y>$?8T0iqSaEJD-03WYZPlYK*O`QrMKxto@D)(P8AsbA8hLQ-$Dbys8&x zT>5${I>?@r@LVq?BM9Y0p%SNy+MV!P@W|=O5SH=J&StC#l}LAO4*S_UqPZQA@WP za~gZtK#ZbNe{+2MQ$)UFuIZ}F^GNmp37PJA4)IyYjWAbM+NFqPH^CB4$?*wZym@|(SNC> zNz()2@v-#|3K$q^Bv%Dxa=j$5`8|rK#s7vj%sm4B)BgjvSVfjr$vrkD%3?#dd)KUD zcf>voK6X(P2;mwoucA`ZfKud90e^?v!(a2sQw{$Jlk8CEe7YtA*o}PJ3u~1SF8vA> zs|!V_5|kn(WjXQ%I77d*;fsueb3En)61uzTs@m*g6$LLDrv#KJFX;eB;eWs8*GD|9 zAFn?39leK#z&Y-T_S4k>-l}U@pOzC0R3Dr{btNM*)u6AQbxBqmhj5*U0x|ft-J37u zU<}<9u^YHK_&FL@uj54D+!1sBkWnK1NGV>p1SAOaoTz0%=KAXgXJ{Qrec5<|H=X>$ z%g!cN5zfgrN~%Pu6yG<}`x=18#{4xRXbuWUzU>EqkfvQuLcnR)6o;m?Tf;X)y ze69xatW=sRd7!)=!WEmMFrZT1l;!o zEKi?~Jm=GMe)1H5^b)GP=92nGjm9u03BGZN;g1r4!T!5||9@P-A9z};LzlYIl8fu* zYSn%|wO40L9wQ~wA|sX7Z-I@9$I2gF9}Pf{E0;Q6U(_6&&Jlh$C_7Y^lXwB-x+!BBq ze0_a$U#_gI{3>f37Q8$M8l<9?*FzU(fG`q>q8I-H2!-d3YunRx2CXRnqLVwEoX?#Q zahwrWhpSO941kdsqc_wC2m*t~<=i*lC4&U7My=yqUYq=8fn~1uG5vG7eNbaCap@KF zEQe!{_s#_f>9xEW`@#8;`CQ(Q#i_yMqG~B-PtewO!~a-?N&X5M1$bV!yp7g(8?TI- z+`r6uL;$tPGhp>wO={Z6Sb7@T9kDjB*iDFi8XOX$vN2Ji*&vsgkf7H{x^P2L;zN}4 z$pflmXvhkj3M^B0o=BG@@f!-~ZzF(t7`N?AeIe`|a8!@Z4`JpjahjzE(hog$XYN$J z)=Ju)_4#m2vR!fjFbAl)=A-aqDFZ{pg1zYq7tbcOP9qlDCD~+gHPxYQA}yJ@Iwx~P zlSd2yg&%W*F7L63QC}t;ob!WeM|ll^#pJqzu5WLO==MyGwH&Q(ATq}{LoQ)+6^dj7gnDGV4IY6I$w9i1Zo7X60Zz+6^g zxAE=wNM^q>09qLUbz9kb=TaC;Ucc1ZQKIyoufpQu4QhpEd}7>OJI?>wdjKd#%aGp! zP_2NC(he2q`Y_9H+0)F{%jl|n#CQM8N~yKubqC>2KR3&r z={n$in@n*>HX014ND7zrLy-0+{JmACLzM zGD$OYdCWLFHXOFhhLzKP8j}SUIMQMrq9FGzH?r3Ar?9OLNF=#I_n?H`S<=zV8_Sre zFWi9F+k-=+b!Wf!d3V_aId~_P}P?gcX>A6Zo{!bGITp6bJ{ zvY;aErW1EOm|5O^BQIrzS3UT%+G%8Y_NHqXh@EymvcLG%7pvV5)-?xi56^ykJNQd$~&l9_j6@D_`IGJ6khBdAoU^+adzpf2b3pL-KC00a~}^{$-1qd4>cuH0q) zD*7(xp3T&L#q)d9>(k7;|4EgBnNa%6}ER7hOBxDd}o2a0N-Oi zm0dA#>$mMsB{2iHGRmV?)d+sz^ajiIIURi`3@(!oGd_Fv_X2L{TUPg#q@eJO3s(QN zjPd1`Q?6eUb60uR&RSV6zhb>vFw2oL$Xu}N#t!BJr2o1CCXnNNvpDN^0)U@{2&{lh z``1d{)xmSqiz6vhVB}d$s@3fKRZAv&{~lx_xSO0LaEVfTn?If#mar7P1@h-&f0Nd` zNThW@r)z!C?t1(-rs@_b0VN)sIG$SM;NLFtWLmNY1_^pV!1FT2=2qr@rg_r7+2^b* zgA<}M10hAgZmr2~_FiI^zFcaTR&a3%Z^sf~XV;w*2@fY2Xr7vJsDrH1%3}p~%Pywa zs0{#blM?yU;~?PfcmZURl({yrs^e~kQvmoJVSrW!<>c1a?KJPqPjjHNmUvpeVQW{H zd-5(b&P-O<7c-Ti)4)oVgU0k-iiyYU&>Mq^+Yev8dXu@MhjIULU=x zQL;3+tAfLTvo8i6xFRb_!>HzLMfRNMTc}+rnPZVX2X>TgyD=Hh+R`ZIzT^E}=5qV(qq~Y&4EOE$UDs}M%+0kW7p#uOfLKm?3-Dz8z#_I; zFcqSLbiwM3DH{M}!51J6*8@7=$ABxHTkgQk`V3U53IjyUzWI&shcd6<`yT(bGwpkv za!~lE#MqonE<~sesot>ub#(ay!>zZM;J@eilZUS=LMgP4C*4)i7O>@k9l`7GNn1xk zKLQ}H!r~<`UU&QzN#{C1JVcplf#EhFF#blWS;ox&yyi=%H<31_-oavoV_!vYrk=ie zHx99X&?VWfc0D&n>e0@$_H4zzi?eX)&)DP~5F$T~b@S9^je}#8QQ}fd4y9THhpC6- z#1bZXGQpL=g( zZ^1>@(@9?HbOu3R35emCzJnD_@prcnC3rbqO@uPjWQ}2E=`4O?TJso?n2M$7u1=3k zAO_ZTIq1(fhy&6_-=p8t7sIZHL&`_jU7~;BlE26OcwU^+D#f?Mfzj`5aHwSTA#CqX zi;sCJ9Q%+GM&~I{!sOjH9D~bD%VuOGE>=yrmlw!|l>15J++4O;d<+^kaDqn)kLYXP zV&>5pIq$YkZ^$Q7d0$Orx4g7Zgj_LbyLL-a{W4J?ZDqIVVUdA;{u9$h$5lGqdgaghGI4?+IVlb1J&N`#dV_eq;&$WRI@beAtE?0M0rs+MO z6CzNO^|1b1L}fNtBH|yi+jj8l@L^0;hKTe(6e)#&_{3AaS)%W10}Z$uE4P55GsDWPhq-~%$F1G1 zvVbvh0K%65Bf`0Nh$YLUwV)H=k>c(*2aHmtmot6TY+1_hx+?>YLVD4kAsajDkMWK!%%wXD}WsP{d9N)>sCN zV40|Ae|r?^?ft@hvytRACh6KjXYA^FDnTv725MTpKedPlbfH`(O(d1d5ckoG9k167Nc#&dIB^K`nm2FZ&tTiJ%q( z7j*<{Gajj(0;R8FSH!&;HF8qMq4#i()XnLp9d*U{-{1CHG?lvAU+kgBg{nE(33}pFp@hrRUG1 z$fmm^B-X`!zz%p5O%U*wNMSrY)yH4B(6d7tBNcLkAw1unT4Gd1{UD#r#qb%Q=dIJd zfQWY+E+IsWo?nI!xwKMotEns^%e=rkH@~lOFxBLGa;4&$49LAUU_bxlS~$k1cIVN01ov>If2&aC(bt zk4yZM<1mCPdB%|Ojz974N&VAEED3EgTa%wi^^UGvKVgAf^^=yB+G!`ne@Yn4R}=9h zRIjd*%oEq6uIuJ*p6PtL!Yg1;#m&(W`)e~zMO98OCStZ8X~F@F63l*mRww;Db_g;k zXK|)2-dfjjVKVCAK@_~IPA7?suGEDnL^eP2T8Ng1>dh8oyEH zQ-CYch1MJX`0ofxLI?g+bg=Z5=kP>@cEM)|6|hPb#D= z@FDZ$qpU5@U3PN7*}w&t6`)aDj^%!VA%OqY#E>&}haQ#Hz6=jG+~+m%&+_-;M@D>*Ma zza_U!oT}Fi!hH^5v3=@HENx=`#f2|cjA!e(PSK&%&6xn$RXIOj>n7lN8b(eZm@d;d z4fxc7V?Bsmh&Kr>+<@5^sgaQ;3E2icO4GfAfs^sK3sDoSGg|yIzCgyMwKFEfm;LP* z6|WxV`tqGY@%L^oZ+8YYxPfOGl^CnDh@AdnMuT#gpi2i%QbH3VPdlqf1HQoIa6}m3 z<5Q=GLSj&6nnFYn0E*_2>08Kw2vK?#;5Mp}{d!hGdRFh<%XEEAf1hOCdqg9@57-X9 zi;e7>qsMxn_h)9#bOs;Hx5<>KO#WB>GefgB|F5e|L1FT%b07lX;nU|Qh4KX)(q1r- zSuXcA9koWQOydRh99t+*T3&~pmV}Sv&r5uzf?(`Ba=5l^7Ts94lYMS^lHqNgcYmsj zbe=I#_^pfw(rjbr3MQW=2oyO4oAe~7CBQ-FC9e$?^Z-03Z0}pMn+<*30xdzUA4TuK zs&p`o9&wbxeho9@acmYbTN<0+#C9RBQ~takp2-!+1==~>gFcn_yQ_5Tb#+)0DZf83 zpLe$X!=tKShWPfWgp3r|!=(NM^aI*yRL5BPNyFxgp}@vZW(5TLaBLOS`ZrQ=c64Pv z5cA=+;Dlmkf0P^n=jQcSScI8NF=0N}!Y!qWSNplJKJY-%1|3tIn^89jF1v|mi-E2_ z#}CX{)6=B=72lc4ad2y3Yz@l1Pd$RZ5eH{d@4D=TVj3`xGC2(ql(~1N7O8 zARk6*HA6|+^JPiDXDW95t@puZi)b`^xCD+3A2x@fq7-ne#h*!Hdc%g>wAn|!ENdIX zc;D1!OIQpbqDU%AIOyL58}-0zk06y#FKSS{Z_k?mh_m&}TiJNo*x9(P3QJp=u?3@) zsq<4|9uTvG{a63of998nT5Fe1JXu!g9A#-kp8&|11E_p;v7 zGBzBJp+K{Ac72-ViwOJb7IQ~zpI8erfw4n8e@nWv7=N!FbhJ$2$`wNdh-85i>^E2_ zxCySy+;;)n8A7m(=wyU!OI{zL`qQQO#LxM%rIr3Vna(pYz$n^@LKaz@X9KzVs4#^b z>^cKaJ|~|5k5j%hb5G{XcRDoJpEnx5aZnc^uOv@rcCA0z?whE(Xopl|$w5-*y#r}z zIyGg>Bs`}ePM}k)rfdQHzFasx{O92;Jxne{ZXS#8zE3-eZXaKTJno{AH*;nLum*`s zODmQ#T!opNCTez%iwCQ^c7xw^P=y8`lHbDC*6~bORA_1)qa~ysEcq_gv%BSlDc0df zQjUS!$y70hrLHJ95PnF>tewoFK2KckceOA3XSzSD1aru;Is&NXjE{^^xk}Ew~}PuW_P9`qgEe}N-r{` z;Le=_J9-Ls{&$LOd3OnkL*Cs9!Ex7oHB%3j;E3X9&H1f*r=B&Iicq5TOq58?j^oAm zk%=i=n+L9YOox7HbtYvV7tOAcu4^8!!-h1jj5(>jy>pp0zd6^|wdS?u@S1H;PQ(78 zO_!%%%8!=K9Z1r86*z@2`z{!qxypFY00`9Sj5_TbvA*LqyiHW~8coY>dB=x`EwG#XGbS=aac2jFG@4(+W|W-qTPpZlz)w9PR7 zSsghp^V>NeLJeq>xIj`)eQyM^EV%=UJn~^VGfqeTem!_v!z5Z1%hq$Em){yvg>kR( zSzK_Q4J!mJF$C1%j~-Yh$_z^wyyW2Tn>^XBTScu9fmA5!dew(_+O$=|#VO@_nQ?iA z-`{`uGoO^p;k>s0L5u`9@c~nuJx^H*H_|FgYD+`-bUy}l!UgGval4SlHHXzo_zm4p z9v^&AiSWf;QTu{_c!=oVS`nJ7X$W7b%DS!^`YX_I!Hb)qEqgqsZ6kN_yZ64;Ch-ZT{n&Ta2TYdrz`J@9PK!wb`pw5Dp76M_$sY+@`ow% zsjY_@0Ta#nRX2=|GaIz*5@B+-X0lYaLpd6qLD($XGW+?XfK{%;&pC`Q-A?j5Oq-ka zJ;|tjM7zHt1lBzzZK=ZUw4syR;GO)GLO?bHk*-H@f- znYc6Rdk~+o7l2}s$oehSadKQHe|d7rVIa8r)7OD1*5{RVT3?I%LF1&uq2XoxshHHY z_ayaUYrlx2(jK;|jX>LgPyJM82-m5_oNWl)Dyh=tKDTyJ9~Jv_wP22he`fq#>CVM+ z>ZpeaLhcKaDjz;!mJ1YkXSnBEzTMCx!Q?_s>iF?d2Q zz1R??OR~RQcF)*>`YcV3y7oP&+mdb2_VqRiPTUU5@_%f%+EnLpjv8G0F)q1vee&dR zs+3)PRs0D8+w1bE=*n2;9;z-AdRVo$zH{)`$0|uG{pw1xI4nO#Jd)32?o~!v3Uayo&eRoc{#U^(k zMbqv%h$osbEW=d}cg+-_Y+?RVmZ?uPp_Q#Y zg#Q^0MQY^8C+pQaV&tj(Rh-9$5%BL1vmO@cK<`x%g7)P+kZ^=`S)(`QX6KK75SA^c9bby03et$o2qdJ6Z>uodK z%1@Rlmo2BCC&TbHvl3-a|2<=!m>N7S?<21eUN8qutYRtn66;`L6d6X}y#ONnP9jg?9!rm7lT(TE3N?*Vnn1b~VVR$E!)1Mt>`#=DUj9v&#hW5ik zb?CiE+=(e+a206fVB#N30i}3mKjxfAIsJozcv`PJi5rvQR`4FNj6^W9C>k&s`QP+7 z#OQJ<2L_eFG8w(r+^nF^(TI_Yd72BidQAh?_}^vv|8$v}ua?qAhq_ue=5wx7-j+|O zV?L~l&hL_Nc(R9zDrVOjFi9m~L^R5_oOPy+cEwCFk5}S1-;8dJmR*ni-8itu#eTc7 z!Q+PapB+(uvza#PgJ_bMJ?dMr*7sB#J6NJ|c$`$m{5Xm9M6fSX%N09l2>%l)<6{G6 zTE`}@eRIdhm!wSKHzFnK$h|#&uR0w@b!}LnJiU($NI#@s+;6Sn6z<8%{!bsa9p?!*N3_`#^sOZamto=^8>D@ zejkmr&83&#EOxxJh4~-P5}p_@jzxXj7}@__&MhiWA5=9-2=AjDd>eqV2FcC`#|rZbe& zqzWK6wH>w4gOPjrni6q}bNKgSUT9lu?}8Jz`m}|PFSEVIfF%EI8RPkn`gvLZ`Ax)8 zruoLDk@FH5PJo$QdUUj)C%YEP1e@6x>gauX+2h|f<9QABK3?hCI6E^@Z|;+&n3!u5 zYq|8h9Q_hh7Q*mAtl^3z{up+!dx0bd%bPgF{kEQ0?ROv1B@ diff --git a/documentation/sequence_diagram/did-resolve.png b/documentation/sequence_diagram/did-resolve.png deleted file mode 100644 index 770b4bac3a5170529d03139b4eb4111d0c43d8bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131877 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 d&SxkX6#cx{nHuf`$A zVS3Lkd;iUr_jEmvz1l?G#Rh`BT0B)-gz^GI1o7;qmun_0*F&j@QuMNCOb4Laz8RLN zzCwrLXym%U6F?h4t;T*#D7lU4I*; zpyu?d65}kjLT&n+{Oy{1lUq|GB~DtNZU73so7h_=7H#4B?-Ht9itlk)<5yxcO1Aqq4h!LRN?z(p9BmMLJawo^c#(Y3C*6ba)vUVgJ#B~zRsVow;E?*6hC8=TjTw>1yx0>b@kV&@ zq9mC&CFFa}*5g{|&24p)3aZD5d}XfZoA1x!ovmLer8w7JJg8;JO|O~O7SUF~jI9RZ z=c9?~+L`{=oyx5X`;(+dj-6U1ZTW1MBS%ju2s4cxbhgzC)sYI`>38evD?{etv0o8d zk&GMlyyP9W@4e}Y1LT@(iUkylnLR^wTG>1qo@ePPJWJXdFIMz_&p$ zXi!>hbPXb4cb15K4POpdjtGwlP8|C&c{#%8_mB83^}Cj6nD_2%tyVgezLacf$6^i+ z^Soz$S^6gr>LByBnTG#8o2INCoN;N$zy83$wqp3tpRguRuUxLPC&~FNvIOx-Z8{u= zF^j#C*5gFW%^%ZboZa8_sc4c-5qfn4lxfWFp}drzs>)>B_O0Tc1nIB=vWG-LiP4FZ zJN8OoJFm!sD28wq?YTV`UbE%sto88nO%$eKpGj6q1qOsXE_})Ka**@@Hwmdq!4@BS zObz$IFf4SuMlNRwwkqxD^Q2)bt6UkA$*{s~M;MP!xay)zR3f(W2U+sS*&cCuZ_ugr z3*F*pCA_l>!(owHWE3J9~oI3o7QY!%L9ZW8$C@)^}mDl&bx8nWTM6gSUIx3c6+v78jiT0XT@7_Ebpx8 z@mpPw8Q&T^(3{q7>zoSkmB8Sf1u>rGSjFJ6`ZK|UnlVp=BnZ;E@TvJIhR7rsm#u|H zm*ztxcfTjkcBb0))8jF8~TvHst?jQ`*)B zDi$l7PEaC$(mV3`PAm5VD-D7gJbsOqq~w!U+oL`{Hj|3{Hz!Yq1LAY{g0oMtRp1no zrQM9()mI6_z5};f_yM5OW;Lzg}<<{yKa@^ku?Kn;|{^C!h?Eh~0zbd&$mXtG5E+&hB?L{gBd0UlQ^hCSd98Yf0U zN3afQE-n!EjKm(FAUMGm*}Cly4W$pH-(@vs7G(}mfe&YqUGVo*WScCxuh;ytG6VAq zhnY+Q(39{QPg@=xK%}&;Uitoj{$-Q*nXjHNOEZ65A~_|XQk1n%+%s=tm*LWrsXYKu zIAK7QT8vmO{43zkRtA2qeceVGo@y{sorAedx%ZE8jC>Af%%zk z&tvn}3wH2K#J{v~qi4dBc+B^CB)80k;3J?IF{^ML0)|CDr@8Z3)V}*3J!Z%R_0j!5 zt3M`E1e{v1d$4p-MhmH1EV~tUQ!4B4MV%xCl>BZHg=N;Co%dn~1q}zR(u0Az`2V{}ML{hcTKJWAV>7z|y;50PcLV}C^-!~jU;zXrnKJ&d`A>=-)rRp+y z)A-BohbB+J4|4q!9TJ?R)YEcVSfdPV#&|?}x3ml#AHM(yWI3$LUKpsAHM-ODyOGhD z{zzcG%xy$^U=ZMchfb{K$(hhDOeJxi_keKis%?k!V zk}exx-}WOmISD+HV@1%=%Y8lw19PutCJ5HZGg&9z>~nY!c~vjz9Mj-Y8JOnt9lKe{ z#?_@k(1!O4`-ZP%Zv^VmZSLQ5Zbw*J|7X7BVXltLMbD>2&o-Q?Pzh>sfoMgP4UKCD zdFH?rkHO>*AWXR~-blJhdBBDEA9-u_vFJN9qVN18Xci|4-x*@T2KmnpXZAf`>6+VR zv+N-{myjECB3bDBDLD?cS*0Xt*sxDx1{V%EcIDbvNas5WBYnmYi0|{R?-Q&0r4b90 z0Q18dlR=eqKR_=UAb9e+CJ0-%QB2x`3=~%8psRp+)~(C=^m55ty}c%^f2X?$lG}j+ zdePh}NI~A^@k{r5u$x?pNqTpBG$9PM80$V39ic?jBDWm9z>L3w;IAg{Mj)_BnV2|( zlevhV#>d5fe`XU4a0aBdIRh;_DQFB1^LX3&nnk@*>PoA)*&v!-N}c7Pt(av>(|j7r za1#J3p-8KxCpZ%F0Sp_#i#vbhW@)^xLZ_GSQcht_h9b%Dkcj!r|; zJ)*jLpzqK3q!eY}VrKrXm+~WyMb!+#xpS}>%h~jm-e1EC=kAtJss@ZTtwV026}^52 zw_Lt=cu2pjx>#4z%9}B)hA?IEp#+}?0KLIP{=qi%c8f}QKEQ0b=Z1BaWE$UOlM5cE zxY2-;D?YAwj?Xo)-r0NYpx)n|ji-6{@13x-4F@MB5o?6Tq7DPKT)a^bCU3zHM@ z)c}%{6v2xcHdNDI03@rY%KhRI6YNht_{qbT1R6E;K`{=pPLTFH9w!`r_fg?%&Z|ta zb;zTojKx$)McObkruJzSh&w04h>04suH;c1c03^Ye?a$1=nZdOjGz0P8fT&2I|I?3 zCeIXHH+!DAeR*(N4u}fwc}$!jj}f92g)&+x2g45c2}nQ!Y9C~egrT$JeO|JWG^$8) zU&^~X7I;kamL7Au^W}q5B!>ZP6`1Knikn z{Nm^je%{H$rUom8w%Zt&XQKx^sH4cqCEXM^qO$ICOdF}z=T2+I#YG152 zNW_#MonutB)TVX3rxA?tsCkqsgVtIE^P?zXB!MPbBn@lenOGUzY0rk8dt3piuX59M zbEHDvz?&xJ7NK(qX0HhFIt%=_%GY0G&mp5xfsSEm&D^;0)oXFtkcZ08SueF5loA6v7*Hx_(4|ixytFV0 zkY)SyS+DjEJzUXGDob_EFto}}v-OZx!&su{K72(}&{W!^Pa)+l!G6tFU!o zbDh?6ee>Qx#mJvO87futadE5z5VDuTtW_I)S5E(swqFw)9?xQYO@?jQNN^46N}-Y6 zovSu~cgo|6T3NC%J}<(>MRzGCodcr8Fz(oRA~$9V@Fl6P}a>Jd2L&Gn{!o7DP>kG0(S%HYX& z;ROIbR5a1vOqSjM5^gSu+rhNjNH@6Xx}GQOIvSBg3B!gI5v|?Q&%X*odG;$y-la_o z`|m1v5|2Sk5BM?|D?)*eWmZ5>&^DK^k~-^DbfS@fk(}NC5t-!c7`JSFh&s7`UAh19HB2E z45AZxEG;v?gASd@8N7|h4Ebgpc?-;+p0<++>hza2gTIH^$r{b~l23d`$C$EvB)1gW zoMbsT+nkDizGc1lIsZTJ{(nm$YgDx{skDT-p%PNB?#=WlV(LRh)UehMmr*K9uJ z4}d*0zRWPw`S8`r3(q%&I=*)e_Ng zd0LDgJ;Imzl%mr>034&^fp`MfQzK;F_?Jc_dLwXKV^Es^-coDiu~X~y zUHf)@VkhbEMzuc85@F|KkQpq6IRigWTm#*x_cO`vkI?^QKe23-iO|6c>%&iexiabgM09J4yD(?T<@5 zj^S&@-egBHItGQU>c*parZ6>%ae|f${8Er124@Ja47g*#E2SS(gsG_Oveb+|?hgn6 zdK8Ky?L6v+y|#e{g6I+v40K?FAlZn@6@^VOy;Dck$HcCNA7>5r#pdGK^(XsxJ~gnd zQ{^zpREzXk2?+t;3vm*7;QH?xTqM7noEi(9padI2X7ZL*hFJkn6 zR>C%E`fr0AGmN{g_-~akmuLi4cJerbq||;WS-LpRLZL#FZ?%16{CfsI3# zarNKrE0lqEn$-kU#2;kOIO;@u9~uTXGG>)W$~(G^wfQoSZucJ%@Y2PwL`-KB;T;e+ zXmW-I$CJd@ODYG1TeC0W4Uurw?3O#CH-c^*-2zKn_h;EDwHe;7rbHc z;oyIXX4=tkW>M-&eGX3Nml)k%hF9Q!93fRnLBM`->k)^S_Fvrme5pPfS1hf5b3yxf zXxx9Lb6{2rJ=D(BQ~BA(avWvdQq5xtOVOV6k7pZL3lCbUMIo7ok6d@s}q*7>>1={#J~bQRM;0Wj6* zo_t5!Lq;mLQB-1|RZSlx&B`I?1(Xwll6u;cX5?73(Mzzz^W;|Jzo$r}mB?dz*cU-7 zGpe#PH%g$oY2Tv(!Lq+DaF?--dn67WI@AaDVK#qOn^k6!cEj+2<_Y7Lfw%ALVF_h; z5dI#*{~mC5huz)pC!^KKyP!*y?bH>@{+%TNH$5#V?}3s`))Rqgfu z%YKV|=D-q4tPT@(^|u-aN4atcY`Uew)tF4kLrPenjVC6V-8RSb(94EuTwS z?CT44+3upO3@O0=t_4p4d7qyob6^lS=cIaGo#*1>G6xGfx$lZ96>ww-h^C`D!+qKEJ_br$Hr8Tcrw$sBUSevfX)i&3qoZ`iGX4 z${k?|#ZwSL4lc(9svc)~$yXT9Hk6%(IE%=W0rBxL{@WfK$bo)+1K40zThbRAfjVP* z@&1(%HXay`@gPgYRE1GFY#_2DKn9ga1Mdqdq-{-_iIw1%u}yk}{GzJ*L8rduW|gh? z3~Zs$=q!mB1W+t0@m3* zl|bB80C}JL0ik86_0jo1zk89mN zmpKGZ<=+q#@R7`3e*Xz+bvgda1IKH^gjnppTL2pea*8wu#?sK5AI8^n92tf8`~O)# z|0}gg?>CUf?DGoBlQ)5=;tA{Fc{+>W*FZuNFEuiJ^Z*N7lqn&mQS`A6(bw|nnozrA zd7y34so+_{984BWtgKwY*SAIh+|tWmbDH-d+D-`{p2u5IvE>QTQ~@G%?-O8HunUQC zTp$P(H85iK7T3o1u6$e)oXgnU1(VfNE?}p(Y11n?(kXAO=x-p z-{yYCm3nIW%2sSpEU3^r+K+tUPdR)!4aMT>kt?B=okQVCAm{A9G5}?0D%DS*mp|V} z|B8Nk4?*HU1(=k)X29UMNeL1Z_5W}I6z>B7tjABG>E}kM{pNSCI(MZvX$s%6<4qC; z)o9#J*eK30Ylx95nXWMS%K^wVFbVwQbJBRBL*j#ePp`b0te=_m zqQDj110u88Y}g^@zH?KLQzp@9XBn&QJ!5 zp>seu{bE7ZOAp0nFaH5;kO#GV^A7D9tr&uXRhh&4pZlmlf-p&$X^J8 zGR)4LxvLEJ&C-M~LnxDjb`zz8GlL0nWOTvB`+nuRYb$&MH==##B1-i=c-ZNxZ>~#(dtqnwx2`>-xzx*8+R;G_0=XzrYsHE8Cg*)UxN6)r#@;limD2BiK9FD{<#~as z;b_*avpEejY&JA}kOunY&Pz~{9rXmS{Av-7E)xY{BwO^n1RoZadsPieMGu~p1Ag%Q z6T^W;4O$Iq;OzCNPBnu1YjSmOIAbUQ#}RQVLF4B}%O?k)Ad#?{)9!Bt;hbEveH!~f z73wp5WRfFi65@%+A5tIe9Za7=<^QtfgTd73lig4V_ch2`Vuep;$N`t}-kqD6s~8)N zV3;k82vA!$r;`VF%nJH%TtQB)7BQPJBB>&$%wo49bL(A?Ez{QstdI<;Wkyltl&C~Z z0sLkbrkQrpPU-+^D8`I*;&gB&QrEpK2af$7b?00Bxw+Do{nTQGrjc%W zR}ChvlFbI2NkvEEHJA{p61rw!j`F3iG^l9pX>ql7mff##l_IX%a9ly?g?D8BjHC{w)O<>Pt`A4fJCj6@?L1QV(QD-!fxCIl58$_SP z9La%$sA3NxhSc&w$x}^lSBGO4r2tYH%y8r?krQ(q2kx-*zz7Uy#J-!YH_GT#+ye1` zYT%WLrm9vdjFac5s=JimG$clXxZ5N}2EX^~En8Z4u_f1Q8G^5Hn9CRsjc|x}IZAK1 z5UaxwL>qMpzq;S@c~|5qL-nvzu65n6J;np?A$+VNr)lGA8Hm;p>yAykCP9gQDx65< zq|)MUVYha6&N87X_k;T2`xzLp%eyg6Ad>mb773!ls85tNjJtm`4NjADOMveqA^>8m zx*4`dq4FdrI2b3cER#wUPA5v9Ep6vSy{T}X-;Q9o9iV(-w3Ay+&q1mY;Z2f}Q6sDF z)bu}PCU?w}7-Ow4$@g(Vam1^cnqhQT_X<}W!Mhd)A=H;}%o(r}E2iG+)p z?kHvmV`tS_+)XX-!Ge4KMmysLRWR?HtAq!mKxHfkD)sx?jw=iS-j4sck;wH)e0-Is zV;h6}G+8vFbYr9_2CAM^{fz7$ds3(}1E{tldz<^0zNz$I_UwD}B5C6x8%+o^-&B;= zfrMWCF7agT9%`+fl})j>{QOr&AMJ3xNh~AO`y=mE8Rn8*MXBd@b$M4p@nFf!;4G#{ zqe}jjBsoq~p#lv*c~`Gt8pt4B_f172ffrZ^j3Ng8?2uyDJY|dvP9c%V zX!yv=aBw^z>q6=Hg`p`nYp_i}Eox+I;Oa(5A*Zk_G>vvk5mrULAK}2<&Gl>8ZdUIb z^G4!vM|Y6^0W0?KSBFP#mJXId@mGbpHAqxlc{$r(YS|fGNhZ|GgrvCEyatTN=FGc< z%GpqA8oE9JEk=hgnN8wt$P--bXO{}QCj~U{jFK02jJLo-nAc!(4a(5YZno~pH!D=w zYsT8AY8z$lTJ?~RZJ;U^6Q!i}2wUMq5Ow3DvyI`P;ArUm9{t#P*r@Ej;Jl0=cwGLk zHIr#z>X5btJ<;}gGz}-vP~Mx{L=uBH!22WEHhw9BTaLC6hPq-`j2V&K@x|g@V$CUt zmZ1KH2-(A*e*vB3V2wT<^)h`QB}X6Q@q#U1tWKYk+GEFREmxWQAjJ!OkiQKJ8D*TW z^J^ExE=9cKNZ^kq8WSASk6tSDUF&Ce5D_p3?|iYwIPw8wYwVSxd;74?+U<_S zCBhCG8w_6@pF4psU;r4ML%d$I$2q zWLpBXsK^y>HF9s+hkByVJfDWgnHkQyJuJ)b)Z@1V2?=yDsP;JUan@a18LJgs$9aW!m?bu!8OJ^*IP$6T_YK zPSzh>jtF+&AXeS=(oTJnp%ZMqrh^h#H3F#)YbZg)S>F9tB&<<{U!GmNzZ*|cg9+(2 z_HYqF*O`US-%M>;e3>pk#xJ{dks=%ekEx&<_j^b@ov(LL*qsa{FczD(_J9LA$^tvL_a#SkcXv0Er6A$H3q(z4fuu7A1s+K4VA*c>GiB1; zc-o6gg!8_}{O+k-%I_Sofgdj9y!%~T?UTnbdyA$)C`!bh#;+n1M{wlws;dISJC|3X zEahO!oWDQ<+k;y8ogOep|5c471$(zwR^v5#{pfM0<*LOs77Y4o_eF zeu7%t?_Xa*3ERum3{9U4;B^JU$kycCBc1CI#KS%+wVTKKa{2`%-xo}I5XaoF=O zK$><%f%Ql?wF2@7^ZDW0k68wG9jw1UoV*6Yx(SB7 zJlB%A55maP#p%8QCpy4`KhKxh=Or^<8vFPTZ2?6XYDVc7(8s=bGYfsSC$zl3{f?#V ziYu<~Wj;JOI;{+206e_yxBxDadLpWZ8kJP~(*)pBN?yuct8Gs)yxe_iqUYi=BkXPG zuH4DRAFX(64fAL`z7kC`K;2^Y@L`wCsH8UY4bV7#x_gBs+ovVrD}plw&O3^(385{d zz_sLvO82>2?J_gnb^BC89J`3n0prEJCOf#hjavk7L;^>QfU)2^q1uFw8vBm4TK*O? zH4U0#m7op<1qjqr##iZ@6@c}ER~R4}*uVj9km%Q&e-JUM;2lYt5V)HL)A85wm)ZkM z{~z|gGOWt?Sr-cu9oZE9CZVz&(F|?2m_dt9~ppvV7RY z*=mXPU=qRoC+|}K{0Lz8#8E~Q9K9HXHsD5heb{t8@JnDziDsTc3{B{RO+;zpHx)z= zNpIj~{S(|xJF+PkG^c97Trn`Qdzz4B0E~%$>Y}L|Y{bYu1XWl`ueD4+2}oWU0wN!j z68@Jw2EK)?|5cl;#*VV}4C-&hMGYJXV$V61cFajeT|y&ja&m_cc1x_jG+ehxiYG+f z0I6(!=p6dXEPC8k4$>}$kW&px2}8cJvPgKo(PU+)9MshBJ?HrGOewVcxyS*fZlS_2 zI;TIH3{gdJKb;u^_{kB&yiCw>b=YH5MC z7wCQ^_u=1NmIioy`8~&}{W1$HY9_s>e9#iu|M){UY`RcIOE6py>CUYpWs^651~>;o z3VeZxXx>|t3VeD;1oJ|NW_}ozyARu9LsMfQLhc4~DNHPLKl-6xe&;J=t;JDah~7U$ zUnu^8__Duu1tlWvpgq7e`a!yn$@IDVV^L92V}N9#QNaYzrKi_!9yY0oq1iiuT=j`| z93PKR@d451kC)lxftg6o=hgzfur&hEkw2;_OvHqfDS~m9zA>U0hMwV2w=vX3l*Yy$#7g7IqS&q7EVkmX8jsBwTh z&z8L6C9pflFmuq|8WOX+l;tlACqP#E>b@bj5;i)RSHJMN4b{VUw5kFQwp<9A;3r_q zOGH1@@D@@5fj`_D{W|+M55945;o~`YSI0cI?{5Ezt*5Z8k`CGhWSFRvqk*fQvjz5J zHOqWaT?{5!vy26q}kXBr_uE#-I0ELP4Oks_QqkGH+M+SVy z_bX+6iHvsK>kL)sPP)VbLCO<*qF93R-1ZtHf6zWz~<$>^A zE0U>mxbjzUfOs3<^kr__uoXw2@gJ?MU2ZVX|5EJ;gsL&g1n_ZPrq7sG3EriY0bs6B!A}s(8W!{bx0a|5WB#L-yn8;^Z z`$va9B9su9kmcM~!~ha7#uw)Ni7ZqDPEONwRPO|Mc**cxfv~LOH?eCR`LctDq6)VW zU%0|ev=;Q9|0B(8>QtdF3gJ5BeoDMJ56|=}6HP!yTm}aKyPWhtYheHd!Q^+x1Yl8+ zxv8B>$1AYwFdXXr!1He`3NY$2Hqm4V2R?7b^qqh>Vv!=aYr!w(7vilka$GiXeo<}s z1dZtGLpl-d36>%-(KZiW_A3k(ubEIZPzs5-Rd?wnDUeUcrxkI>>mv3n@?2BayML*O z{CQzAi<4dtIDs38C&7HJXK)7b7^HH#^W2d0Rm;wG4qT3y(V|n%sm;??Q(#F}(wP1?qeD6kV8QoLUuf6_K!u7-bP zcoqIhf3WG-J^2WH$FI90<>>;MA1yOum#a<9?dAC0=*NUheQ}yU8^(;lnT4XFI2~6p%2&i3;}6YXnxPI;tFhstV`g-r>(@ z$a9s{(I&7Xb46$I;yQt<)a|1l0(-Z%{;*Q3i*m$8s^hCuD?J$Y1T&Xo}lNA zdyjAJ7`YOCl$#KId?7XFfSXbqzBupO)pvYL#EoQ;9!}-Sbvvu7{ULb`&eqYeUWo&%O{XAY59do!z`ut zAG`QZ=@{Z|{5MRI41#}Wio_rmarCqq_9z9IZ+kanasqkC(jeD{q^yB=XaiYfL{nta zGMLzTrZo^G^cM?H#daZ~T`dss$C2*l4Cfu<{PsUk9qc|CC~MMx%_m7^4BZ%j(bLmU-M#-g3T6KeIh{urs-JcC<(E+10g*^O(oi=-X6(AYC#~Wd?Wg9Z6 zHm+1NYsj@`508#cLhEZQL~puqlFGdP?CPZIgyh`G2!FInPQv9z&MuRLt5I0H?89s1>Xx>(c*HGWv zKGU$J@##3%4hT(g#;DayN{7@Ww2!I{G?Vj$K3ygd{(b_4N2oMcI{L+Zz%cPwIk!YGv)tidtJPB z#MsN_0Fs~3ROs%e^(5qYS0SBR3)$S}bmMRW1gSa#m6cm!l_16P>a)|pRM76F!b6(& z7d?f~z;M48vj8136C?=Q@Dc;%&_2DdA9hmTUabFnHd}mu{gu;sq(j-_vQljT#MNZO=wbu`(A2ub$om>d%ORTWgugDtYyb^>0+O$5 zi!#>jc&SVga?p_K3X&7&BpATNBHM^@?Il7q=7=N;9^Yq4D>L5)_gRG{H{Y)HtBVa< z6;9jKNE`W}bq?cG&VK=mXQV%@vY=o`hjb>5cw2jfO8gJuDldr!asU`irxTS}1JH{D zIc~HTcOO$?C73!o7881UjalI~f^^Ssg-6VmQ9Rem7mM^>hcifLi95J>ri^nwF)v3q!tptTya9hV-|mj(0Wx1J+1rISahMiN`y z9OkVVzvWqI1zI2ktr!59;Y$m5+~OyIPTxk*S!ik#QqUE+?V?;wl1yL8BJ|mNUskam&q!GE?@wWnQEupMH(1l>GVKk2%K+ z?LiBkAXItLY5|xhq9KH6cHf^69F9hCp!as8bE;{rdYteG@Te{3o2}kFp!-!NM22l* zqd9^-;7!M{Mxr^6fx(KQt|V{JBZhDZp20dzLb^L~(Cv|PjrzG3^u~ZPw;j@~nF#BO z7d8T4$Z5UTNv)boGj=pyCRz%@x;jIdg1D8rf*(_h-qV=eGei@B^1(hwtkhhPf6#U? ziDb9T(NBFJusu^1B8}hYJELoVcbzZtS*;Euj8Q+y5p&7#xevd82Dtd>ck6YiC2|d8 z#GHd9cU9sg$sS1ETGEao#7ND(pixz8#mi;Bh9?7?D0+4rdD%R4P&>4N zTNI(+B{GHV@5M>jYUVQzk&1mRfWT|SCTx&P)&@$zM=#cS7R-vY^CcGu+GI}+p$^;9vev_h`jx1alRzyIZkZZjAF zrl6nW4VZ=e%(4b#*aJAw=qyCCl@bFlyN7S);>EpiOsG$3Y}~{+8z7g|*)lFa4dpcE z=9o2PyG(xM2DOhaKfrW6f$NroEVD*YTSLkkN1nTJ5hzEMl;=<3ZU$I>By8>Rm2NlTaN+fZetQ;eH4_NZ0;4qa|psj9>2)%QYKMKBzCk$69JyqKq=8Q zVp0f=6;g0KkI41Ej#d_J%tf7%ln4F$pdDs*O!gk6H;fYIsYI@sqwKf%HMn>`fwg@h zP?i`+c-C0yQE~(U0{g&WN-1K(Yyhj*zxRlU&{ys#92AxZ@nsn!jOa{Hwb4$`QHro{ zu)Ttg4su+_4&NHWk0TsSN&zX7*HrpLE=Gz5&iNPp)&TUGIny;ZM1b&?U;jGU8ZZ4L z!Y9X#N9IehOa7HS*MlfX3nPY_Y$gY^om@xLvrY`6C9$RYDxRO_yS+TrgY>FwT&?L_ z^=diDB6R4nbtsR|xa|1`QDE_649fCaUzJg&z%MjqemCQQHpa?dZ6La&KDji8W51^_ ziuwUFJiuhX5hGW}&9`wuRqRyoBnz1~^S!T+uUzM2&0w`8GkX(ofpgTuK~SG%o3X%Y3d-!o*HMRG{K zGKn2+NE!yBbIUyeyb*|{f@o2eitO?Q0=0R`j8V{r8-tOH5|OvZlj6k)=aF*>5*;ym z<9E6vi#6q^4@#5ZxcZ}%!~5Lp=h&YFw9$juhOR>BI> ztqA30%3*~pt7qppH6oRkCAj)ZzcfGqOE&K{+)O?VL><~kWxgy~?}E+vUMOiB?MGHQvz)(^P8q1qc(F?g6S zsHjbBqE3Yh0>fYhUl)@Zf~#YeP{v26b=kUFMa>ov4?XR6UeDXew+X%Y$}yqb3xAX^ z*^ly-Le(0tCQ=4wQm}F{%?7k)KOxNDORVXS$M)PF=dy1A84h$8`qygFt<1nOv=aW{ zynX}$1VhsOGx}r{@c~PCTRkGI&lhQe5s9!PA(#)%z)gw!tue9 z36}As0GAhf&wYSm3t&1Fd^Ywvg8D5!X6OvfBU6jybPa=-F#M;eyY>p{bC#2c;PjPGlzb~ zQKcFez@#;^0sS;y3eA@U9Mr!+R$^q?_1ueWgrr02v@|h zu_1l4^JDsI$Dv$iH6WL$a-I~a@goa#r(}KqD~6AA0IeICbrW^D{|n`FihPR91TLfm z%1a-s@fX#$X?jsWZUB#*u%>4#a3Gh0jP_?DRZ%*w{zw(lsaun%KfS=s z&bLZXOYSd(Ie?nda?^&2HR&4hD)M++$fI5=Q+I{cZ!l^t_~JA4JoiC6lB^1$Ah6bp zMftO#b&C?_NyAAQ`Eyxfv~*em_?h+?nv>rbe0)hR!>^JAV;zq$Q8zn0{HUU4cwfbE^C#@6dDS zn@@n_Zx%{_uKS94gxq6t*0e$jS$X#2U+5uU^0Wkbx!lZ{mOXJ2D~K&Rj_qqA14 zZcSoF58$tk&&og>4Ktm$$+2T$mU0}s+!q6af~cZ?F3XeY)F#Ga1gXVmme1VGl`9w} zqq!TV5Cu?XQ{z#PW#%ODsYET37_lk;fhV5pSYFRZVZ)xX<#NA;Qs$ZcP{YP21(ZG4 zetw@=Eg}L%L=9KyWAFoiGCa$EVw$OuwrGOzi|5;!gFItSGlF%ytD8 z%6$&P`~nPp2mi!Sv1>5Ri#Okie?+F4>PF_aB4{|m-5H(kDW`UjSVX4R_2rE-8+7wJ=!8;ky5L9jW9p|1a$b?2ey$hijCE#4)o7!W%V^OHj}VUy z-HOL7rI=$@s@CG$f9q$|ZtGGMji5)4&AD;n9#wLwShjr29NOFG#GMzs7cb9`;SR*{ zVqjG?9WH-laqc}SG)}cRd)4^SLrj?^jn0t_@yZ2MT6uGrv~a*#qGG4nn;ZK}cX6;8 zdpuh$I=ehq7nu$hH#;tm4S1!!KSMmdNhhYOh~>l69#Jj~b$lL&MjT~NWag&IT-=*8ppP{Rd4z?aZv7_ z>GE_`PCF2qJlmMxEy9kQ;@S+o4F) z=q7&k8;z1C`)=+#lz$?ECz(b?83Y&F%H)+;x6or(xH)DK5xd6O{FjONtwM(o{4K^1 z#JS{-Ag$p|nAqRnhe%>#;F4P;2D17P$JGylmIHP4?xo_rl#}etLjBl-|TT4g?8=-t~Jed0VJDK@X`E zDf(S0g2{pg;o8ND8@}L98}9vta>Xfaa!4Jc{%H9AEy6o5#`%zg42U49<^Qbi{AY#N z6vfOUs-o%;{4QV8Cg4a+0Ly&sz#A08Ly?T)V{fw`@6N;9LH7>ZjC;Gtq4~{K(WGfF zhpw$JxA|P^BTJ#Z3c6nMw=}Zq41AZTvfzsn4+!wRMopfLB;?HUv;$d;H4?`5AL{v@ zi@JVj!r`wJs1}m8{`ZvOBXz({iS45SUncWIAx$H*Zg$eS<{>d2NCLb@l=KZxf8I)m zK8mekPz3%pc#uf>-*CYH3{m`hMF*7TA<(mJdMj|aoqjA0G$0zflAfy$(b3Vo%GedN zTH8eI?Es=A*zpfHzs`U-Ht=;r(PsM^Sy12J)-p(@JGn^A+vs!RTL?WczGL| zmP0`8Do}Z|*&Z;RDcQaB=^q8$C|x9*NnkO=xTQXG^303bQjf~<6sY*Et_odPV#QM- znn}MUb-5$+TsU)3T%AfI=AB++AMzYVy)>% z>Bm0%D@&WYk4s)ImoH~mG@O)-#1l;Ev*k$J4&2h`8>_wMVZlGe2+hAueLDIoWfwAK zFRP(AXP8l7sr34o9@>DcgNSu|ICrWnr)Dr7?rKNeT_QS>{0}+rvZWg>L}t#U3YnK2 zN64~@=`bHRLv=IXY-=z&QzbyJ%~85@ei)BXFD8Vx+UcK&Vx~^<=qjWjnoVFz?iRQG+ zsRD)BpW>zpD9$)p6u)6v91wBFY7C%o`b_)!j(ro`1BYEeX>5VWU*fBD2DzLxgg00* zFH+_jRNY#ya=pZw%R%j)Rc=9(AooIb!gK4wW8*TL6c~XmU6np`fh4%}jdvswt(FUy z-I>tHNP=OibA2rPJL_jaUsPd4*YX-pcPMm~vrs;3xgH9lb86~1%$%00s3Zc|$X>62XgE=Y!gi8&C9TBZ_%KtuN~i?u+QP{rc2Rkbr?N5z-1C4>uwe z>{u)ejVvwzamr)D#2L>U3LJP}xP$y#FEslbw#4erG<0(t+)jkc*v9CF1obe!SFMcsWnGF)4U>P|&G05lYlY3?BK)}i^$Ys zYhx08BW}53OFA|}_Y26#{l-$x;AwdC$KL*GG3R0JEQ6=R=MDwGKi~^0zk;1 zq2TMnXrKgK>0`SK4m6Bs>@lqo?rF;R@dRn-EG+^qD3&yjWxfr#b2$g2Kw>`1|E3kKhN&~8@O<?(TK51?_aak=7AZFN0SGRvysZhyPpzwG{crw)mC8-w(i2EnPe*PT2 zHgCU_Wco@YvZUTS)IHy*6JW@_Z}Xciy5J=2AwA~ut|t1s#IVyhYUt~ z2KVX*^XjikZqKPikA%~zxN3yH{@RsU7u3h%5tM$K4U+;E^0Yd(&E6ZJJD7cTa(-ow z%vr%{Bhsf7FlU!s7*?{R;ZTg*tP~}1%%)AacPyPr$(via^3=fHAho6jSrD!n&SG~c zDC+|n$8+5$id`mbhL7|flldgO^m4&QA&ZI(QPizhe=?eC9kyd;n6cD*5mO_y$tzHr zuT`3Q^#f@cHhvr&BxSx+x&(*$oLyyE$S{h zMD@<91v{5rk0SM{;+eEHTV|1v0eC@`^+?p2CMux*qwuP!$B(yiBC#f@u~G zEX;om{KhY!=$-8Nv9M>N-ia%ffsuI51s`IRUH3Cy(G=Ek2#fzs3ZMV4?z>3beqc-*0D2tNaT8<2Xamaqn zcQbVN=zjfKc9NWd)7S3r*%_LG2+yr~mct#;R6YZ>6V10*Mg&Wj>}EMFQ{ail9&c4q z4ESI%){0v{B&Y@G1==W(8#V9=7_kf&KDm5|2|u@zN5OjUv2XN|`uBFR_;ODl?#3TV z`lL|c14tcRl331zEl?__gl4DQaAOQ(^aw}VcrCMlWwl2v>l)L@JACAJC=%my;(vXE z<=M!0ze^4@D`|G{YhxTUwT@eRifr55lkietjKgsx_P^S2GLonZ&^XmZrpFPG;dRQ^ z+7DEu;z^wSrPZqPkPKhY^jRH;&`1QDo;=rJCYKe{2|0iD=Y+l3C~^&W+ATys6!zAW z2i|cW?>{XgyJH|67-tN|NsW~QeVkcqBJ{$yPQXOun!;n9T03iA1!%m^kROZ=pppy0 zvXwuyQetU8q1)m(f|f;g;3h1$@KR(b51_@ss9L_cWR=XQ47(si@$7h&WLe%L)4EN` z62CHMPgo_}u+n*rFWCe!DEY9b{L0?BRbypg>-RG*qJ;Z6T$k2a;E;3v+#>Yq{?XY3SiJE3D`~J3WdlZpBLbk8v=sK}QEXr$yUI zD(bJ?8LWuPx#r)Ee=|D-xfl{C)shHQ_SY{=L{cHc%^e%Y?Vb{>kb!m&W;+cmQHiBR>2;${#fu)*!D;6(T zh%8woXWvc!KL<~}N|KNHT0D3xjnveWOsa4s-pD_~*fDso(h&mZfYUMq9_M)btr|+9 zxK&>6zr1i$L-Ow_DoJh=spSg1xS4MtjG6Lh^J&A5cSPBEP=v#M-#Yu})4(7rDl;TL?4AfDPCJa}Sd^NGH@`JeA-)bS}_s_L-mK>jx3!WVK$59A1(i*aG zR_;jfI3wm%Z|V9J4wJh{?3e0SNd(>@1Nv}3K7RnO>+~{%_#Fz?TR_e(zJeW=$qYLr zdKgS%ZfNlarQk`ep;%e8+Rps~y@}U}b!|xmp|T`n;8g}5g7enx&r*fc509OhdS&zO zyZqmKYVL*TU`_N@$sLlhCv#=W7O)K#s9XFlkreB^cy{UKHX&RFPoX(I+;+5ZrroWc z*7nfBw8foG66h{K-!6Ea@B(hS=rFyuf_cvB@gxF9yb1KF;@s#+d{|_)*7Gn;AHSx> zqj%NSV=yV8&6+BokrZ||uf^X^$u z{B}yqd{h?}z7YqqFJD|-B$+DuK)<5Ut6i+4*6jFL@Gw6g`|eu}WP0hqFvQ8H3H089 z>)&kji?jO!#H`-e6M6HVFjoSe_qAQ?yw#V4I0LtEwWryb_(@!(S1j`txYcTjko(*L zwiQYh4?pcRSeR_4TL~E8$o)ac(zBpnSQt<5MrHMPgqGaJ<3e4GhA|L(NpoRQrPO)M}{k4(YwKsxC8IVT^%`jxc63DC5(s-Bd({SF&@H_H7T$FqR zt$E$P^w{6=c6~$!!G^l(LL)tdXVcQHKi~+&wW`3eWyI&S%!aez?fF(6g+wCHpQ5@n z*kO;w;45Q1J4^LYqwkr_=2^YKCqc;cZb9tD=JwTl4h5c?4n|ft_d+rRVR&KIHCEb2 zhg=@P1Duj87rAM;hYb(=(k*z~DfZvX%Xh9TiXzYF$ktz#c2U zo?&3hl&r?XS0E@gx4E@Kdi|6LDe_6%AedKfo*JSC3d{T;Q=jbb{ZxPLsJ30!-J=c) z9{&EJV&j-#7`?>vA0Fm+){5ht=A>Bg;{q7qXV0rg#}~E0?0^bN%Df@+vgOWWYeUFl zN>X7;wZE3|T($Tcw@4Ueu#-h~EI?Iw65@t)KXPV=#z3i{*LS`fE+;N%FOghk(QLvV zAD)zyq;_(AQ~-r#dO#z|q47s*qDy2C05#?Y^6m1;=DNdqzH*cL1V|ujL0eO{`z^9| z^@bH@j(jXW8R#u_SihW~-mXt!McnU^)*SC~BX)q)v|}ze66R2J`VbwOf=KGE4(h4pKcxzqazkB65;h^t`Q0BC=8e5T zZ#aW=EVu%@z?*W6+2lB~-a%C7%CpFZN_ z74WlXD+z}NJQOkb?Bu@3*1Q_k=Og0@_P#MZ&7@A;g<9km4ID&x!2@bnxRVKJ&D;aQ zkyV9yp1eG2nllyx)YQ~BUi&}}w-55Jyil@p#Ut-(rG>^NIlh^b$$F=!>{Kadt_d-S zImc1+8>#{BzW{$24+I@CIqEYP278vMKEE42$4Jr#6jD|s`M;cqC>taZypyl(nFdfK zpTme)6*2s_4b_8U$faYg8}H7;*OAS>xu3A!as3H*HQxm!{=(`G^&rr|UfSkNA+Q{T z;-Z|s3{fXrAR8DYde{`V?QgGq0bWK5v=S{X3V?EbW$nRe{0qm7K{GIASJ^ShF@YrG z<##_n_;+pA5SpcrX{~w3La=xPO0@{siAO5T`9VIR#ddk9nC~^F2&#`IK^SSwtG-^AG>J0VmEi1=P`ZojK zpAl8Lq2Xa(9HcN&z_>wqv_z4aE-$%271MUmv?zaivfoOi_6i z+t&c2aHNgNLXq7Kk(e(e5%B~M7{3k{L`|5^Lhzpo2F8;n5^&|_aC`k-S(WLF9ZD7*)_HD7=lrMDd+ z>j`9+D>4(EZ(f0+TAdUxOFsf*Hr5hrr09dd4r5_1-wsV2KTPmv-Af*8lrJ;C1kT$6 zy7uVuYlwZPRlkiulM^+paO@^bM9Sd{tW7G^r|CDJ6>mr7(N?8mer}!rE@_MT>#W>D zE9iz6h$%}!*DiyfuVHoz*$IV>T_&HEPvBzeq1?Xe;`C#Gh^sINNNTOYQ^KEu-VPev z=TB3&Vp*fV>8K9Txy?OFB#78sdp=L%4V0EElei>|Mcm(^%c{l4;U%z;Vfq@W(3iKTO%x{dXJZv+WE7* zX9+V0_39AAyU~J|FHKw_smNCzA&vf@KJfB8>H+w zRjZgM0kp?js(iT>2w#Gag#tUC9MPGPJS}FRlw+Cx8gd6zq~UC8xu2VTO7ZZ+aq&pP zNxNB;5;#|KKvzbkhoqauU2M>OT=BRlaqBZKU~ zkF?(9_#yHF+&A7Nx1`(>FCi^ZuxRA@p2$%%1J*=O#A^0+sGf;Q$>(sJbj;5QU?Aps z``SZj2Ql<8Db2Jp*f_`}PoUDZMEgYeY}cdPN(3_})wXSA21bCC@AILTBO-*k-@a4k z%k?v&$CwRlW+uBC5Yc=y-{d$hZ5_G`>$n~3;5ffWYAM%DwN(1W2!nqK%@*J)AEvNjzS-wjy=C{hri!Sx=G!)_ebiv^@s z#_fuC?9pAtn9GFL913_?WuFks(y@MWBL094w@MW=MUu7Ya~htFNKD)z z$T1kJqn*(Jud5G%#PGqM=_5C? zc%NyY_BIUv5UOkoUol$=tOOXeP98)5D7j7f+c*;J37GM8FA@lhGy-|B1lEN~R^ku@(;rRGG!Y$LLL3pG&Lg(?ru~##*IDmQX8dr;R$FSfMm9S48RB~&tVDqxD=?(cVH}*v z?T4g zNC~FON;qLy#$xz-&p?@Eob<0TMeTr1Z+T~;@Q8~t@52318zU_KvC$aS7Ay=B);4mh zsc{;7mK4Nn0r=wW*fP!G?^vNFB$w>rM(~JAbXpU~nP2x?N2xbX5ST0y-C7f13wHb> z=62|9xq}T-nep%BSs?)xTf;froRAQ*)(e~4 z#CW&@*VKn);|P#!|NaoyptU+KyTL{>;p(@5<2kEqu;qV!XBc^Vj2!uC)w0LUNbuv+ z5K!NT3qh-|PQ&a4#d_W1sP_E)I*Bh6JQ~;xo@SI+UNiWv5@Os8C_*vrmY{x-wW|07 zoR$I%SaU%eVG`d@82(}J7^<0N?{mm$4aPI~v2Tp43ox`E6X3OV9TSc{O@9qmNH7S5{J@v0lw#>SC;EZx4V( zQ`vKb!+fI!rw$W00r__KU^*=@Ixl;ExvoXca!oQDb-}d z*)rpPiZ@%0PxAQ02>rP=2yxecc@W>O*e3da0?LyY)TNh|3tq!F}))ggZYJ(*< zt^|MSOD*lW1=RDQ(_FeVXq3WXbi=1HCyZ-n1Bmd@C=CHt5e&DVH~V+7C{4Ad$kPL` z+@^JD`mKiW{bM37=1~h@=;{o|JIJ}{RY7pn6<9#yfcs0Q)mxvbsMJ-as`UbSH6{%i zW1K+e0>e_L2VPPbmVX#A4V&_Y7a7{}f!Gsir;##UZ(WiJ$^nY+Vd1S51c%ZS)z%#Z z9pqoEDhaFFK9fkW^kVDR(fOf;B#*GfjIuX@-&eG6xrf`2oBrm%b6y~f`Rtb#I{^_y z@Jr%>7m&xRk|}{SUZkO#r?6hz1EwxMfXk^EVb2Av=!x-!A*UAa(NjJ(IJKCg;{f2* zlbTLmdKI+Ls!{+D8k@95#U<_HndLS6d4Og-AVtWgn(Lhrgn$%rpL$ik#6f7>ZFT1^ zUl;`7?rN%bjTv}01h`N1K2PvlT-&N2fo#MYcFJV{B|T9_F+b-UTKanJRthv@#Y7wq z0&h_2Lq-#I4+ip6;w&|OJ`ygl&!!oaM}=4B8}*uSpWI-?Zv+$|sB!3A>4e^vi?FF4fpQ}h5d1t3~ zlMX=-$UZgQzoX>0_t?(V4X3}CJ@XPE8{eeU-t4bvVB4e~Fd9ZbWyb`xq>H@uwBZ0~ zlC{wq+$QxUwgYneGC!LXUSovw}#P;OMD7n8M_m%|~vpUhJb+=Q^Ukv|^DaLBQD~ojaySp%x4wE`3#6 z5;}nlyxVXCBUAE}1d-TC56FxFG=dcwkStA2l)eGsuDS#x4Wu8STH`_wvqJ4tfGv)da!(lO8=sEX(fU5K{NWHpnO=kRIvbL-*5To-Hqy#^k)I!; z*QUfGOb9@O4<4(=m<%_X?W2rc~Mlb+3tvPh&U!Qcq$5O}}LqCxBP$>FrM z61UQm4>)#!&vDoR{0YEit2Cu9&i9G>#1_y$s{yyT4?4FdYJ>viPz&nY1tG?M#J&xl z7hm8-=ugN+1E4qlc{mrXspgbUSC#_uec~M2`%s za&u<)uWa{*lXGbOUFh5m{4(=KLx{d#>_1Q-o5@ah-cyu{MxqU z)q$i<$a2b54dn>OPz{SFF+q;v&zbJ!lBX_sUs0RGs2&gxD-Kzs)#8nhv9f(tvu~1g z9M-_%z2lmlM)0x#etgzJ)>A|`G($n!s0T^ff(lPEICtu(=g3)ED5~AbMK0j+> zI7-AQW`I}%8g6d(z@*>qBYM_SE3%ng#(xXXp52oc;$W}shJq1#A3k_G*L&AyM5ks8 zDFa9#Od(biGiPq?Qw5P?%Z;d1!m)8*$mJ+$BG!sCE~s_uOP?Jy|D}jf8oVA-siKuF zWej5TAN%`=ICZ|lR}(acjlXh6qFR6qC!1%Qw&;pynq>MkqHWHSM?_GGRtuEy7L#4$ z4O#Sf(ph$!k`QvAJgg|A2}@r-k*w>{4C0qSrZV?-jj-Uqr4uONOb6(9Z7A=t$LB4W zR@)VO3XD|1^HwL$U8uOqU7!$C+W!&mnYaKOe65W0>Mrd?K4#F5!vmNV%iQ*m(PDyi z8ohIYA=3(s5FO5P!W>}lgCE|Beq7!PTkKu>y%{m^IZq=cJKX@P4bd{|F+uS~#6x;f z4G08CtvLaC2MiMhIoRJY|MSB(WCsGm|A#tJr8_?netVTXZfk^@x|a&SYbXJ)(%;5R zzlfX9|JX!ucVBV+U0=QsqkbQk)Ms{T)D_wY^?23xd0q;E6ZM!4+X!ON$->>lfLp$s7?kEwdS9#Ij!}%G$>n@4) z9TG!KD%lghqrPtAmhc%R^ifKcWY zx7YYgonO3gmc45_?$+Wb_=zJ=mto4^L-;s)nx_1~A9WJcaG(qRr7MNb0Mj_*iOTppnUnL|li3@GiPZ=Ghvzireq82&r;^{f;C-xqSLOWXVd6`- zk35Ytd*Z$z8~N~<_GGWNgo`3lqecG9@`a1z>uy!gF7eUe6qEsT;pP(+%5#;k`xJ_G z?)u$$sjRs;TyjS4C!{)t5VGl8K$zZ`5`{ z_TUEX*l?dh%?(GjBk^N_vlJ-rO|i%8hF>%obDcA>#H-weOZuZFbA^g1mq$vPFH7$5 z#f$d6sqs+Pk-YswbF%-w@heuIm8+ozliXzN7RI}#(Uw

^CkWF6Qfx96Sx*5X3Q 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 wo>7ZznklINI-eqG35ZGpDC5KbhqrhHT{lGQc~ Date: Fri, 24 Jun 2022 10:52:57 +1000 Subject: [PATCH 116/133] fix hashgraph SDK version to last stable version 2.15.0. Version 2.16.0 not working as expected. --- package-lock.json | 7881 ++++++++++++++++++++++------- package.json | 7 +- test/unit/did-document.test.ts | 3 +- test/unit/hcs-did-message.test.ts | 21 - 4 files changed, 6167 insertions(+), 1745 deletions(-) diff --git a/package-lock.json b/package-lock.json index e072e9b..2414f08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "^2.8", + "@hashgraph/sdk": "2.15.0", + "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", "moment": "^2.29.1", @@ -50,25 +51,25 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "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==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "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/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -98,12 +99,9 @@ } }, "node_modules/@babel/core/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==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -120,13 +118,13 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" @@ -158,13 +156,13 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dependencies": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "engines": { @@ -183,15 +181,15 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "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-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -204,9 +202,9 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -248,12 +246,9 @@ } }, "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==", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", "engines": { "node": ">=6.9.0" } @@ -271,24 +266,12 @@ } }, "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==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "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==", - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -306,12 +289,12 @@ } }, "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==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -329,18 +312,18 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.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/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" @@ -359,9 +342,9 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "engines": { "node": ">=6.9.0" } @@ -381,27 +364,27 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" @@ -462,12 +445,12 @@ } }, "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==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" }, "engines": { @@ -552,9 +535,9 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -563,12 +546,12 @@ } }, "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==", + "version": "7.17.12", + "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.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -578,14 +561,14 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/plugin-proposal-optional-chaining": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -595,12 +578,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -612,13 +595,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -628,13 +611,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -645,15 +628,16 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", + "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.1", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", "charcodes": "^0.2.0" }, "engines": { @@ -680,12 +664,12 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", - "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", + "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-default-from": "^7.16.7" }, "engines": { @@ -696,12 +680,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -712,12 +696,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -728,12 +712,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -744,12 +728,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -776,16 +760,16 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "peer": true, "dependencies": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -811,12 +795,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -828,13 +812,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -844,14 +828,14 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "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/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -862,13 +846,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=4" @@ -927,12 +911,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -981,12 +965,27 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", + "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1019,12 +1018,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1129,11 +1128,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1143,12 +1142,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1158,13 +1157,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { @@ -1190,12 +1189,12 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1205,17 +1204,17 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", "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-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" }, @@ -1227,12 +1226,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1242,12 +1241,12 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1273,12 +1272,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1304,13 +1303,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", + "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1320,12 +1319,12 @@ } }, "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==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1352,12 +1351,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1382,13 +1381,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1399,14 +1398,14 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", "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/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1417,14 +1416,14 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", "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-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -1436,13 +1435,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1452,12 +1451,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1467,12 +1467,12 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1513,12 +1513,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1558,16 +1558,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1577,12 +1577,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", + "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1607,12 +1607,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "peer": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" @@ -1622,12 +1623,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1637,13 +1638,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", + "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -1681,12 +1682,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { @@ -1712,12 +1713,12 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1727,12 +1728,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1742,14 +1743,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1790,37 +1791,38 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", "peer": true, "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", "@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-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@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-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@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-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@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-import-assertions": "^7.17.12", "@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", @@ -1830,44 +1832,44 @@ "@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-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", "@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-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", "@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-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", "@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-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", "@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-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@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/types": "^7.18.2", "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", + "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "engines": { @@ -1903,9 +1905,9 @@ } }, "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==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "peer": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1939,18 +1941,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "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/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@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", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1970,9 +1972,9 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -1987,16 +1989,181 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "engines": [ + "node >=0.10.0" + ], + "peer": true, + "dependencies": { + "uuid": "^8.0.0" + }, + "optionalDependencies": { + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/@expo/bunyan/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==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/cli": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", + "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.14.0", + "@expo/code-signing-certificates": "^0.0.2", + "@expo/config": "~6.0.23", + "@expo/config-plugins": "~4.1.4", + "@expo/dev-server": "~0.1.110", + "@expo/devcert": "^1.0.0", + "@expo/json-file": "^8.2.35", + "@expo/metro-config": "~0.3.16", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~0.0.52", + "@expo/plist": "^0.0.18", + "@expo/prebuild-config": "~4.0.0", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.1.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "internal-ip": "4.3.0", + "is-root": "^2.1.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "requireg": "^0.2.2", + "resolve-from": "^5.0.0", + "semver": "^6.3.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "uuid": "^3.4.0", + "wrap-ansi": "^7.0.0" + }, + "bin": { + "expo-internal": "build/bin/cli" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", + "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", + "peer": true, + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, "node_modules/@expo/config": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", - "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", + "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", "peer": true, "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.0.6", - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", @@ -2007,19 +2174,19 @@ } }, "node_modules/@expo/config-plugins": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", - "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", + "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", "peer": true, "dependencies": { - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", - "@expo/plist": "0.0.15", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", - "fs-extra": "9.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", @@ -2030,9 +2197,9 @@ } }, "node_modules/@expo/config-plugins/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": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2045,64 +2212,485 @@ } }, "node_modules/@expo/config-types": { - "version": "43.0.1", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", - "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "version": "45.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", + "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", "peer": true }, - "node_modules/@expo/json-file": { - "version": "8.2.33", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", - "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "node_modules/@expo/dev-server": { + "version": "0.1.113", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", + "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", "peer": true, "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "0.3.18", + "@expo/osascript": "2.0.33", + "body-parser": "1.19.0", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" } }, - "node_modules/@expo/metro-config": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", - "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "node_modules/@expo/dev-server/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "peer": true, "dependencies": { - "@expo/config": "6.0.6", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "getenv": "^1.0.0", - "sucrase": "^3.20.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@expo/plist": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", - "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "node_modules/@expo/dev-server/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "peer": true, "dependencies": { - "@xmldom/xmldom": "~0.7.0", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@expo/vector-icons": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", - "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "node_modules/@expo/dev-server/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "peer": true, - "dependencies": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" - } + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/dev-server/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/devcert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", + "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", + "peer": true, + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^1.10.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", + "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "peer": true, + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "peer": true, + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "peer": true, + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.2.36", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", + "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", + "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", + "peer": true, + "dependencies": { + "@expo/config": "6.0.24", + "@expo/json-file": "8.2.36", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "getenv": "^1.0.0", + "resolve-from": "^5.0.0", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", + "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", + "peer": true, + "dependencies": { + "@expo/json-file": "8.2.36", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "npm-package-arg": "^7.0.0", + "rimraf": "^3.0.2", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "peer": true + }, + "node_modules/@expo/plist": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", + "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", + "peer": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.0", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", + "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "peer": true, + "dependencies": { + "@expo/config": "6.0.24", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/image-utils": "0.3.20", + "@expo/json-file": "8.2.36", + "debug": "^4.3.1", + "expo-modules-autolinking": "0.8.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "xml2js": "0.4.23" + } + }, + "node_modules/@expo/prebuild-config/node_modules/expo-modules-autolinking": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", + "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/@expo/prebuild-config/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==", + "peer": 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/@expo/prebuild-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/prebuild-config/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "peer": true, + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/rudder-sdk-node/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==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "peer": true + }, + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/vector-icons": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "peer": true + }, + "node_modules/@expo/xcpretty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", + "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", + "peer": true, + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "peer": true + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peer": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } }, "node_modules/@grpc/grpc-js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", - "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "dependencies": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -2112,14 +2700,14 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.10.0", + "protobufjs": "^6.11.3", "yargs": "^16.2.0" }, "bin": { @@ -2130,15 +2718,13 @@ } }, "node_modules/@hashgraph/cryptography": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", - "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", + "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", "dependencies": { "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "expo-crypto": "^10.1.1", - "expo-random": "^12.1.1", "js-base64": "^3.7.2", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" @@ -2147,14 +2733,17 @@ "node": ">=12.0.0" }, "peerDependencies": { - "expo": "^44.0.5" + "expo": "^45.0.3", + "expo-crypto": "^10.1.2", + "expo-random": "^12.1.2" } }, "node_modules/@hashgraph/proto": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", - "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", + "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", "dependencies": { + "long": "^4.0.0", "protobufjs": "^6.11.2" }, "engines": { @@ -2162,22 +2751,28 @@ } }, "node_modules/@hashgraph/sdk": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", - "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", - "dependencies": { - "@grpc/grpc-js": "^1.5.3", - "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.3", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", + "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "dependencies": { + "@ethersproject/rlp": "^5.6.0", + "@grpc/grpc-js": "^1.6.7", + "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/proto": "2.5.0", + "axios": "^0.27.2", "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "js-base64": "^3.7.2", + "js-logger": "^1.6.1", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" }, "engines": { "node": ">=10.17.0" + }, + "peerDependencies": { + "expo": "^45.0.3" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -2545,6 +3140,19 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", @@ -2553,15 +3161,23 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "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==" }, "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==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2602,10 +3218,60 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "peer": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "peer": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", @@ -2620,12 +3286,12 @@ "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -2634,27 +3300,27 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@react-native/normalize-color": { "version": "2.0.0", @@ -2662,6 +3328,16 @@ "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", "peer": true }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "peer": true, + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -2711,9 +3387,9 @@ } }, "node_modules/@types/babel__core": { - "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==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2792,9 +3468,9 @@ } }, "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { "version": "16.11.26", @@ -2823,9 +3499,35 @@ } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "peer": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "peer": true, + "dependencies": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } }, "node_modules/@xmldom/xmldom": { "version": "0.7.5", @@ -2848,6 +3550,19 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -2903,6 +3618,19 @@ "node": ">= 6.0.0" } }, + "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==", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -2916,7 +3644,6 @@ "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" }, @@ -2952,7 +3679,7 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "peer": true }, "node_modules/anymatch": { @@ -2968,26 +3695,45 @@ "node": ">= 8" } }, + "node_modules/application-config-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", + "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", + "peer": true + }, + "node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "peer": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "peer": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -2998,6 +3744,28 @@ "node": ">= 4.0.0" } }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -3125,9 +3893,9 @@ } }, "node_modules/babel-plugin-react-native-web": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", - "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "version": "0.17.7", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", + "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", "peer": true }, "node_modules/babel-preset-current-node-syntax": { @@ -3154,9 +3922,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", - "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", + "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", "peer": true, "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -3164,7 +3932,7 @@ "@babel/preset-env": "^7.12.9", "babel-plugin-module-resolver": "^4.1.0", "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.64.0" + "metro-react-native-babel-preset": "~0.67.0" } }, "node_modules/babel-preset-jest": { @@ -3188,6 +3956,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base58-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", + "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==", + "engines": { + "node": ">= 8" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3205,7 +3981,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "peer": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } }, "node_modules/big-integer": { "version": "1.6.51", @@ -3244,6 +4033,42 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -3300,9 +4125,9 @@ } }, "node_modules/bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "peer": true, "dependencies": { "big-integer": "1.6.x" @@ -3334,7 +4159,7 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", @@ -3343,25 +4168,30 @@ "dev": true }, "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.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "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" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^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/bs-logger": { @@ -3404,7 +4234,7 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "peer": true }, "node_modules/buffer-from": { @@ -3413,6 +4243,62 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "peer": true + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "peer": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -3487,13 +4373,19 @@ } }, "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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001358", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", + "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "4.1.2", @@ -3528,6 +4420,15 @@ "node": ">=6" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3555,11 +4456,19 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "peer": true, + "engines": { + "node": ">=10" + } + }, "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 + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "node_modules/cjs-module-lexer": { "version": "1.2.2", @@ -3567,6 +4476,15 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -3579,6 +4497,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "peer": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3589,6 +4531,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -3634,7 +4585,6 @@ "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" }, @@ -3642,6 +4592,12 @@ "node": ">= 0.8" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -3657,6 +4613,12 @@ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "peer": true }, + "node_modules/component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", + "peer": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3691,6 +4653,45 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -3699,20 +4700,13 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "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==", + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", + "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", "peer": true, "dependencies": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.4", "semver": "7.0.0" }, "funding": { @@ -3729,6 +4723,15 @@ "semver": "bin/semver.js" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "peer": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3754,6 +4757,15 @@ "semver": "bin/semver" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -3763,7 +4775,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, "engines": { "node": ">=8" } @@ -3792,6 +4803,12 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "peer": true + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -3807,9 +4824,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -3850,7 +4867,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, "engines": { "node": ">=4.0.0" } @@ -3870,33 +4886,158 @@ "node": ">=0.10.0" } }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "peer": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "peer": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "peer": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "peer": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "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/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3907,9 +5048,9 @@ } }, "node_modules/did-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", - "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", + "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" }, "node_modules/diff-sequences": { "version": "27.5.1", @@ -3920,6 +5061,18 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -3959,10 +5112,16 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "peer": true + }, "node_modules/electron-to-chromium": { - "version": "1.4.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", - "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" + "version": "1.4.168", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -3995,24 +5154,38 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "engines": { + "node": ">= 0.8" } }, "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/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "peer": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4039,6 +5212,12 @@ "node": ">=8" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "peer": true + }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -4084,7 +5263,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4110,6 +5288,12 @@ "node": ">=0.10.0" } }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "peer": true + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4217,27 +5401,29 @@ } }, "node_modules/expo": { - "version": "44.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", - "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "version": "45.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", + "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", "peer": true, "dependencies": { "@babel/runtime": "^7.14.0", - "@expo/metro-config": "~0.2.6", - "@expo/vector-icons": "^12.0.4", - "babel-preset-expo": "~9.0.2", + "@expo/cli": "0.1.5", + "@expo/vector-icons": "^13.0.0", + "babel-preset-expo": "~9.1.0", "cross-spawn": "^6.0.5", - "expo-application": "~4.0.2", - "expo-asset": "~8.4.6", - "expo-constants": "~13.0.2", - "expo-file-system": "~13.1.3", - "expo-font": "~10.0.5", - "expo-keep-awake": "~10.0.2", - "expo-modules-autolinking": "0.5.5", - "expo-modules-core": "0.6.5", - "fbemitter": "^2.1.1", + "expo-application": "~4.1.0", + "expo-asset": "~8.5.0", + "expo-constants": "~13.1.1", + "expo-file-system": "~14.0.0", + "expo-font": "~10.1.0", + "expo-keep-awake": "~10.1.1", + "expo-modules-autolinking": "0.9.0", + "expo-modules-core": "0.9.2", + "fbemitter": "^3.0.0", + "getenv": "^1.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", + "node-fetch": "^2.6.7", "pretty-format": "^26.5.2", "uuid": "^3.4.0" }, @@ -4245,38 +5431,38 @@ "expo": "bin/cli.js" }, "optionalDependencies": { - "expo-error-recovery": "~3.0.5" + "expo-error-recovery": "~3.1.0" } }, "node_modules/expo-application": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", - "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", + "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-asset": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", - "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", + "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", "peer": true, "dependencies": { "blueimp-md5": "^2.10.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" + "url-parse": "^1.5.9" } }, "node_modules/expo-constants": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", - "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", + "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", "peer": true, "dependencies": { - "@expo/config": "^6.0.6", + "@expo/config": "^6.0.14", "uuid": "^3.3.2" }, "peerDependencies": { @@ -4284,17 +5470,18 @@ } }, "node_modules/expo-crypto": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", - "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", + "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", + "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-error-recovery": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", - "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", + "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", "optional": true, "peer": true, "peerDependencies": { @@ -4302,12 +5489,12 @@ } }, "node_modules/expo-file-system": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", - "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", + "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", "peer": true, "dependencies": { - "@expo/config-plugins": "^4.0.2", + "@expo/config-plugins": "^4.0.14", "uuid": "^3.4.0" }, "peerDependencies": { @@ -4315,9 +5502,9 @@ } }, "node_modules/expo-font": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", - "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", + "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", "peer": true, "dependencies": { "fontfaceobserver": "^2.1.0" @@ -4327,18 +5514,18 @@ } }, "node_modules/expo-keep-awake": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", - "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", + "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-modules-autolinking": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", - "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", + "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", "peer": true, "dependencies": { "chalk": "^4.1.0", @@ -4366,6 +5553,18 @@ "node": ">=10" } }, + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/expo-modules-autolinking/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -4376,9 +5575,9 @@ } }, "node_modules/expo-modules-core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", - "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", + "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", "peer": true, "dependencies": { "compare-versions": "^3.4.0", @@ -4386,9 +5585,10 @@ } }, "node_modules/expo-random": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", - "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", + "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", + "peer": true, "dependencies": { "base64-js": "^1.3.0" }, @@ -4483,22 +5683,22 @@ } }, "node_modules/fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "peer": true, "dependencies": { - "fbjs": "^0.8.4" + "fbjs": "^3.0.0" } }, "node_modules/fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "peer": true, "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", @@ -4506,6 +5706,18 @@ "ua-parser-js": "^0.7.30" } }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "peer": true + }, + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "peer": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4517,6 +5729,39 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, "node_modules/find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -4533,7 +5778,7 @@ "node_modules/find-babel-config/node_modules/json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", "peer": true, "bin": { "json5": "lib/cli.js" @@ -4564,17 +5809,44 @@ "node": ">=8" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "peer": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", "peer": true }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4584,19 +5856,39 @@ "node": ">= 6" } }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "peer": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -4640,14 +5932,14 @@ } }, "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "peer": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4662,6 +5954,15 @@ "node": ">=8.0.0" } }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -4736,6 +6037,26 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -4771,9 +6092,39 @@ } }, "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==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-tag/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true }, "node_modules/has": { "version": "1.0.3", @@ -4794,10 +6145,22 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "peer": true, "engines": { "node": ">= 0.4" @@ -4827,13 +6190,25 @@ "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -4858,6 +6233,28 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "peer": true + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4895,17 +6292,25 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "peer": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -4948,6 +6353,21 @@ "node": ">=0.8.19" } }, + "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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "peer": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4971,6 +6391,19 @@ "node": ">=10" } }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "peer": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -4980,6 +6413,24 @@ "loose-envify": "^1.0.0" } }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4998,6 +6449,12 @@ "node": ">=8" } }, + "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==", + "peer": true + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -5024,7 +6481,22 @@ "has": "^1.0.3" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -5079,6 +6551,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "peer": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "peer": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -5108,11 +6613,19 @@ "node": ">=8" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "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" } @@ -5123,11 +6636,19 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "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" }, @@ -5141,6 +6662,30 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "peer": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -5152,16 +6697,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "peer": true, - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -5871,11 +7406,28 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "peer": true + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "peer": true + }, "node_modules/js-base64": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "node_modules/js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5885,7 +7437,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -5963,6 +7514,36 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "peer": true, + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "peer": true, + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, "node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -5976,26 +7557,14 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, "optionalDependencies": { "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==", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -6009,7 +7578,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, "engines": { "node": ">=6" } @@ -6071,42 +7639,17 @@ "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._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "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=", - "peer": true - }, - "node_modules/lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "peer": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "peer": true }, "node_modules/lodash.memoize": { @@ -6115,35 +7658,87 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "peer": true + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "peer": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "peer": true + "node_modules/log-symbols/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==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "node_modules/log-symbols/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==", "peer": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "node_modules/log-symbols/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==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/log-symbols/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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==", "peer": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/long": { @@ -6222,6 +7817,17 @@ "tmpl": "1.0.5" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "peer": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/md5-file": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", @@ -6237,6 +7843,27 @@ "node": ">=0.10" } }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "peer": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "peer": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6253,12 +7880,12 @@ } }, "node_modules/metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "version": "0.67.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", + "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", "peer": true, "dependencies": { - "@babel/core": "^7.0.0", + "@babel/core": "^7.14.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", @@ -6271,6 +7898,7 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", "@babel/plugin-syntax-optional-chaining": "^7.0.0", "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", "@babel/plugin-transform-block-scoping": "^7.0.0", "@babel/plugin-transform-classes": "^7.0.0", "@babel/plugin-transform-computed-properties": "^7.0.0", @@ -6303,33 +7931,43 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "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, + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "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, + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -6353,36 +7991,109 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", "engines": { "node": "*" } @@ -6397,6 +8108,51 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -6414,6 +8170,31 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "peer": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "peer": true + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6421,22 +8202,54 @@ "peer": true }, "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "peer": true, "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/node-fetch/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "peer": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 6.13.0" } }, "node_modules/node-int64": { @@ -6446,9 +8259,9 @@ "dev": true }, "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==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "node_modules/nodemon": { "version": "2.0.15", @@ -6551,6 +8364,27 @@ "node": ">=8" } }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6572,6 +8406,12 @@ "node": ">=8" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -6581,77 +8421,243 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "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/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "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/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "peer": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/ora/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "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==", + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "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==", + "node_modules/ora/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==", "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "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" - }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "node_modules/p-cancelable": { @@ -6663,6 +8669,15 @@ "node": ">=6" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6693,6 +8708,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "peer": 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", @@ -6743,12 +8773,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "peer": true, + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "peer": true, + "dependencies": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + } + }, + "node_modules/password-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -6758,7 +8828,7 @@ "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "peer": true, "engines": { "node": ">=4" @@ -6775,7 +8845,7 @@ "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "peer": true, "engines": { "node": ">=4" @@ -6786,6 +8856,15 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6948,9 +9027,9 @@ } }, "node_modules/plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "peer": true, "dependencies": { "base64-js": "^1.5.1", @@ -6963,12 +9042,21 @@ "node_modules/plist/node_modules/xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "peer": true, "engines": { "node": ">=4.0" } }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -6999,6 +9087,18 @@ "node": ">=10.13.0" } }, + "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==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -7025,6 +9125,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -7034,11 +9143,16 @@ "asap": "~2.0.3" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "peer": true + }, "node_modules/prompts": { "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", "sisteransi": "^1.0.5" @@ -7048,9 +9162,9 @@ } }, "node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -7088,7 +9202,6 @@ "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" @@ -7115,6 +9228,24 @@ "node": ">=8" } }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -7141,11 +9272,25 @@ ], "peer": true }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -7159,14 +9304,12 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7222,9 +9365,9 @@ "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==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -7292,12 +9435,18 @@ "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=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "peer": true, "bin": { "jsesc": "bin/jsesc" } }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "peer": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7315,16 +9464,39 @@ "node": ">=0.10.0" } }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "peer": true, + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "peer": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "peer": true }, "node_modules/reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", "peer": true }, "node_modules/resolve": { @@ -7381,6 +9553,40 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7395,7 +9601,6 @@ "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" }, @@ -7434,6 +9639,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true, + "peer": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7489,16 +9701,49 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "peer": true, + "dependencies": { + "type-fest": "^0.12.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "peer": true }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "peer": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -7510,7 +9755,7 @@ "node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "peer": true, "engines": { "node": ">=0.10.0" @@ -7522,21 +9767,32 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "peer": true, "dependencies": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" } }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/slash": { "version": "3.0.0", @@ -7555,14 +9811,6 @@ "node": ">=8.0.0" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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", @@ -7582,11 +9830,34 @@ "node": ">=0.10.0" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "peer": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "peer": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/stack-utils": { "version": "2.0.5", @@ -7600,10 +9871,19 @@ "node": ">=10" } }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stream-buffers": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "peer": true, "engines": { "node": ">= 0.10.0" @@ -7655,6 +9935,15 @@ "node": ">=8" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7676,10 +9965,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "peer": true + }, "node_modules/sucrase": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", - "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", + "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", "peer": true, "dependencies": { "commander": "^4.0.0", @@ -7706,6 +10001,12 @@ "node": ">= 6" } }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "peer": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7721,7 +10022,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -7747,11 +10047,79 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "peer": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -7777,6 +10145,12 @@ "node": ">=8" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -7789,7 +10163,7 @@ "node_modules/thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "peer": true, "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -7804,6 +10178,24 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7838,6 +10230,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -7864,15 +10265,6 @@ "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", @@ -7885,6 +10277,12 @@ "node": ">=8" } }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", + "peer": true + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -7892,9 +10290,9 @@ "peer": true }, "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -7916,7 +10314,6 @@ "@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" }, @@ -7936,13 +10333,10 @@ } }, "node_modules/ts-jest/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==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -7950,6 +10344,12 @@ "node": ">=6" } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "peer": true + }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -7980,7 +10380,6 @@ "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" }, @@ -7988,6 +10387,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -7998,9 +10410,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.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -8075,11 +10487,28 @@ "node": ">=4" } }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "peer": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -8088,12 +10517,45 @@ } }, "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==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "peer": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, "node_modules/update-notifier": { @@ -8139,6 +10601,12 @@ "node": ">=10" } }, + "node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "peer": true + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -8166,6 +10634,15 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -8199,6 +10676,21 @@ "node": ">= 8" } }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "peer": true + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -8234,6 +10726,15 @@ "makeerror": "1.0.12" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -8252,24 +10753,6 @@ "iconv-lite": "0.4.24" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "peer": true - }, "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -8314,6 +10797,12 @@ "node": ">=8" } }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "peer": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -8519,22 +11008,22 @@ } }, "@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==" + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "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/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -8554,12 +11043,9 @@ } }, "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==", - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "semver": { "version": "6.3.0", @@ -8569,13 +11055,13 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { @@ -8598,13 +11084,13 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "dependencies": { @@ -8616,24 +11102,24 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "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-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -8665,12 +11151,9 @@ } }, "@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==", - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" }, "@babel/helper-explode-assignable-expression": { "version": "7.16.7", @@ -8682,21 +11165,12 @@ } }, "@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==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "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==", - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -8708,12 +11182,12 @@ } }, "@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==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-module-imports": { @@ -8725,18 +11199,18 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.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/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-optimise-call-expression": { @@ -8749,9 +11223,9 @@ } }, "@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==" + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -8765,24 +11239,24 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", "peer": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -8825,12 +11299,12 @@ } }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" } }, @@ -8896,72 +11370,73 @@ } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" }, "@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==", + "version": "7.17.12", + "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.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/plugin-proposal-optional-chaining": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", + "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.1", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", "charcodes": "^0.2.0" } }, @@ -8976,52 +11451,52 @@ } }, "@babel/plugin-proposal-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", - "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", + "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-default-from": "^7.16.7" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, @@ -9036,16 +11511,16 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "peer": true, "requires": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.17.12" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -9059,46 +11534,46 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "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/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "peer": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-async-generators": { @@ -9136,12 +11611,12 @@ } }, "@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-dynamic-import": { @@ -9172,12 +11647,21 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", + "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-import-meta": { @@ -9198,12 +11682,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -9272,30 +11756,30 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "peer": true, "requires": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" } }, @@ -9309,46 +11793,46 @@ } }, "@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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", "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-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-dotall-regex": { @@ -9362,12 +11846,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -9381,22 +11865,22 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", + "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" } }, "@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==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-function-name": { @@ -9411,12 +11895,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-member-expression-literals": { @@ -9429,67 +11913,68 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "peer": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", "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/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", "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-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "peer": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "peer": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-object-assign": { @@ -9512,12 +11997,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-property-literals": { @@ -9539,25 +12024,25 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", + "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-react-jsx-source": { @@ -9570,31 +12055,32 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "peer": true, "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", + "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", "peer": true, "requires": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -9619,12 +12105,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, @@ -9638,32 +12124,32 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" } }, "@babel/plugin-transform-unicode-escapes": { @@ -9686,37 +12172,38 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", "peer": true, "requires": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", "@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-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@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-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@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-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@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-import-assertions": "^7.17.12", "@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", @@ -9726,44 +12213,44 @@ "@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-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", "@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-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", "@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-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", "@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-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", "@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-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@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/types": "^7.18.2", "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", + "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "dependencies": { @@ -9789,9 +12276,9 @@ } }, "@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "peer": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -9818,18 +12305,18 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "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/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@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", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -9845,9 +12332,9 @@ } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -9859,16 +12346,141 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "peer": true, + "requires": { + "mv": "~2", + "safe-json-stringify": "~1", + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } + } + }, + "@expo/cli": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", + "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", + "peer": true, + "requires": { + "@babel/runtime": "^7.14.0", + "@expo/code-signing-certificates": "^0.0.2", + "@expo/config": "~6.0.23", + "@expo/config-plugins": "~4.1.4", + "@expo/dev-server": "~0.1.110", + "@expo/devcert": "^1.0.0", + "@expo/json-file": "^8.2.35", + "@expo/metro-config": "~0.3.16", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~0.0.52", + "@expo/plist": "^0.0.18", + "@expo/prebuild-config": "~4.0.0", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.1.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "internal-ip": "4.3.0", + "is-root": "^2.1.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "requireg": "^0.2.2", + "resolve-from": "^5.0.0", + "semver": "^6.3.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "uuid": "^3.4.0", + "wrap-ansi": "^7.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==", + "peer": true + } + } + }, + "@expo/code-signing-certificates": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", + "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", + "peer": true, + "requires": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, "@expo/config": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", - "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", + "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", "peer": true, "requires": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.0.6", - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", @@ -9879,19 +12491,19 @@ } }, "@expo/config-plugins": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", - "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", + "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", "peer": true, "requires": { - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", - "@expo/plist": "0.0.15", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", - "fs-extra": "9.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", @@ -9902,9 +12514,9 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "peer": true, "requires": { "lru-cache": "^6.0.0" @@ -9913,15 +12525,210 @@ } }, "@expo/config-types": { - "version": "43.0.1", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", - "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "version": "45.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", + "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", "peer": true }, + "@expo/dev-server": { + "version": "0.1.113", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", + "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", + "peer": true, + "requires": { + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "0.3.18", + "@expo/osascript": "2.0.33", + "body-parser": "1.19.0", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": 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==", + "peer": true + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true + } + } + }, + "@expo/devcert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", + "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", + "peer": true, + "requires": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^1.10.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@expo/image-utils": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", + "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "peer": true, + "requires": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "peer": true + }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": 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==", + "peer": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "peer": true + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "peer": true, + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "peer": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "peer": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true + } + } + }, "@expo/json-file": { - "version": "8.2.33", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", - "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "version": "8.2.36", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", + "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", "peer": true, "requires": { "@babel/code-frame": "~7.10.4", @@ -9930,22 +12737,61 @@ } }, "@expo/metro-config": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", - "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", + "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", "peer": true, "requires": { - "@expo/config": "6.0.6", + "@expo/config": "6.0.24", + "@expo/json-file": "8.2.36", "chalk": "^4.1.0", "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", "getenv": "^1.0.0", + "resolve-from": "^5.0.0", "sucrase": "^3.20.0" } }, + "@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "peer": true, + "requires": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + } + }, + "@expo/package-manager": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", + "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", + "peer": true, + "requires": { + "@expo/json-file": "8.2.36", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "npm-package-arg": "^7.0.0", + "rimraf": "^3.0.2", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + }, + "dependencies": { + "sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "peer": true + } + } + }, "@expo/plist": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", - "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", + "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", "peer": true, "requires": { "@xmldom/xmldom": "~0.7.0", @@ -9953,75 +12799,211 @@ "xmlbuilder": "^14.0.0" } }, + "@expo/prebuild-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", + "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "peer": true, + "requires": { + "@expo/config": "6.0.24", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/image-utils": "0.3.20", + "@expo/json-file": "8.2.36", + "debug": "^4.3.1", + "expo-modules-autolinking": "0.8.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "xml2js": "0.4.23" + }, + "dependencies": { + "expo-modules-autolinking": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", + "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", + "peer": true, + "requires": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + } + }, + "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==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true + } + } + }, + "@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "peer": true, + "requires": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } + } + }, + "@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "peer": true + }, + "@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.5" + } + }, "@expo/vector-icons": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", - "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "peer": true + }, + "@expo/xcpretty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", + "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", "peer": true, "requires": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "peer": true + }, + "@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peer": true, + "requires": {} + }, "@grpc/grpc-js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", - "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.10.0", + "protobufjs": "^6.11.3", "yargs": "^16.2.0" } }, "@hashgraph/cryptography": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", - "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", + "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", "requires": { "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "expo-crypto": "^10.1.1", - "expo-random": "^12.1.1", "js-base64": "^3.7.2", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" } }, "@hashgraph/proto": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", - "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", + "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", "requires": { + "long": "^4.0.0", "protobufjs": "^6.11.2" } }, "@hashgraph/sdk": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", - "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", - "requires": { - "@grpc/grpc-js": "^1.5.3", - "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.3", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", + "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "requires": { + "@ethersproject/rlp": "^5.6.0", + "@grpc/grpc-js": "^1.6.7", + "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/proto": "2.5.0", + "axios": "^0.27.2", "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "js-base64": "^3.7.2", + "js-logger": "^1.6.1", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" @@ -10318,20 +13300,35 @@ "chalk": "^4.0.0" } }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@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==" }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + }, "@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==" }, "@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==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -10363,10 +13360,49 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "peer": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "peer": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "@protobufjs/base64": { "version": "1.1.2", @@ -10381,12 +13417,12 @@ "@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -10395,27 +13431,27 @@ "@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@react-native/normalize-color": { "version": "2.0.0", @@ -10423,6 +13459,16 @@ "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", "peer": true }, + "@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "peer": true, + "requires": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -10463,9 +13509,9 @@ "dev": true }, "@types/babel__core": { - "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==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -10544,9 +13590,9 @@ } }, "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/node": { "version": "16.11.26", @@ -10575,9 +13621,29 @@ } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "peer": true, + "requires": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + } + }, + "@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "peer": true, + "requires": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + } }, "@xmldom/xmldom": { "version": "0.7.5", @@ -10597,6 +13663,16 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "peer": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -10636,6 +13712,16 @@ "debug": "4" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -10649,7 +13735,6 @@ "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" } @@ -10670,7 +13755,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "peer": true }, "anymatch": { @@ -10683,26 +13768,42 @@ "picomatch": "^2.0.4" } }, + "application-config-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", + "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", + "peer": true + }, + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "peer": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "peer": true + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "peer": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "at-least-node": { "version": "1.0.0", @@ -10710,6 +13811,27 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "peer": true }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -10812,9 +13934,9 @@ } }, "babel-plugin-react-native-web": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", - "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "version": "0.17.7", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", + "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", "peer": true }, "babel-preset-current-node-syntax": { @@ -10838,9 +13960,9 @@ } }, "babel-preset-expo": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", - "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", + "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", "peer": true, "requires": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -10848,7 +13970,7 @@ "@babel/preset-env": "^7.12.9", "babel-plugin-module-resolver": "^4.1.0", "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.64.0" + "metro-react-native-babel-preset": "~0.67.0" } }, "babel-preset-jest": { @@ -10866,10 +13988,25 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base58-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", + "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "peer": true + }, + "better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "peer": true, + "requires": { + "open": "^8.0.4" + } }, "big-integer": { "version": "1.6.51", @@ -10899,6 +14036,41 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "peer": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -10939,9 +14111,9 @@ } }, "bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "peer": true, "requires": { "big-integer": "1.6.x" @@ -10967,7 +14139,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-process-hrtime": { "version": "1.0.0", @@ -10976,15 +14148,14 @@ "dev": true }, "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.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "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" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.0" } }, "bs-logger": { @@ -11024,7 +14195,7 @@ "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "peer": true }, "buffer-from": { @@ -11033,6 +14204,52 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "peer": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "peer": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "peer": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -11088,9 +14305,9 @@ "dev": true }, "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.30001358", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", + "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" }, "chalk": { "version": "4.1.2", @@ -11113,6 +14330,12 @@ "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", "peer": true }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "peer": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -11129,11 +14352,16 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "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 + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "cjs-module-lexer": { "version": "1.2.2", @@ -11141,12 +14369,33 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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==", + "peer": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "peer": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "peer": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -11157,6 +14406,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "peer": true + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -11195,11 +14450,16 @@ "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" } }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -11212,6 +14472,12 @@ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "peer": true }, + "component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", + "peer": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -11245,6 +14511,41 @@ } } }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "peer": true + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -11253,19 +14554,13 @@ "safe-buffer": "~5.1.1" } }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "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==", + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", + "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", "peer": true, "requires": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.4", "semver": "7.0.0" }, "dependencies": { @@ -11277,6 +14572,15 @@ } } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "peer": true, + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -11298,6 +14602,12 @@ } } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "peer": true + }, "crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -11306,8 +14616,7 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "cssom": { "version": "0.4.4", @@ -11332,6 +14641,12 @@ } } }, + "dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "peer": true + }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -11344,9 +14659,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -11375,8 +14690,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.4", @@ -11390,26 +14704,122 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "peer": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "peer": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true + } + } + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "peer": true + }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "peer": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "peer": true, "requires": { - "object-keys": "^1.0.12" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" } }, "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 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "peer": true }, "detect-newline": { "version": "3.1.0", @@ -11418,9 +14828,9 @@ "dev": true }, "did-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", - "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", + "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" }, "diff-sequences": { "version": "27.5.1", @@ -11428,6 +14838,15 @@ "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "peer": true, + "requires": { + "path-type": "^4.0.0" + } + }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -11460,10 +14879,16 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "peer": true + }, "electron-to-chromium": { - "version": "1.4.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", - "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" + "version": "1.4.168", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" }, "elliptic": { "version": "6.5.4", @@ -11490,24 +14915,32 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "peer": true, - "requires": { - "iconv-lite": "^0.6.2" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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" } }, + "env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "peer": true + }, + "eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "peer": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11528,6 +14961,12 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "peer": true + }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -11559,8 +14998,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "5.3.0", @@ -11573,6 +15011,12 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "peer": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -11652,28 +15096,30 @@ } }, "expo": { - "version": "44.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", - "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "version": "45.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", + "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", "peer": true, "requires": { "@babel/runtime": "^7.14.0", - "@expo/metro-config": "~0.2.6", - "@expo/vector-icons": "^12.0.4", - "babel-preset-expo": "~9.0.2", + "@expo/cli": "0.1.5", + "@expo/vector-icons": "^13.0.0", + "babel-preset-expo": "~9.1.0", "cross-spawn": "^6.0.5", - "expo-application": "~4.0.2", - "expo-asset": "~8.4.6", - "expo-constants": "~13.0.2", - "expo-error-recovery": "~3.0.5", - "expo-file-system": "~13.1.3", - "expo-font": "~10.0.5", - "expo-keep-awake": "~10.0.2", - "expo-modules-autolinking": "0.5.5", - "expo-modules-core": "0.6.5", - "fbemitter": "^2.1.1", + "expo-application": "~4.1.0", + "expo-asset": "~8.5.0", + "expo-constants": "~13.1.1", + "expo-error-recovery": "~3.1.0", + "expo-file-system": "~14.0.0", + "expo-font": "~10.1.0", + "expo-keep-awake": "~10.1.1", + "expo-modules-autolinking": "0.9.0", + "expo-modules-core": "0.9.2", + "fbemitter": "^3.0.0", + "getenv": "^1.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", + "node-fetch": "^2.6.7", "pretty-format": "^26.5.2", "uuid": "^3.4.0" }, @@ -11715,79 +15161,80 @@ } }, "expo-application": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", - "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", + "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", "peer": true, "requires": {} }, "expo-asset": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", - "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", + "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", "peer": true, "requires": { "blueimp-md5": "^2.10.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" + "url-parse": "^1.5.9" } }, "expo-constants": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", - "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", + "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", "peer": true, "requires": { - "@expo/config": "^6.0.6", + "@expo/config": "^6.0.14", "uuid": "^3.3.2" } }, "expo-crypto": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", - "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", + "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", + "peer": true, "requires": {} }, "expo-error-recovery": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", - "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", + "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", "optional": true, "peer": true, "requires": {} }, "expo-file-system": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", - "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", + "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", "peer": true, "requires": { - "@expo/config-plugins": "^4.0.2", + "@expo/config-plugins": "^4.0.14", "uuid": "^3.4.0" } }, "expo-font": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", - "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", + "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", "peer": true, "requires": { "fontfaceobserver": "^2.1.0" } }, "expo-keep-awake": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", - "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", + "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", "peer": true, "requires": {} }, "expo-modules-autolinking": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", - "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", + "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", "peer": true, "requires": { "chalk": "^4.1.0", @@ -11809,6 +15256,16 @@ "universalify": "^2.0.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11818,9 +15275,9 @@ } }, "expo-modules-core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", - "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", + "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", "peer": true, "requires": { "compare-versions": "^3.4.0", @@ -11828,9 +15285,10 @@ } }, "expo-random": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", - "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", + "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", + "peer": true, "requires": { "base64-js": "^1.3.0" } @@ -11879,22 +15337,22 @@ } }, "fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "peer": true, "requires": { - "fbjs": "^0.8.4" + "fbjs": "^3.0.0" } }, "fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "peer": true, "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", @@ -11902,6 +15360,18 @@ "ua-parser-js": "^0.7.30" } }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "peer": true + }, + "fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "peer": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -11910,6 +15380,38 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, "find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -11923,7 +15425,7 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", "peer": true } } @@ -11946,33 +15448,60 @@ } } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "peer": true, + "requires": { + "micromatch": "^4.0.2" + } + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, "fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", "peer": true }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, + "freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "peer": true + }, "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "peer": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, + "requires": { + "minipass": "^3.0.0" } }, "fs.realpath": { @@ -12003,14 +15532,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "peer": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-package-type": { @@ -12019,6 +15548,12 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "peer": true + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -12066,6 +15601,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -12097,9 +15646,32 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "peer": true + }, + "graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "peer": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true + } + } }, "has": { "version": "1.0.3", @@ -12114,10 +15686,19 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "peer": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "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==", "peer": true }, "has-yarn": { @@ -12138,13 +15719,22 @@ "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -12166,6 +15756,27 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "peer": true + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -12194,14 +15805,19 @@ "dev": true }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "peer": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "peer": true + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -12229,6 +15845,18 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "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==", + "peer": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "peer": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -12249,6 +15877,16 @@ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "peer": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12258,6 +15896,18 @@ "loose-envify": "^1.0.0" } }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "peer": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "peer": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12273,6 +15923,12 @@ "binary-extensions": "^2.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -12298,6 +15954,12 @@ "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "peer": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -12332,6 +15994,32 @@ "is-path-inside": "^3.0.2" } }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "peer": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "peer": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "peer": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -12349,11 +16037,16 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true + }, "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 + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -12361,11 +16054,16 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "peer": 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 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-typedarray": { "version": "1.0.0", @@ -12373,6 +16071,24 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "peer": true, + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "peer": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -12384,16 +16100,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "peer": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -12951,11 +16657,28 @@ } } }, + "jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "peer": true + }, + "join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "peer": true + }, "js-base64": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12965,7 +16688,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -13023,6 +16745,35 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "peer": true, + "requires": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "dependencies": { + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "peer": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + } + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -13033,21 +16784,12 @@ } }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "peer": 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==", - "peer": true - } + "graceful-fs": "^4.1.6" } }, "keyv": { @@ -13062,8 +16804,7 @@ "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "latest-version": { "version": "5.1.0", @@ -13107,79 +16848,90 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "peer": true - }, - "lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", - "peer": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "peer": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "peer": 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.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "peer": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "peer": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "peer": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "peer": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "chalk": "^2.0.1" + }, + "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==", + "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==", + "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==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "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==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "long": { @@ -13242,6 +16994,17 @@ "tmpl": "1.0.5" } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "peer": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "md5-file": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", @@ -13251,6 +17014,24 @@ "buffer-alloc": "^1.1.0" } }, + "md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "peer": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "peer": true + }, + "memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "peer": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -13264,12 +17045,12 @@ "peer": true }, "metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "version": "0.67.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", + "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", "peer": true, "requires": { - "@babel/core": "^7.0.0", + "@babel/core": "^7.14.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", @@ -13282,6 +17063,7 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", "@babel/plugin-syntax-optional-chaining": "^7.0.0", "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", "@babel/plugin-transform-block-scoping": "^7.0.0", "@babel/plugin-transform-classes": "^7.0.0", "@babel/plugin-transform-computed-properties": "^7.0.0", @@ -13311,27 +17093,31 @@ } }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": 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 + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "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, + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -13354,7 +17140,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", @@ -13365,14 +17151,69 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "requires": { + "minimist": "^1.2.6" + } }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" }, "ms": { "version": "2.1.2", @@ -13384,6 +17225,44 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "peer": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "peer": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "peer": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -13401,6 +17280,25 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "peer": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "peer": true + }, + "nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "peer": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -13408,23 +17306,44 @@ "peer": true }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "peer": true, "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "whatwg-url": "^5.0.0" }, "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "peer": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "peer": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -13432,9 +17351,9 @@ "dev": true }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "nodemon": { "version": "2.0.15", @@ -13507,6 +17426,26 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, + "npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "requires": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13524,6 +17463,12 @@ } } }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -13533,7 +17478,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "peer": true }, "object-keys": { @@ -13554,6 +17499,15 @@ "object-keys": "^1.1.1" } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -13571,18 +17525,138 @@ "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "peer": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true + }, + "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==", + "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==", + "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==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "peer": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "peer": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-cancelable": { @@ -13591,6 +17665,12 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13609,6 +17689,15 @@ "p-limit": "^3.0.2" } }, + "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==", + "peer": 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", @@ -13646,12 +17735,45 @@ "lines-and-columns": "^1.1.6" } }, + "parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "peer": true, + "requires": { + "pngjs": "^3.3.0" + } + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "peer": true + }, + "password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "peer": true, + "requires": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "peer": true + } + } + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -13661,7 +17783,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "peer": true }, "path-is-absolute": { @@ -13672,7 +17794,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "peer": true }, "path-parse": { @@ -13680,6 +17802,12 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "peer": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -13798,9 +17926,9 @@ } }, "plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "peer": true, "requires": { "base64-js": "^1.5.1", @@ -13810,11 +17938,17 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "peer": true } } }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "peer": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -13833,6 +17967,12 @@ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, + "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==", + "peer": true + }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13852,6 +17992,12 @@ } } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -13861,20 +18007,25 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "peer": true + }, "prompts": { "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", "sisteransi": "^1.0.5" } }, "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -13907,7 +18058,6 @@ "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" @@ -13928,6 +18078,18 @@ "escape-goat": "^2.0.0" } }, + "qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "peer": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "peer": true + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -13940,11 +18102,22 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "peer": true }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13955,14 +18128,12 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -14008,9 +18179,9 @@ "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==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "peer": true, "requires": { "@babel/runtime": "^7.8.4" @@ -14066,11 +18237,17 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "peer": true } } }, + "remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "peer": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -14082,16 +18259,38 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "peer": true }, + "requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "peer": true, + "requires": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "peer": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "peer": true }, "reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", "peer": true }, "resolve": { @@ -14133,6 +18332,33 @@ "lowercase-keys": "^1.0.0" } }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -14143,7 +18369,6 @@ "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" } @@ -14162,6 +18387,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true, + "peer": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -14204,16 +18436,39 @@ } } }, + "serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "peer": true, + "requires": { + "type-fest": "^0.12.0" + }, + "dependencies": { + "type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "peer": true + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "peer": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "peer": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "peer": true, "requires": { "shebang-regex": "^1.0.0" @@ -14222,7 +18477,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "peer": true }, "signal-exit": { @@ -14231,21 +18486,31 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "peer": true, "requires": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + }, + "dependencies": { + "bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "peer": true, + "requires": { + "big-integer": "1.6.x" + } + } } }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "3.0.0", @@ -14258,11 +18523,6 @@ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", "peer": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -14281,11 +18541,28 @@ } } }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "peer": true, + "requires": { + "through": "2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "peer": true, + "requires": { + "minipass": "^3.1.1" + } }, "stack-utils": { "version": "2.0.5", @@ -14296,10 +18573,16 @@ "escape-string-regexp": "^2.0.0" } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "peer": true + }, "stream-buffers": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "peer": true }, "string-length": { @@ -14336,6 +18619,12 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -14348,10 +18637,16 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "peer": true + }, "sucrase": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", - "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", + "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", "peer": true, "requires": { "commander": "^4.0.0", @@ -14370,6 +18665,12 @@ } } }, + "sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "peer": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14382,7 +18683,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -14399,11 +18699,59 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "peer": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true + }, + "tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "peer": true, + "requires": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -14420,6 +18768,12 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -14432,7 +18786,7 @@ "thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "peer": true, "requires": { "thenify": ">= 3.1.0 < 4" @@ -14444,6 +18798,21 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14469,6 +18838,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "peer": true + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -14487,14 +18862,6 @@ "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": { @@ -14506,6 +18873,12 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", + "peer": true + }, "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -14513,9 +18886,9 @@ "peer": true }, "ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", "dev": true, "requires": { "bs-logger": "0.x", @@ -14529,16 +18902,19 @@ }, "dependencies": { "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, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true } } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "peer": true + }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -14562,8 +18938,17 @@ "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 + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "peer": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } }, "typedarray-to-buffer": { "version": "3.1.5", @@ -14575,9 +18960,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "ua-parser-js": { @@ -14620,21 +19005,52 @@ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "peer": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "peer": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "peer": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "requires": { "crypto-random-string": "^2.0.0" } }, "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "peer": true }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -14668,6 +19084,12 @@ } } }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "peer": true + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -14692,6 +19114,12 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "peer": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -14717,6 +19145,21 @@ } } }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "peer": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "requires": { + "builtins": "^1.0.3" + } + }, "varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -14749,6 +19192,15 @@ "makeerror": "1.0.12" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -14762,25 +19214,8 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "peer": true - }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -14816,6 +19251,12 @@ "string-width": "^4.0.0" } }, + "wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "peer": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 998f689..cada779 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,12 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "^2.8", + "@hashgraph/sdk": "2.15.0", + "base58-js": "^1.0.0", + "did-resolver": "^3.1.5", "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", - "varint": "^6.0.0", - "did-resolver": "^3.1.5" + "varint": "^6.0.0" } } diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index be6f80a..9377a71 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -9,6 +9,7 @@ import { HcsDidCreateVerificationRelationshipEvent, HcsDidDeleteEvent, HcsDidMessage, + HcsDidUpdateDidOwnerEvent, } from "../../dist"; describe("DidDocument", () => { @@ -170,7 +171,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.UPDATE, identifier, - new HcsDidCreateDidOwnerEvent( + new HcsDidUpdateDidOwnerEvent( otherOwnerIdentifier + "#did-root-key", otherOwnerIdentifier, otherOwnerKey.publicKey diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index 3339189..c8172af 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -6,27 +6,6 @@ const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); -const encrypt = (plainText, key) => { - const cipher = crypto.createCipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(plainText, "utf8"), cipher.final()]).toString("base64"); -}; - -const decrypt = (cipherText, key) => { - const cipher = crypto.createDecipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(cipherText, "base64"), cipher.final()]).toString("utf8"); -}; - -exports.encrypt = encrypt; -exports.decrypt = decrypt; - describe("HcsDidMessage", () => { const client = Client.forTestnet(); const privateKey = PrivateKey.generate(); From e7b10eae56acb205bbaf46a2e98e7ec0988b8757 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 24 Jun 2022 11:07:52 +1000 Subject: [PATCH 117/133] updated hashgraph sdk to only have patch release --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2414f08..1b0c006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "2.15.0", + "@hashgraph/sdk": "~2.15.0", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", diff --git a/package.json b/package.json index cada779..3736481 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "2.15.0", + "@hashgraph/sdk": "~2.15.0", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", From dbad75bc9c558b183ccca88716c60a1a011455e2 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 24 Jun 2022 11:08:53 +1000 Subject: [PATCH 118/133] Squashed commit of the following: commit e7b10eae56acb205bbaf46a2e98e7ec0988b8757 Author: Vijay Shiyani Date: Fri Jun 24 11:07:52 2022 +1000 updated hashgraph sdk to only have patch release commit c994c79d9e0a57c51f868577a0120506cd0635c9 Author: Vijay Shiyani Date: Fri Jun 24 10:52:57 2022 +1000 fix hashgraph SDK version to last stable version 2.15.0. Version 2.16.0 not working as expected. --- package-lock.json | 7881 ++++++++++++++++++++++------- package.json | 7 +- test/unit/did-document.test.ts | 3 +- test/unit/hcs-did-message.test.ts | 21 - 4 files changed, 6167 insertions(+), 1745 deletions(-) diff --git a/package-lock.json b/package-lock.json index e072e9b..1b0c006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "^2.8", + "@hashgraph/sdk": "~2.15.0", + "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", "moment": "^2.29.1", @@ -50,25 +51,25 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "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==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "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/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -98,12 +99,9 @@ } }, "node_modules/@babel/core/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==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -120,13 +118,13 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" @@ -158,13 +156,13 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dependencies": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "engines": { @@ -183,15 +181,15 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "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-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -204,9 +202,9 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -248,12 +246,9 @@ } }, "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==", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", "engines": { "node": ">=6.9.0" } @@ -271,24 +266,12 @@ } }, "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==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "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==", - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -306,12 +289,12 @@ } }, "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==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -329,18 +312,18 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.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/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" @@ -359,9 +342,9 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "engines": { "node": ">=6.9.0" } @@ -381,27 +364,27 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" @@ -462,12 +445,12 @@ } }, "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==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" }, "engines": { @@ -552,9 +535,9 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -563,12 +546,12 @@ } }, "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==", + "version": "7.17.12", + "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.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -578,14 +561,14 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/plugin-proposal-optional-chaining": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -595,12 +578,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -612,13 +595,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -628,13 +611,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -645,15 +628,16 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", + "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.1", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", "charcodes": "^0.2.0" }, "engines": { @@ -680,12 +664,12 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", - "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", + "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-default-from": "^7.16.7" }, "engines": { @@ -696,12 +680,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -712,12 +696,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -728,12 +712,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -744,12 +728,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -776,16 +760,16 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "peer": true, "dependencies": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -811,12 +795,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -828,13 +812,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -844,14 +828,14 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "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/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -862,13 +846,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=4" @@ -927,12 +911,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -981,12 +965,27 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", + "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1019,12 +1018,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1129,11 +1128,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1143,12 +1142,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1158,13 +1157,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { @@ -1190,12 +1189,12 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1205,17 +1204,17 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", "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-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" }, @@ -1227,12 +1226,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1242,12 +1241,12 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1273,12 +1272,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1304,13 +1303,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", + "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1320,12 +1319,12 @@ } }, "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==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1352,12 +1351,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1382,13 +1381,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1399,14 +1398,14 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", "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/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1417,14 +1416,14 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", "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-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -1436,13 +1435,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1452,12 +1451,13 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1467,12 +1467,12 @@ } }, "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1513,12 +1513,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1558,16 +1558,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1577,12 +1577,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", + "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1607,12 +1607,13 @@ } }, "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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "peer": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" @@ -1622,12 +1623,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1637,13 +1638,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", + "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -1681,12 +1682,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { @@ -1712,12 +1713,12 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1727,12 +1728,12 @@ } }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1742,14 +1743,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1790,37 +1791,38 @@ } }, "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", "peer": true, "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", "@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-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@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-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@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-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@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-import-assertions": "^7.17.12", "@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", @@ -1830,44 +1832,44 @@ "@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-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", "@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-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", "@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-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", "@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-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", "@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-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@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/types": "^7.18.2", "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", + "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "engines": { @@ -1903,9 +1905,9 @@ } }, "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==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "peer": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1939,18 +1941,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "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/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@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", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1970,9 +1972,9 @@ } }, "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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -1987,16 +1989,181 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "engines": [ + "node >=0.10.0" + ], + "peer": true, + "dependencies": { + "uuid": "^8.0.0" + }, + "optionalDependencies": { + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/@expo/bunyan/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==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/cli": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", + "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.14.0", + "@expo/code-signing-certificates": "^0.0.2", + "@expo/config": "~6.0.23", + "@expo/config-plugins": "~4.1.4", + "@expo/dev-server": "~0.1.110", + "@expo/devcert": "^1.0.0", + "@expo/json-file": "^8.2.35", + "@expo/metro-config": "~0.3.16", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~0.0.52", + "@expo/plist": "^0.0.18", + "@expo/prebuild-config": "~4.0.0", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.1.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "internal-ip": "4.3.0", + "is-root": "^2.1.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "requireg": "^0.2.2", + "resolve-from": "^5.0.0", + "semver": "^6.3.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "uuid": "^3.4.0", + "wrap-ansi": "^7.0.0" + }, + "bin": { + "expo-internal": "build/bin/cli" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", + "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", + "peer": true, + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, "node_modules/@expo/config": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", - "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", + "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", "peer": true, "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.0.6", - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", @@ -2007,19 +2174,19 @@ } }, "node_modules/@expo/config-plugins": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", - "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", + "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", "peer": true, "dependencies": { - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", - "@expo/plist": "0.0.15", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", - "fs-extra": "9.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", @@ -2030,9 +2197,9 @@ } }, "node_modules/@expo/config-plugins/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": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2045,64 +2212,485 @@ } }, "node_modules/@expo/config-types": { - "version": "43.0.1", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", - "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "version": "45.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", + "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", "peer": true }, - "node_modules/@expo/json-file": { - "version": "8.2.33", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", - "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "node_modules/@expo/dev-server": { + "version": "0.1.113", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", + "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", "peer": true, "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "0.3.18", + "@expo/osascript": "2.0.33", + "body-parser": "1.19.0", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" } }, - "node_modules/@expo/metro-config": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", - "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "node_modules/@expo/dev-server/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "peer": true, "dependencies": { - "@expo/config": "6.0.6", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "getenv": "^1.0.0", - "sucrase": "^3.20.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@expo/plist": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", - "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "node_modules/@expo/dev-server/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "peer": true, "dependencies": { - "@xmldom/xmldom": "~0.7.0", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@expo/vector-icons": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", - "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "node_modules/@expo/dev-server/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "peer": true, - "dependencies": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" - } + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/dev-server/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/devcert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", + "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", + "peer": true, + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^1.10.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", + "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "peer": true, + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "peer": true, + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "peer": true, + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.2.36", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", + "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^1.0.1", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", + "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", + "peer": true, + "dependencies": { + "@expo/config": "6.0.24", + "@expo/json-file": "8.2.36", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "getenv": "^1.0.0", + "resolve-from": "^5.0.0", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", + "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", + "peer": true, + "dependencies": { + "@expo/json-file": "8.2.36", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "npm-package-arg": "^7.0.0", + "rimraf": "^3.0.2", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "peer": true + }, + "node_modules/@expo/plist": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", + "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", + "peer": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.0", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", + "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "peer": true, + "dependencies": { + "@expo/config": "6.0.24", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/image-utils": "0.3.20", + "@expo/json-file": "8.2.36", + "debug": "^4.3.1", + "expo-modules-autolinking": "0.8.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "xml2js": "0.4.23" + } + }, + "node_modules/@expo/prebuild-config/node_modules/expo-modules-autolinking": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", + "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/@expo/prebuild-config/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==", + "peer": 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/@expo/prebuild-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/prebuild-config/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "peer": true, + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/rudder-sdk-node/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==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "peer": true + }, + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/vector-icons": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "peer": true + }, + "node_modules/@expo/xcpretty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", + "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", + "peer": true, + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "peer": true + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peer": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } }, "node_modules/@grpc/grpc-js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", - "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "dependencies": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -2112,14 +2700,14 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.10.0", + "protobufjs": "^6.11.3", "yargs": "^16.2.0" }, "bin": { @@ -2130,15 +2718,13 @@ } }, "node_modules/@hashgraph/cryptography": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", - "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", + "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", "dependencies": { "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "expo-crypto": "^10.1.1", - "expo-random": "^12.1.1", "js-base64": "^3.7.2", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" @@ -2147,14 +2733,17 @@ "node": ">=12.0.0" }, "peerDependencies": { - "expo": "^44.0.5" + "expo": "^45.0.3", + "expo-crypto": "^10.1.2", + "expo-random": "^12.1.2" } }, "node_modules/@hashgraph/proto": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", - "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", + "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", "dependencies": { + "long": "^4.0.0", "protobufjs": "^6.11.2" }, "engines": { @@ -2162,22 +2751,28 @@ } }, "node_modules/@hashgraph/sdk": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", - "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", - "dependencies": { - "@grpc/grpc-js": "^1.5.3", - "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.3", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", + "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "dependencies": { + "@ethersproject/rlp": "^5.6.0", + "@grpc/grpc-js": "^1.6.7", + "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/proto": "2.5.0", + "axios": "^0.27.2", "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "js-base64": "^3.7.2", + "js-logger": "^1.6.1", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" }, "engines": { "node": ">=10.17.0" + }, + "peerDependencies": { + "expo": "^45.0.3" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -2545,6 +3140,19 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", @@ -2553,15 +3161,23 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "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==" }, "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==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2602,10 +3218,60 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "peer": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "peer": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", @@ -2620,12 +3286,12 @@ "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -2634,27 +3300,27 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@react-native/normalize-color": { "version": "2.0.0", @@ -2662,6 +3328,16 @@ "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", "peer": true }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "peer": true, + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -2711,9 +3387,9 @@ } }, "node_modules/@types/babel__core": { - "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==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2792,9 +3468,9 @@ } }, "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { "version": "16.11.26", @@ -2823,9 +3499,35 @@ } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "peer": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "peer": true, + "dependencies": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } }, "node_modules/@xmldom/xmldom": { "version": "0.7.5", @@ -2848,6 +3550,19 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -2903,6 +3618,19 @@ "node": ">= 6.0.0" } }, + "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==", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -2916,7 +3644,6 @@ "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" }, @@ -2952,7 +3679,7 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "peer": true }, "node_modules/anymatch": { @@ -2968,26 +3695,45 @@ "node": ">= 8" } }, + "node_modules/application-config-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", + "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", + "peer": true + }, + "node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "peer": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "peer": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -2998,6 +3744,28 @@ "node": ">= 4.0.0" } }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -3125,9 +3893,9 @@ } }, "node_modules/babel-plugin-react-native-web": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", - "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "version": "0.17.7", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", + "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", "peer": true }, "node_modules/babel-preset-current-node-syntax": { @@ -3154,9 +3922,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", - "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", + "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", "peer": true, "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -3164,7 +3932,7 @@ "@babel/preset-env": "^7.12.9", "babel-plugin-module-resolver": "^4.1.0", "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.64.0" + "metro-react-native-babel-preset": "~0.67.0" } }, "node_modules/babel-preset-jest": { @@ -3188,6 +3956,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base58-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", + "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==", + "engines": { + "node": ">= 8" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3205,7 +3981,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "peer": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } }, "node_modules/big-integer": { "version": "1.6.51", @@ -3244,6 +4033,42 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -3300,9 +4125,9 @@ } }, "node_modules/bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "peer": true, "dependencies": { "big-integer": "1.6.x" @@ -3334,7 +4159,7 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", @@ -3343,25 +4168,30 @@ "dev": true }, "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.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "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" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^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/bs-logger": { @@ -3404,7 +4234,7 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "peer": true }, "node_modules/buffer-from": { @@ -3413,6 +4243,62 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "peer": true + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "peer": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -3487,13 +4373,19 @@ } }, "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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001358", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", + "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "4.1.2", @@ -3528,6 +4420,15 @@ "node": ">=6" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3555,11 +4456,19 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "peer": true, + "engines": { + "node": ">=10" + } + }, "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 + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "node_modules/cjs-module-lexer": { "version": "1.2.2", @@ -3567,6 +4476,15 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -3579,6 +4497,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "peer": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3589,6 +4531,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -3634,7 +4585,6 @@ "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" }, @@ -3642,6 +4592,12 @@ "node": ">= 0.8" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -3657,6 +4613,12 @@ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "peer": true }, + "node_modules/component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", + "peer": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3691,6 +4653,45 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -3699,20 +4700,13 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "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==", + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", + "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", "peer": true, "dependencies": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.4", "semver": "7.0.0" }, "funding": { @@ -3729,6 +4723,15 @@ "semver": "bin/semver.js" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "peer": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3754,6 +4757,15 @@ "semver": "bin/semver" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -3763,7 +4775,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, "engines": { "node": ">=8" } @@ -3792,6 +4803,12 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "peer": true + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -3807,9 +4824,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -3850,7 +4867,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, "engines": { "node": ">=4.0.0" } @@ -3870,33 +4886,158 @@ "node": ">=0.10.0" } }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "peer": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "peer": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "peer": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "peer": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "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/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3907,9 +5048,9 @@ } }, "node_modules/did-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", - "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", + "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" }, "node_modules/diff-sequences": { "version": "27.5.1", @@ -3920,6 +5061,18 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -3959,10 +5112,16 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "peer": true + }, "node_modules/electron-to-chromium": { - "version": "1.4.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", - "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" + "version": "1.4.168", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -3995,24 +5154,38 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "engines": { + "node": ">= 0.8" } }, "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/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "peer": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4039,6 +5212,12 @@ "node": ">=8" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "peer": true + }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -4084,7 +5263,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4110,6 +5288,12 @@ "node": ">=0.10.0" } }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "peer": true + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4217,27 +5401,29 @@ } }, "node_modules/expo": { - "version": "44.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", - "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "version": "45.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", + "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", "peer": true, "dependencies": { "@babel/runtime": "^7.14.0", - "@expo/metro-config": "~0.2.6", - "@expo/vector-icons": "^12.0.4", - "babel-preset-expo": "~9.0.2", + "@expo/cli": "0.1.5", + "@expo/vector-icons": "^13.0.0", + "babel-preset-expo": "~9.1.0", "cross-spawn": "^6.0.5", - "expo-application": "~4.0.2", - "expo-asset": "~8.4.6", - "expo-constants": "~13.0.2", - "expo-file-system": "~13.1.3", - "expo-font": "~10.0.5", - "expo-keep-awake": "~10.0.2", - "expo-modules-autolinking": "0.5.5", - "expo-modules-core": "0.6.5", - "fbemitter": "^2.1.1", + "expo-application": "~4.1.0", + "expo-asset": "~8.5.0", + "expo-constants": "~13.1.1", + "expo-file-system": "~14.0.0", + "expo-font": "~10.1.0", + "expo-keep-awake": "~10.1.1", + "expo-modules-autolinking": "0.9.0", + "expo-modules-core": "0.9.2", + "fbemitter": "^3.0.0", + "getenv": "^1.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", + "node-fetch": "^2.6.7", "pretty-format": "^26.5.2", "uuid": "^3.4.0" }, @@ -4245,38 +5431,38 @@ "expo": "bin/cli.js" }, "optionalDependencies": { - "expo-error-recovery": "~3.0.5" + "expo-error-recovery": "~3.1.0" } }, "node_modules/expo-application": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", - "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", + "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-asset": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", - "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", + "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", "peer": true, "dependencies": { "blueimp-md5": "^2.10.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" + "url-parse": "^1.5.9" } }, "node_modules/expo-constants": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", - "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", + "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", "peer": true, "dependencies": { - "@expo/config": "^6.0.6", + "@expo/config": "^6.0.14", "uuid": "^3.3.2" }, "peerDependencies": { @@ -4284,17 +5470,18 @@ } }, "node_modules/expo-crypto": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", - "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", + "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", + "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-error-recovery": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", - "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", + "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", "optional": true, "peer": true, "peerDependencies": { @@ -4302,12 +5489,12 @@ } }, "node_modules/expo-file-system": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", - "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", + "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", "peer": true, "dependencies": { - "@expo/config-plugins": "^4.0.2", + "@expo/config-plugins": "^4.0.14", "uuid": "^3.4.0" }, "peerDependencies": { @@ -4315,9 +5502,9 @@ } }, "node_modules/expo-font": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", - "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", + "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", "peer": true, "dependencies": { "fontfaceobserver": "^2.1.0" @@ -4327,18 +5514,18 @@ } }, "node_modules/expo-keep-awake": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", - "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", + "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", "peer": true, "peerDependencies": { "expo": "*" } }, "node_modules/expo-modules-autolinking": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", - "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", + "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", "peer": true, "dependencies": { "chalk": "^4.1.0", @@ -4366,6 +5553,18 @@ "node": ">=10" } }, + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/expo-modules-autolinking/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -4376,9 +5575,9 @@ } }, "node_modules/expo-modules-core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", - "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", + "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", "peer": true, "dependencies": { "compare-versions": "^3.4.0", @@ -4386,9 +5585,10 @@ } }, "node_modules/expo-random": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", - "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", + "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", + "peer": true, "dependencies": { "base64-js": "^1.3.0" }, @@ -4483,22 +5683,22 @@ } }, "node_modules/fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "peer": true, "dependencies": { - "fbjs": "^0.8.4" + "fbjs": "^3.0.0" } }, "node_modules/fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "peer": true, "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", @@ -4506,6 +5706,18 @@ "ua-parser-js": "^0.7.30" } }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "peer": true + }, + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "peer": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4517,6 +5729,39 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + }, "node_modules/find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -4533,7 +5778,7 @@ "node_modules/find-babel-config/node_modules/json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", "peer": true, "bin": { "json5": "lib/cli.js" @@ -4564,17 +5809,44 @@ "node": ">=8" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "peer": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", "peer": true }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4584,19 +5856,39 @@ "node": ">= 6" } }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "peer": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -4640,14 +5932,14 @@ } }, "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "peer": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4662,6 +5954,15 @@ "node": ">=8.0.0" } }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -4736,6 +6037,26 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -4771,9 +6092,39 @@ } }, "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==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-tag/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true }, "node_modules/has": { "version": "1.0.3", @@ -4794,10 +6145,22 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "peer": true, "engines": { "node": ">= 0.4" @@ -4827,13 +6190,25 @@ "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -4858,6 +6233,28 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "peer": true + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4895,17 +6292,25 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "peer": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -4948,6 +6353,21 @@ "node": ">=0.8.19" } }, + "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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "peer": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4971,6 +6391,19 @@ "node": ">=10" } }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "peer": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -4980,6 +6413,24 @@ "loose-envify": "^1.0.0" } }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4998,6 +6449,12 @@ "node": ">=8" } }, + "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==", + "peer": true + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -5024,7 +6481,22 @@ "has": "^1.0.3" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -5079,6 +6551,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "peer": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "peer": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -5108,11 +6613,19 @@ "node": ">=8" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "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" } @@ -5123,11 +6636,19 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "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" }, @@ -5141,6 +6662,30 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "peer": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -5152,16 +6697,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "peer": true, - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -5871,11 +7406,28 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "peer": true + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "peer": true + }, "node_modules/js-base64": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "node_modules/js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5885,7 +7437,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -5963,6 +7514,36 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "peer": true, + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "peer": true, + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, "node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -5976,26 +7557,14 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, "optionalDependencies": { "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==", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -6009,7 +7578,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, "engines": { "node": ">=6" } @@ -6071,42 +7639,17 @@ "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._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "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=", - "peer": true - }, - "node_modules/lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "peer": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "peer": true }, "node_modules/lodash.memoize": { @@ -6115,35 +7658,87 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "peer": true + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "peer": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "peer": true + "node_modules/log-symbols/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==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "node_modules/log-symbols/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==", "peer": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "node_modules/log-symbols/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==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/log-symbols/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/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==", "peer": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/long": { @@ -6222,6 +7817,17 @@ "tmpl": "1.0.5" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "peer": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/md5-file": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", @@ -6237,6 +7843,27 @@ "node": ">=0.10" } }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "peer": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "peer": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6253,12 +7880,12 @@ } }, "node_modules/metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "version": "0.67.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", + "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", "peer": true, "dependencies": { - "@babel/core": "^7.0.0", + "@babel/core": "^7.14.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", @@ -6271,6 +7898,7 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", "@babel/plugin-syntax-optional-chaining": "^7.0.0", "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", "@babel/plugin-transform-block-scoping": "^7.0.0", "@babel/plugin-transform-classes": "^7.0.0", "@babel/plugin-transform-computed-properties": "^7.0.0", @@ -6303,33 +7931,43 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "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, + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "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, + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -6353,36 +7991,109 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", "engines": { "node": "*" } @@ -6397,6 +8108,51 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -6414,6 +8170,31 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "peer": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "peer": true + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6421,22 +8202,54 @@ "peer": true }, "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "peer": true, "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/node-fetch/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "peer": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 6.13.0" } }, "node_modules/node-int64": { @@ -6446,9 +8259,9 @@ "dev": true }, "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==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "node_modules/nodemon": { "version": "2.0.15", @@ -6551,6 +8364,27 @@ "node": ">=8" } }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6572,6 +8406,12 @@ "node": ">=8" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -6581,77 +8421,243 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "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/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "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/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "peer": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/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==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/ora/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "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==", + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "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==", + "node_modules/ora/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==", "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "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" - }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "node_modules/p-cancelable": { @@ -6663,6 +8669,15 @@ "node": ">=6" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6693,6 +8708,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "peer": 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", @@ -6743,12 +8773,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "peer": true, + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "peer": true, + "dependencies": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + } + }, + "node_modules/password-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -6758,7 +8828,7 @@ "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "peer": true, "engines": { "node": ">=4" @@ -6775,7 +8845,7 @@ "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "peer": true, "engines": { "node": ">=4" @@ -6786,6 +8856,15 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6948,9 +9027,9 @@ } }, "node_modules/plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "peer": true, "dependencies": { "base64-js": "^1.5.1", @@ -6963,12 +9042,21 @@ "node_modules/plist/node_modules/xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "peer": true, "engines": { "node": ">=4.0" } }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -6999,6 +9087,18 @@ "node": ">=10.13.0" } }, + "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==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -7025,6 +9125,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -7034,11 +9143,16 @@ "asap": "~2.0.3" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "peer": true + }, "node_modules/prompts": { "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", "sisteransi": "^1.0.5" @@ -7048,9 +9162,9 @@ } }, "node_modules/protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -7088,7 +9202,6 @@ "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" @@ -7115,6 +9228,24 @@ "node": ">=8" } }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -7141,11 +9272,25 @@ ], "peer": true }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -7159,14 +9304,12 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7222,9 +9365,9 @@ "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==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -7292,12 +9435,18 @@ "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=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "peer": true, "bin": { "jsesc": "bin/jsesc" } }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "peer": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7315,16 +9464,39 @@ "node": ">=0.10.0" } }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "peer": true, + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "peer": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "peer": true }, "node_modules/reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", "peer": true }, "node_modules/resolve": { @@ -7381,6 +9553,40 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7395,7 +9601,6 @@ "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" }, @@ -7434,6 +9639,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true, + "peer": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7489,16 +9701,49 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "peer": true, + "dependencies": { + "type-fest": "^0.12.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "peer": true }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "peer": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -7510,7 +9755,7 @@ "node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "peer": true, "engines": { "node": ">=0.10.0" @@ -7522,21 +9767,32 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "peer": true, "dependencies": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" } }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/slash": { "version": "3.0.0", @@ -7555,14 +9811,6 @@ "node": ">=8.0.0" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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", @@ -7582,11 +9830,34 @@ "node": ">=0.10.0" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "peer": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "peer": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/stack-utils": { "version": "2.0.5", @@ -7600,10 +9871,19 @@ "node": ">=10" } }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stream-buffers": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "peer": true, "engines": { "node": ">= 0.10.0" @@ -7655,6 +9935,15 @@ "node": ">=8" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7676,10 +9965,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "peer": true + }, "node_modules/sucrase": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", - "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", + "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", "peer": true, "dependencies": { "commander": "^4.0.0", @@ -7706,6 +10001,12 @@ "node": ">= 6" } }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "peer": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7721,7 +10022,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -7747,11 +10047,79 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "peer": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -7777,6 +10145,12 @@ "node": ">=8" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -7789,7 +10163,7 @@ "node_modules/thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "peer": true, "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -7804,6 +10178,24 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7838,6 +10230,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -7864,15 +10265,6 @@ "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", @@ -7885,6 +10277,12 @@ "node": ">=8" } }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", + "peer": true + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -7892,9 +10290,9 @@ "peer": true }, "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -7916,7 +10314,6 @@ "@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" }, @@ -7936,13 +10333,10 @@ } }, "node_modules/ts-jest/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==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -7950,6 +10344,12 @@ "node": ">=6" } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "peer": true + }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -7980,7 +10380,6 @@ "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" }, @@ -7988,6 +10387,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -7998,9 +10410,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.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -8075,11 +10487,28 @@ "node": ">=4" } }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "peer": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -8088,12 +10517,45 @@ } }, "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==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "peer": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, "node_modules/update-notifier": { @@ -8139,6 +10601,12 @@ "node": ">=10" } }, + "node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "peer": true + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -8166,6 +10634,15 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -8199,6 +10676,21 @@ "node": ">= 8" } }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "peer": true + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -8234,6 +10726,15 @@ "makeerror": "1.0.12" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -8252,24 +10753,6 @@ "iconv-lite": "0.4.24" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "peer": true - }, "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -8314,6 +10797,12 @@ "node": ">=8" } }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "peer": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -8519,22 +11008,22 @@ } }, "@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==" + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "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/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -8554,12 +11043,9 @@ } }, "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==", - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "semver": { "version": "6.3.0", @@ -8569,13 +11055,13 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { @@ -8598,13 +11084,13 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "dependencies": { @@ -8616,24 +11102,24 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "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-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -8665,12 +11151,9 @@ } }, "@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==", - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" }, "@babel/helper-explode-assignable-expression": { "version": "7.16.7", @@ -8682,21 +11165,12 @@ } }, "@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==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "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==", - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -8708,12 +11182,12 @@ } }, "@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==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-module-imports": { @@ -8725,18 +11199,18 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.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/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-optimise-call-expression": { @@ -8749,9 +11223,9 @@ } }, "@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==" + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -8765,24 +11239,24 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", "peer": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -8825,12 +11299,12 @@ } }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" } }, @@ -8896,72 +11370,73 @@ } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" }, "@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==", + "version": "7.17.12", + "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.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/plugin-proposal-optional-chaining": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", + "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.1", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", "charcodes": "^0.2.0" } }, @@ -8976,52 +11451,52 @@ } }, "@babel/plugin-proposal-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", - "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", + "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-default-from": "^7.16.7" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, @@ -9036,16 +11511,16 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "peer": true, "requires": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.17.12" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -9059,46 +11534,46 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "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/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "peer": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-async-generators": { @@ -9136,12 +11611,12 @@ } }, "@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-dynamic-import": { @@ -9172,12 +11647,21 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", + "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-import-meta": { @@ -9198,12 +11682,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -9272,30 +11756,30 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "peer": true, "requires": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" } }, @@ -9309,46 +11793,46 @@ } }, "@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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", "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-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-dotall-regex": { @@ -9362,12 +11846,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -9381,22 +11865,22 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", + "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" } }, "@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==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-function-name": { @@ -9411,12 +11895,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-member-expression-literals": { @@ -9429,67 +11913,68 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "peer": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", "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/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", "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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", "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-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "peer": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "peer": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-object-assign": { @@ -9512,12 +11997,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-property-literals": { @@ -9539,25 +12024,25 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", + "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-react-jsx-source": { @@ -9570,31 +12055,32 @@ } }, "@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==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "peer": true, "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", + "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", "peer": true, "requires": { "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -9619,12 +12105,12 @@ } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, @@ -9638,32 +12124,32 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", "peer": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" } }, "@babel/plugin-transform-unicode-escapes": { @@ -9686,37 +12172,38 @@ } }, "@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==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", "peer": true, "requires": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", "@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-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@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-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@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-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@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-import-assertions": "^7.17.12", "@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", @@ -9726,44 +12213,44 @@ "@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-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", "@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-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", "@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-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", "@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-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", "@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-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@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/types": "^7.18.2", "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", + "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "dependencies": { @@ -9789,9 +12276,9 @@ } }, "@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "peer": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -9818,18 +12305,18 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "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/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", "@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", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -9845,9 +12332,9 @@ } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -9859,16 +12346,141 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "peer": true, + "requires": { + "mv": "~2", + "safe-json-stringify": "~1", + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } + } + }, + "@expo/cli": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", + "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", + "peer": true, + "requires": { + "@babel/runtime": "^7.14.0", + "@expo/code-signing-certificates": "^0.0.2", + "@expo/config": "~6.0.23", + "@expo/config-plugins": "~4.1.4", + "@expo/dev-server": "~0.1.110", + "@expo/devcert": "^1.0.0", + "@expo/json-file": "^8.2.35", + "@expo/metro-config": "~0.3.16", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~0.0.52", + "@expo/plist": "^0.0.18", + "@expo/prebuild-config": "~4.0.0", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.1.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "internal-ip": "4.3.0", + "is-root": "^2.1.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "requireg": "^0.2.2", + "resolve-from": "^5.0.0", + "semver": "^6.3.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "uuid": "^3.4.0", + "wrap-ansi": "^7.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==", + "peer": true + } + } + }, + "@expo/code-signing-certificates": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", + "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", + "peer": true, + "requires": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, "@expo/config": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.6.tgz", - "integrity": "sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", + "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", "peer": true, "requires": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.0.6", - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", "getenv": "^1.0.0", "glob": "7.1.6", "require-from-string": "^2.0.2", @@ -9879,19 +12491,19 @@ } }, "@expo/config-plugins": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.0.6.tgz", - "integrity": "sha512-K/KQaw/CU8uLQgk7sFnZC54YGHoGucKFfdjYeZx5ds2eyzbuMAiKzGFcxZ/S+1dVBZ8QHzwowsVBW3kuYhnQ3Q==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", + "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", "peer": true, "requires": { - "@expo/config-types": "^43.0.1", - "@expo/json-file": "8.2.33", - "@expo/plist": "0.0.15", + "@expo/config-types": "^45.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", "debug": "^4.3.1", "find-up": "~5.0.0", - "fs-extra": "9.0.0", "getenv": "^1.0.0", "glob": "7.1.6", "resolve-from": "^5.0.0", @@ -9902,9 +12514,9 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "peer": true, "requires": { "lru-cache": "^6.0.0" @@ -9913,15 +12525,210 @@ } }, "@expo/config-types": { - "version": "43.0.1", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-43.0.1.tgz", - "integrity": "sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==", + "version": "45.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", + "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", "peer": true }, + "@expo/dev-server": { + "version": "0.1.113", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", + "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", + "peer": true, + "requires": { + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "0.3.18", + "@expo/osascript": "2.0.33", + "body-parser": "1.19.0", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": 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==", + "peer": true + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true + } + } + }, + "@expo/devcert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", + "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", + "peer": true, + "requires": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^1.10.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@expo/image-utils": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", + "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "peer": true, + "requires": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "peer": true + }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": 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==", + "peer": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "peer": true + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "peer": true, + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "peer": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "peer": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "peer": true + } + } + }, "@expo/json-file": { - "version": "8.2.33", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.33.tgz", - "integrity": "sha512-CDnhjdirUs6OdN5hOSTJ2y3i9EiJMk7Z5iDljC5xyCHCrUex7oyI8vbRsZEojAahxZccgL/PrO+CjakiFFWurg==", + "version": "8.2.36", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", + "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", "peer": true, "requires": { "@babel/code-frame": "~7.10.4", @@ -9930,22 +12737,61 @@ } }, "@expo/metro-config": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.2.8.tgz", - "integrity": "sha512-8g0QrHfvSgTLzryuE4JXRwFwBZ7EmqE55zR39Yy7jEVR3epYL0JbBK0/IDFmf6auwsDFtMjAZjFL4WEhRN5bEQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", + "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", "peer": true, "requires": { - "@expo/config": "6.0.6", + "@expo/config": "6.0.24", + "@expo/json-file": "8.2.36", "chalk": "^4.1.0", "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", "getenv": "^1.0.0", + "resolve-from": "^5.0.0", "sucrase": "^3.20.0" } }, + "@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "peer": true, + "requires": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + } + }, + "@expo/package-manager": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", + "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", + "peer": true, + "requires": { + "@expo/json-file": "8.2.36", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "npm-package-arg": "^7.0.0", + "rimraf": "^3.0.2", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + }, + "dependencies": { + "sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "peer": true + } + } + }, "@expo/plist": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.15.tgz", - "integrity": "sha512-LDxiS0KNZAGJu4fIJhbEKczmb+zeftl1NU0LE0tj0mozoMI5HSKdMUchgvnBm35bwBl8ekKkAfJJ0ONxljWQjQ==", + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", + "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", "peer": true, "requires": { "@xmldom/xmldom": "~0.7.0", @@ -9953,75 +12799,211 @@ "xmlbuilder": "^14.0.0" } }, + "@expo/prebuild-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", + "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "peer": true, + "requires": { + "@expo/config": "6.0.24", + "@expo/config-plugins": "4.1.5", + "@expo/config-types": "^45.0.0", + "@expo/image-utils": "0.3.20", + "@expo/json-file": "8.2.36", + "debug": "^4.3.1", + "expo-modules-autolinking": "0.8.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "xml2js": "0.4.23" + }, + "dependencies": { + "expo-modules-autolinking": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", + "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", + "peer": true, + "requires": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + } + }, + "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==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "peer": true + } + } + }, + "@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "peer": true, + "requires": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + } + } + }, + "@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "peer": true + }, + "@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.5" + } + }, "@expo/vector-icons": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-12.0.5.tgz", - "integrity": "sha512-zWvHBmkpbi1KrPma6Y+r/bsGI6MjbM1MBSe6W9A4uYMLhNI5NR4JtTnqxhf7g1XdpaDtBdv5aOWKEx4d5rxnhg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "peer": true + }, + "@expo/xcpretty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", + "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", "peer": true, "requires": { - "lodash.frompairs": "^4.0.1", - "lodash.isequal": "^4.5.0", - "lodash.isstring": "^4.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.template": "^4.5.0" + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "peer": true + }, + "@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peer": true, + "requires": {} + }, "@grpc/grpc-js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.7.tgz", - "integrity": "sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.10.0", + "protobufjs": "^6.11.3", "yargs": "^16.2.0" } }, "@hashgraph/cryptography": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.1.1.tgz", - "integrity": "sha512-/0G9p9W/m9M/dQY1W7p3osrDP5YQndHvgwbrruoMr5uBD1ZKBVmJjG4+iqbOgA/J+/dLiwPEor6IEEE6gofv2w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", + "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", "requires": { "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "expo-crypto": "^10.1.1", - "expo-random": "^12.1.1", "js-base64": "^3.7.2", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" } }, "@hashgraph/proto": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.1.3.tgz", - "integrity": "sha512-0XYRQPdOAz92g6mwdsDRYNohDNqxAnDF1hT4HkvV6859iBxmMVZi8QqkqETmZ2k1HIByQ1XAz5WVraIgM6zYJw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", + "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", "requires": { + "long": "^4.0.0", "protobufjs": "^6.11.2" } }, "@hashgraph/sdk": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.9.1.tgz", - "integrity": "sha512-iZ9lHcXbCdnXqEU0L9u+ZGWPBGdITy6r6VI2l9hz7mdGCBZ5vx+omX4ID9WVIBW3o7ltjbNjFv9iYu+7DzJxsA==", - "requires": { - "@grpc/grpc-js": "^1.5.3", - "@hashgraph/cryptography": "^1.1.0-beta.5", - "@hashgraph/proto": "2.1.3", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", + "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "requires": { + "@ethersproject/rlp": "^5.6.0", + "@grpc/grpc-js": "^1.6.7", + "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/proto": "2.5.0", + "axios": "^0.27.2", "bignumber.js": "^9.0.2", "crypto-js": "^4.1.1", "js-base64": "^3.7.2", + "js-logger": "^1.6.1", "long": "^4.0.0", "protobufjs": "^6.11.2", "utf8": "^3.0.0" @@ -10318,20 +13300,35 @@ "chalk": "^4.0.0" } }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@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==" }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + }, "@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==" }, "@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==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -10363,10 +13360,49 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "peer": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "peer": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "@protobufjs/base64": { "version": "1.1.2", @@ -10381,12 +13417,12 @@ "@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -10395,27 +13431,27 @@ "@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@react-native/normalize-color": { "version": "2.0.0", @@ -10423,6 +13459,16 @@ "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", "peer": true }, + "@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "peer": true, + "requires": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -10463,9 +13509,9 @@ "dev": true }, "@types/babel__core": { - "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==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -10544,9 +13590,9 @@ } }, "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/node": { "version": "16.11.26", @@ -10575,9 +13621,29 @@ } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "peer": true, + "requires": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + } + }, + "@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "peer": true, + "requires": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + } }, "@xmldom/xmldom": { "version": "0.7.5", @@ -10597,6 +13663,16 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "peer": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -10636,6 +13712,16 @@ "debug": "4" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -10649,7 +13735,6 @@ "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" } @@ -10670,7 +13755,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "peer": true }, "anymatch": { @@ -10683,26 +13768,42 @@ "picomatch": "^2.0.4" } }, + "application-config-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", + "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", + "peer": true + }, + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "peer": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "peer": true + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "peer": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "at-least-node": { "version": "1.0.0", @@ -10710,6 +13811,27 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "peer": true }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -10812,9 +13934,9 @@ } }, "babel-plugin-react-native-web": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.6.tgz", - "integrity": "sha512-A7Y0mCNF7JNiqf4w90SNUc+fQ6sST/S0O8+1Lx5NP0EOqqqsjut0y3HQvbmCfRMXTzdo3gxaWmYoSCfjozBIhg==", + "version": "0.17.7", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", + "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", "peer": true }, "babel-preset-current-node-syntax": { @@ -10838,9 +13960,9 @@ } }, "babel-preset-expo": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.0.2.tgz", - "integrity": "sha512-NKVichCkbmb+ZIJ4hvuxzX3PnvHUKT42NxYIYTsKAfHPUKuaSAawtpsmMThph6pUc0GUYcLvCRql8ZX5A1zYNw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", + "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", "peer": true, "requires": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -10848,7 +13970,7 @@ "@babel/preset-env": "^7.12.9", "babel-plugin-module-resolver": "^4.1.0", "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.64.0" + "metro-react-native-babel-preset": "~0.67.0" } }, "babel-preset-jest": { @@ -10866,10 +13988,25 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base58-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", + "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "peer": true + }, + "better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "peer": true, + "requires": { + "open": "^8.0.4" + } }, "big-integer": { "version": "1.6.51", @@ -10899,6 +14036,41 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "peer": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -10939,9 +14111,9 @@ } }, "bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "peer": true, "requires": { "big-integer": "1.6.x" @@ -10967,7 +14139,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-process-hrtime": { "version": "1.0.0", @@ -10976,15 +14148,14 @@ "dev": true }, "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.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "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" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.0" } }, "bs-logger": { @@ -11024,7 +14195,7 @@ "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "peer": true }, "buffer-from": { @@ -11033,6 +14204,52 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "peer": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "peer": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "peer": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -11088,9 +14305,9 @@ "dev": true }, "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.30001358", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", + "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" }, "chalk": { "version": "4.1.2", @@ -11113,6 +14330,12 @@ "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", "peer": true }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "peer": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -11129,11 +14352,16 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "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 + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "cjs-module-lexer": { "version": "1.2.2", @@ -11141,12 +14369,33 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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==", + "peer": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "peer": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "peer": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -11157,6 +14406,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "peer": true + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -11195,11 +14450,16 @@ "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" } }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "peer": true + }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -11212,6 +14472,12 @@ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "peer": true }, + "component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", + "peer": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -11245,6 +14511,41 @@ } } }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "peer": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "peer": true + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -11253,19 +14554,13 @@ "safe-buffer": "~5.1.1" } }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "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==", + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", + "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", "peer": true, "requires": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.4", "semver": "7.0.0" }, "dependencies": { @@ -11277,6 +14572,15 @@ } } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "peer": true, + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -11298,6 +14602,12 @@ } } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "peer": true + }, "crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -11306,8 +14616,7 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "cssom": { "version": "0.4.4", @@ -11332,6 +14641,12 @@ } } }, + "dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "peer": true + }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -11344,9 +14659,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -11375,8 +14690,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.4", @@ -11390,26 +14704,122 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "peer": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "requires": { + "path-key": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "peer": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "peer": true + } + } + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "peer": true + }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "peer": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "peer": true, "requires": { - "object-keys": "^1.0.12" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" } }, "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 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "peer": true }, "detect-newline": { "version": "3.1.0", @@ -11418,9 +14828,9 @@ "dev": true }, "did-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz", - "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", + "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" }, "diff-sequences": { "version": "27.5.1", @@ -11428,6 +14838,15 @@ "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "peer": true, + "requires": { + "path-type": "^4.0.0" + } + }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -11460,10 +14879,16 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "peer": true + }, "electron-to-chromium": { - "version": "1.4.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", - "integrity": "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" + "version": "1.4.168", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" }, "elliptic": { "version": "6.5.4", @@ -11490,24 +14915,32 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "peer": true, - "requires": { - "iconv-lite": "^0.6.2" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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" } }, + "env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "peer": true + }, + "eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "peer": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11528,6 +14961,12 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "peer": true + }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -11559,8 +14998,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "5.3.0", @@ -11573,6 +15011,12 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "peer": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -11652,28 +15096,30 @@ } }, "expo": { - "version": "44.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-44.0.6.tgz", - "integrity": "sha512-iHnra6uD5kXZgdSUrvxZ3sLjg1FtgtA4p4uaSKVQ39IaMHJBngo8RKqFUJ+BF2kPDpBLJ251eLlhgYUlnAyuag==", + "version": "45.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", + "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", "peer": true, "requires": { "@babel/runtime": "^7.14.0", - "@expo/metro-config": "~0.2.6", - "@expo/vector-icons": "^12.0.4", - "babel-preset-expo": "~9.0.2", + "@expo/cli": "0.1.5", + "@expo/vector-icons": "^13.0.0", + "babel-preset-expo": "~9.1.0", "cross-spawn": "^6.0.5", - "expo-application": "~4.0.2", - "expo-asset": "~8.4.6", - "expo-constants": "~13.0.2", - "expo-error-recovery": "~3.0.5", - "expo-file-system": "~13.1.3", - "expo-font": "~10.0.5", - "expo-keep-awake": "~10.0.2", - "expo-modules-autolinking": "0.5.5", - "expo-modules-core": "0.6.5", - "fbemitter": "^2.1.1", + "expo-application": "~4.1.0", + "expo-asset": "~8.5.0", + "expo-constants": "~13.1.1", + "expo-error-recovery": "~3.1.0", + "expo-file-system": "~14.0.0", + "expo-font": "~10.1.0", + "expo-keep-awake": "~10.1.1", + "expo-modules-autolinking": "0.9.0", + "expo-modules-core": "0.9.2", + "fbemitter": "^3.0.0", + "getenv": "^1.0.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", + "node-fetch": "^2.6.7", "pretty-format": "^26.5.2", "uuid": "^3.4.0" }, @@ -11715,79 +15161,80 @@ } }, "expo-application": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.0.2.tgz", - "integrity": "sha512-ngTaFplTkWn0X45gMC+VNXGyJfGxX4wOwKmtr17rNMVWOQUhhLlyMkTj9bAamzsuwZh35l3S/eD/N1aMWWUwMw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", + "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", "peer": true, "requires": {} }, "expo-asset": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.4.6.tgz", - "integrity": "sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", + "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", "peer": true, "requires": { "blueimp-md5": "^2.10.0", "invariant": "^2.2.4", "md5-file": "^3.2.3", "path-browserify": "^1.0.0", - "url-parse": "^1.4.4" + "url-parse": "^1.5.9" } }, "expo-constants": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.0.2.tgz", - "integrity": "sha512-vGs/kI65vplPFvG8z4W1ariGEtVHHp9Avl28G0zJprt2v/q1E/BnXjwvFSBPc1GB+Zb/7crWSHWRwjaFULBjsg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", + "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", "peer": true, "requires": { - "@expo/config": "^6.0.6", + "@expo/config": "^6.0.14", "uuid": "^3.3.2" } }, "expo-crypto": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.1.2.tgz", - "integrity": "sha512-TYaBtV9oK5OH+EfsAUHQkWkRPifZjCMDn6Yf9gk3/LyHdJHDYnB6NQWTJo9Qkl6vzI9svQ6PMnQTm2Yxrb3ZfQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", + "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", + "peer": true, "requires": {} }, "expo-error-recovery": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.0.5.tgz", - "integrity": "sha512-VM6OOecjt0aPu5/eCdGGJfNjvAZIemaQym0JF/+SA5IlLiPpEfbVCDTO/5yiS8Zb5fKpeABx+GCRmtfnFqvRRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", + "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", "optional": true, "peer": true, "requires": {} }, "expo-file-system": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-13.1.4.tgz", - "integrity": "sha512-/C2FKCzrdWuEt4m8Pzl9J4MhKgfU0denVLbqoKjidv8DnsLQrscFNlLhXuiooqWwsxB2OWAtGEVnPGJBWVuNEQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", + "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", "peer": true, "requires": { - "@expo/config-plugins": "^4.0.2", + "@expo/config-plugins": "^4.0.14", "uuid": "^3.4.0" } }, "expo-font": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.0.5.tgz", - "integrity": "sha512-x9YwM0xLkDdSvFjeNbyuh33Q1Hk3uc2jbMuuAN5W2ZVcUZqG0M8GCX/KV/D/7rYqdXKbliQA5r44MyDwZe/XRw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", + "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", "peer": true, "requires": { "fontfaceobserver": "^2.1.0" } }, "expo-keep-awake": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.0.2.tgz", - "integrity": "sha512-Ro1lgyKldbFs4mxhWM+goX9sg0S2SRR8FiJJeOvaRzf8xNhrZfWA00Zpr+/3ocCoWQ3eEL+X9UF4PXXHf0KoOg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", + "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", "peer": true, "requires": {} }, "expo-modules-autolinking": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.5.5.tgz", - "integrity": "sha512-bILEG0Fg+ZhIhdEaShHzsEN1WC0hUmXJ5Kcd4cd+8rVk1Ead9vRZxA/yLx1cNBDCOwMe0GAMrhF7TKT+A1P+YA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", + "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", "peer": true, "requires": { "chalk": "^4.1.0", @@ -11809,6 +15256,16 @@ "universalify": "^2.0.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11818,9 +15275,9 @@ } }, "expo-modules-core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.6.5.tgz", - "integrity": "sha512-h/9+SJ3m8XkDUV1QrPO8WeXaeRYWLBJrOqhokDyhgWUYSqe6JOuRx1ZkoGq/GmTiwjouRDbXPsXUBiU9HWLYyA==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", + "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", "peer": true, "requires": { "compare-versions": "^3.4.0", @@ -11828,9 +15285,10 @@ } }, "expo-random": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", - "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", + "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", + "peer": true, "requires": { "base64-js": "^1.3.0" } @@ -11879,22 +15337,22 @@ } }, "fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "peer": true, "requires": { - "fbjs": "^0.8.4" + "fbjs": "^3.0.0" } }, "fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "peer": true, "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", @@ -11902,6 +15360,18 @@ "ua-parser-js": "^0.7.30" } }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "peer": true + }, + "fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "peer": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -11910,6 +15380,38 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "peer": true + } + } + }, "find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -11923,7 +15425,7 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", "peer": true } } @@ -11946,33 +15448,60 @@ } } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "peer": true, + "requires": { + "micromatch": "^4.0.2" + } + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, "fontfaceobserver": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", - "integrity": "sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", "peer": true }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, + "freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "peer": true + }, "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "peer": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, + "requires": { + "minipass": "^3.0.0" } }, "fs.realpath": { @@ -12003,14 +15532,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "peer": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-package-type": { @@ -12019,6 +15548,12 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "peer": true + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -12066,6 +15601,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "peer": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -12097,9 +15646,32 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "peer": true + }, + "graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "peer": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true + } + } }, "has": { "version": "1.0.3", @@ -12114,10 +15686,19 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "peer": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "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==", "peer": true }, "has-yarn": { @@ -12138,13 +15719,22 @@ "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -12166,6 +15756,27 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "peer": true + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -12194,14 +15805,19 @@ "dev": true }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "peer": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "peer": true + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -12229,6 +15845,18 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "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==", + "peer": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "peer": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -12249,6 +15877,16 @@ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "peer": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12258,6 +15896,18 @@ "loose-envify": "^1.0.0" } }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "peer": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "peer": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12273,6 +15923,12 @@ "binary-extensions": "^2.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "peer": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -12298,6 +15954,12 @@ "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "peer": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -12332,6 +15994,32 @@ "is-path-inside": "^3.0.2" } }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "peer": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "peer": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "peer": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -12349,11 +16037,16 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true + }, "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 + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -12361,11 +16054,16 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "peer": 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 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-typedarray": { "version": "1.0.0", @@ -12373,6 +16071,24 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "peer": true, + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "peer": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -12384,16 +16100,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "peer": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -12951,11 +16657,28 @@ } } }, + "jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "peer": true + }, + "join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "peer": true + }, "js-base64": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12965,7 +16688,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -13023,6 +16745,35 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "peer": true, + "requires": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "dependencies": { + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "peer": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + } + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -13033,21 +16784,12 @@ } }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "peer": 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==", - "peer": true - } + "graceful-fs": "^4.1.6" } }, "keyv": { @@ -13062,8 +16804,7 @@ "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "latest-version": { "version": "5.1.0", @@ -13107,79 +16848,90 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "peer": true - }, - "lodash.frompairs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz", - "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=", - "peer": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "peer": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "peer": 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.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "peer": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "peer": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "peer": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "peer": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "chalk": "^2.0.1" + }, + "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==", + "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==", + "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==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "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==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "long": { @@ -13242,6 +16994,17 @@ "tmpl": "1.0.5" } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "peer": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "md5-file": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", @@ -13251,6 +17014,24 @@ "buffer-alloc": "^1.1.0" } }, + "md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "peer": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "peer": true + }, + "memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "peer": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -13264,12 +17045,12 @@ "peer": true }, "metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", + "version": "0.67.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", + "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", "peer": true, "requires": { - "@babel/core": "^7.0.0", + "@babel/core": "^7.14.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", @@ -13282,6 +17063,7 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", "@babel/plugin-syntax-optional-chaining": "^7.0.0", "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", "@babel/plugin-transform-block-scoping": "^7.0.0", "@babel/plugin-transform-classes": "^7.0.0", "@babel/plugin-transform-computed-properties": "^7.0.0", @@ -13311,27 +17093,31 @@ } }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "peer": 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 + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "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, + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -13354,7 +17140,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", @@ -13365,14 +17151,69 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "peer": true, + "requires": { + "minimist": "^1.2.6" + } }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" }, "ms": { "version": "2.1.2", @@ -13384,6 +17225,44 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "peer": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "peer": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "peer": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -13401,6 +17280,25 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "peer": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "peer": true + }, + "nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "peer": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -13408,23 +17306,44 @@ "peer": true }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "peer": true, "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "whatwg-url": "^5.0.0" }, "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "peer": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "peer": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -13432,9 +17351,9 @@ "dev": true }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "nodemon": { "version": "2.0.15", @@ -13507,6 +17426,26 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, + "npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "peer": true, + "requires": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "peer": true + } + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13524,6 +17463,12 @@ } } }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "peer": true + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -13533,7 +17478,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "peer": true }, "object-keys": { @@ -13554,6 +17499,15 @@ "object-keys": "^1.1.1" } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "peer": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -13571,18 +17525,138 @@ "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "peer": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "peer": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "peer": true + }, + "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==", + "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==", + "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==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "peer": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "peer": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "peer": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "peer": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-cancelable": { @@ -13591,6 +17665,12 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "peer": true + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13609,6 +17689,15 @@ "p-limit": "^3.0.2" } }, + "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==", + "peer": 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", @@ -13646,12 +17735,45 @@ "lines-and-columns": "^1.1.6" } }, + "parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "peer": true, + "requires": { + "pngjs": "^3.3.0" + } + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "peer": true + }, + "password-prompt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", + "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", + "peer": true, + "requires": { + "ansi-escapes": "^3.1.0", + "cross-spawn": "^6.0.5" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "peer": true + } + } + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -13661,7 +17783,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "peer": true }, "path-is-absolute": { @@ -13672,7 +17794,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "peer": true }, "path-parse": { @@ -13680,6 +17802,12 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "peer": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -13798,9 +17926,9 @@ } }, "plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "peer": true, "requires": { "base64-js": "^1.5.1", @@ -13810,11 +17938,17 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "peer": true } } }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "peer": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -13833,6 +17967,12 @@ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, + "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==", + "peer": true + }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13852,6 +17992,12 @@ } } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -13861,20 +18007,25 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "peer": true + }, "prompts": { "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", "sisteransi": "^1.0.5" } }, "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -13907,7 +18058,6 @@ "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" @@ -13928,6 +18078,18 @@ "escape-goat": "^2.0.0" } }, + "qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "peer": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "peer": true + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -13940,11 +18102,22 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "peer": true }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13955,14 +18128,12 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -14008,9 +18179,9 @@ "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==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "peer": true, "requires": { "@babel/runtime": "^7.8.4" @@ -14066,11 +18237,17 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "peer": true } } }, + "remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "peer": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -14082,16 +18259,38 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "peer": true }, + "requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "peer": true, + "requires": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "peer": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "peer": true }, "reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", "peer": true }, "resolve": { @@ -14133,6 +18332,33 @@ "lowercase-keys": "^1.0.0" } }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "peer": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -14143,7 +18369,6 @@ "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" } @@ -14162,6 +18387,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true, + "peer": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -14204,16 +18436,39 @@ } } }, + "serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "peer": true, + "requires": { + "type-fest": "^0.12.0" + }, + "dependencies": { + "type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "peer": true + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "peer": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "peer": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "peer": true, "requires": { "shebang-regex": "^1.0.0" @@ -14222,7 +18477,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "peer": true }, "signal-exit": { @@ -14231,21 +18486,31 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "peer": true, "requires": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + }, + "dependencies": { + "bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "peer": true, + "requires": { + "big-integer": "1.6.x" + } + } } }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "3.0.0", @@ -14258,11 +18523,6 @@ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", "peer": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -14281,11 +18541,28 @@ } } }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "peer": true, + "requires": { + "through": "2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "peer": true, + "requires": { + "minipass": "^3.1.1" + } }, "stack-utils": { "version": "2.0.5", @@ -14296,10 +18573,16 @@ "escape-string-regexp": "^2.0.0" } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "peer": true + }, "stream-buffers": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "peer": true }, "string-length": { @@ -14336,6 +18619,12 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "peer": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -14348,10 +18637,16 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "peer": true + }, "sucrase": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.20.3.tgz", - "integrity": "sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", + "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", "peer": true, "requires": { "commander": "^4.0.0", @@ -14370,6 +18665,12 @@ } } }, + "sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "peer": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14382,7 +18683,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -14399,11 +18699,59 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "peer": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true + } + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true + }, + "tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "peer": true, + "requires": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -14420,6 +18768,12 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -14432,7 +18786,7 @@ "thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "peer": true, "requires": { "thenify": ">= 3.1.0 < 4" @@ -14444,6 +18798,21 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14469,6 +18838,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "peer": true + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -14487,14 +18862,6 @@ "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": { @@ -14506,6 +18873,12 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", + "peer": true + }, "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -14513,9 +18886,9 @@ "peer": true }, "ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", "dev": true, "requires": { "bs-logger": "0.x", @@ -14529,16 +18902,19 @@ }, "dependencies": { "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, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true } } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "peer": true + }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -14562,8 +18938,17 @@ "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 + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "peer": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } }, "typedarray-to-buffer": { "version": "3.1.5", @@ -14575,9 +18960,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "ua-parser-js": { @@ -14620,21 +19005,52 @@ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "peer": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "peer": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "peer": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "requires": { "crypto-random-string": "^2.0.0" } }, "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "peer": true }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -14668,6 +19084,12 @@ } } }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "peer": true + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -14692,6 +19114,12 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "peer": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -14717,6 +19145,21 @@ } } }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "peer": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "peer": true, + "requires": { + "builtins": "^1.0.3" + } + }, "varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -14749,6 +19192,15 @@ "makeerror": "1.0.12" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "peer": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -14762,25 +19214,8 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "peer": true - }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -14816,6 +19251,12 @@ "string-width": "^4.0.0" } }, + "wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "peer": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 998f689..3736481 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,12 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "^2.8", + "@hashgraph/sdk": "~2.15.0", + "base58-js": "^1.0.0", + "did-resolver": "^3.1.5", "js-base64": "^3.6.1", "moment": "^2.29.1", "multiformats": "^9.6.2", - "varint": "^6.0.0", - "did-resolver": "^3.1.5" + "varint": "^6.0.0" } } diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index be6f80a..9377a71 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -9,6 +9,7 @@ import { HcsDidCreateVerificationRelationshipEvent, HcsDidDeleteEvent, HcsDidMessage, + HcsDidUpdateDidOwnerEvent, } from "../../dist"; describe("DidDocument", () => { @@ -170,7 +171,7 @@ describe("DidDocument", () => { new HcsDidMessage( DidMethodOperation.UPDATE, identifier, - new HcsDidCreateDidOwnerEvent( + new HcsDidUpdateDidOwnerEvent( otherOwnerIdentifier + "#did-root-key", otherOwnerIdentifier, otherOwnerKey.publicKey diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index 3339189..c8172af 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -6,27 +6,6 @@ const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); -const encrypt = (plainText, key) => { - const cipher = crypto.createCipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(plainText, "utf8"), cipher.final()]).toString("base64"); -}; - -const decrypt = (cipherText, key) => { - const cipher = crypto.createDecipheriv( - "aes-128-ecb", - crypto.createHash("sha256").update(String(key)).digest("base64").substr(0, 16), - null - ); - return Buffer.concat([cipher.update(cipherText, "base64"), cipher.final()]).toString("utf8"); -}; - -exports.encrypt = encrypt; -exports.decrypt = decrypt; - describe("HcsDidMessage", () => { const client = Client.forTestnet(); const privateKey = PrivateKey.generate(); From 76c405a8db8e2ec8ba1790dc93ed34533569cc17 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 24 Jun 2022 12:19:14 +1000 Subject: [PATCH 119/133] update hashgraph SDK to latest, as previous issue was with mirror node & not SDK --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b0c006..a7ab47d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "~2.15.0", + "@hashgraph/sdk": "~2.16.1", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", @@ -2751,13 +2751,13 @@ } }, "node_modules/@hashgraph/sdk": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", - "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.16.1.tgz", + "integrity": "sha512-Yk9M88hDqJIE2SxLp+llmTvemuWaqJS+5C4cr8MZoELHxsaGRFPwfqTLV8Hz/fcLEfdxXLhYItbJmyaCA0na5Q==", "dependencies": { "@ethersproject/rlp": "^5.6.0", "@grpc/grpc-js": "^1.6.7", - "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/cryptography": "^1.3.0", "@hashgraph/proto": "2.5.0", "axios": "^0.27.2", "bignumber.js": "^9.0.2", @@ -12991,13 +12991,13 @@ } }, "@hashgraph/sdk": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.15.0.tgz", - "integrity": "sha512-SP3Wnb7DlLwwhLqr3tnYfKVMyL6wfm+5aBCM6K0ES90b9yYlnTYehMO/EJAmSlvwer2abmzxEneHXP/DmK9LoQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.16.1.tgz", + "integrity": "sha512-Yk9M88hDqJIE2SxLp+llmTvemuWaqJS+5C4cr8MZoELHxsaGRFPwfqTLV8Hz/fcLEfdxXLhYItbJmyaCA0na5Q==", "requires": { "@ethersproject/rlp": "^5.6.0", "@grpc/grpc-js": "^1.6.7", - "@hashgraph/cryptography": "^1.2.0", + "@hashgraph/cryptography": "^1.3.0", "@hashgraph/proto": "2.5.0", "axios": "^0.27.2", "bignumber.js": "^9.0.2", diff --git a/package.json b/package.json index 3736481..19eea38 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "~2.15.0", + "@hashgraph/sdk": "^2.16.1", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", From c45bb8db5e0af3bc60a7c6a2c7e724b5725b3930 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Fri, 24 Jun 2022 14:16:12 +1000 Subject: [PATCH 120/133] updated package lock file --- package-lock.json | 2371 +++++++++++++++++++++++++-------------------- 1 file changed, 1297 insertions(+), 1074 deletions(-) diff --git a/package-lock.json b/package-lock.json index a7ab47d..0eb2f4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "~2.16.1", + "@hashgraph/sdk": "^2.16.1", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", @@ -32,11 +32,12 @@ } }, "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==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -59,24 +60,24 @@ } }, "node_modules/@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { @@ -109,14 +110,6 @@ "node": ">=6" } }, - "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==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", @@ -130,6 +123,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.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", @@ -172,14 +178,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==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", @@ -236,15 +234,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==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", @@ -445,22 +434,22 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" }, "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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -505,12 +494,12 @@ "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=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/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=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } @@ -518,7 +507,7 @@ "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=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } @@ -1657,15 +1646,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "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", @@ -1879,15 +1859,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==", - "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", @@ -2135,13 +2106,18 @@ "expo-internal": "build/bin/cli" } }, - "node_modules/@expo/cli/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/@expo/code-signing-certificates": { @@ -2217,6 +2193,18 @@ "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", "peer": true }, + "node_modules/@expo/config/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@expo/dev-server": { "version": "0.1.113", "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", @@ -2274,6 +2262,18 @@ "node": ">= 10.0.0" } }, + "node_modules/@expo/dev-server/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@expo/dev-server/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -2313,18 +2313,6 @@ "ms": "^2.1.1" } }, - "node_modules/@expo/devcert/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/@expo/image-utils": { "version": "0.3.20", "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", @@ -2389,6 +2377,18 @@ "node": ">= 10.0.0" } }, + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@expo/image-utils/node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -2500,6 +2500,21 @@ "sudo-prompt": "9.1.1" } }, + "node_modules/@expo/package-manager/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/package-manager/node_modules/sudo-prompt": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", @@ -2579,6 +2594,18 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@expo/prebuild-config/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@expo/prebuild-config/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -2925,6 +2952,21 @@ } } }, + "node_modules/@jest/core/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/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -3015,15 +3057,6 @@ } } }, - "node_modules/@jest/reporters/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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/source-map": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", @@ -3038,15 +3071,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/source-map/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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/test-result": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", @@ -3103,15 +3127,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/transform/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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/transform/node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -3141,22 +3156,21 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dependencies": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" } }, "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==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "engines": { "node": ">=6.0.0" } @@ -3170,9 +3184,9 @@ } }, "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==" + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.13", @@ -3268,6 +3282,21 @@ "node": ">=10" } }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -3419,9 +3448,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -3458,9 +3487,9 @@ } }, "node_modules/@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, "dependencies": { "jest-matcher-utils": "^27.0.0", @@ -3473,14 +3502,14 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" + "version": "16.11.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", + "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" }, "node_modules/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", "dev": true }, "node_modules/@types/stack-utils": { @@ -3539,9 +3568,9 @@ } }, "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "node_modules/abbrev": { @@ -3564,9 +3593,9 @@ } }, "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==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3733,7 +3762,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -3753,19 +3782,6 @@ "form-data": "^4.0.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -3858,15 +3874,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==", - "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", @@ -3957,9 +3964,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base58-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", - "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", + "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==", "engines": { "node": ">= 8" } @@ -4299,6 +4306,21 @@ "node": ">=10" } }, + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -4373,9 +4395,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", "funding": [ { "type": "opencollective", @@ -4466,9 +4488,9 @@ } }, "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==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" }, "node_modules/cjs-module-lexer": { "version": "1.2.2", @@ -4543,7 +4565,7 @@ "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -4552,7 +4574,7 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { "iojs": ">= 1.0.0", @@ -4622,7 +4644,7 @@ "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": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/configstore": { "version": "5.0.1", @@ -4848,7 +4870,7 @@ "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -4860,7 +4882,7 @@ "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/deep-extend": { @@ -4899,57 +4921,6 @@ "node": ">=6" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -5021,10 +4992,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "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=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } @@ -5048,9 +5034,9 @@ } }, "node_modules/did-resolver": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", - "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", + "integrity": "sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg==" }, "node_modules/diff-sequences": { "version": "27.5.1", @@ -5109,7 +5095,7 @@ "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, "node_modules/ee-first": { @@ -5249,16 +5235,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/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, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -5295,91 +5271,27 @@ "peer": true }, "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/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/execa/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/execa/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/execa/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/execa/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, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6" } }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -5661,7 +5573,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fastq": { @@ -5844,9 +5756,9 @@ "peer": true }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -5894,7 +5806,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -5964,15 +5876,14 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, "node_modules/getenv": { @@ -6029,6 +5940,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/global-dirs/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/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -6079,18 +5999,6 @@ "node": ">=8.6" } }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -6270,9 +6178,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { "agent-base": "6", @@ -6314,13 +6222,13 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, "engines": { "node": ">=4" @@ -6348,7 +6256,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -6371,7 +6279,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6383,13 +6291,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "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" - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-ip": { "version": "4.3.0", @@ -6434,7 +6338,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-binary-path": { @@ -6474,9 +6378,9 @@ "dev": true }, "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==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dependencies": { "has": "^1.0.3" }, @@ -6502,7 +6406,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -6646,20 +6550,18 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "node_modules/is-valid-path": { @@ -6695,7 +6597,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -6707,9 +6609,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -6722,15 +6624,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -6759,15 +6652,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", @@ -6820,30 +6704,172 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "node_modules/jest-changed-files/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": { - "@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.5.1", - "is-generator-fn": "^2.0.0", - "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", + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-circus": { + "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.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.5.1", + "is-generator-fn": "^2.0.0", + "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" }, "engines": { @@ -7267,6 +7293,148 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runtime/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/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", @@ -7313,6 +7481,21 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -7491,6 +7674,20 @@ } } }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -7505,7 +7702,7 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { @@ -7606,7 +7803,7 @@ "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", @@ -7655,7 +7852,7 @@ "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=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "node_modules/log-symbols": { @@ -7793,15 +7990,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, - "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", @@ -7974,12 +8162,12 @@ } }, "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, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/mimic-response": { @@ -8091,9 +8279,9 @@ } }, "node_modules/moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "engines": { "node": "*" } @@ -8104,9 +8292,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multiformats": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", - "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, "node_modules/mv": { "version": "2.1.1", @@ -8167,7 +8355,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/ncp": { @@ -8255,7 +8443,7 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node_modules/node-releases": { @@ -8264,9 +8452,9 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "node_modules/nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", + "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8304,7 +8492,7 @@ "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -8334,7 +8522,7 @@ "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, "dependencies": { "abbrev": "1" @@ -8381,29 +8569,20 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "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" + "bin": { + "semver": "bin/semver" } }, - "node_modules/npm-run-path/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, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, + "dependencies": { + "path-key": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/nullthrows": { @@ -8469,24 +8648,21 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "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, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/open": { @@ -8746,15 +8922,6 @@ "node": ">=8" } }, - "node_modules/package-json/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -8837,7 +9004,7 @@ "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=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -9060,7 +9227,7 @@ "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -9069,7 +9236,7 @@ "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, "engines": { "node": ">=4" @@ -9301,15 +9468,10 @@ "rc": "cli.js" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } @@ -9391,12 +9553,12 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "dependencies": { - "rc": "^1.2.8" + "rc": "1.2.8" }, "engines": { "node": ">=6.0.0" @@ -9450,7 +9612,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } @@ -9500,11 +9662,11 @@ "peer": true }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9547,7 +9709,7 @@ "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "dependencies": { "lowercase-keys": "^1.0.0" @@ -9566,27 +9728,6 @@ "node": ">=4" } }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "peer": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9598,17 +9739,15 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-parallel": { @@ -9670,14 +9809,11 @@ } }, "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/semver-diff": { @@ -9692,15 +9828,6 @@ "node": ">=8" } }, - "node_modules/semver-diff/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/serialize-error": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", @@ -9811,6 +9938,15 @@ "node": ">=8.0.0" } }, + "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, + "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", @@ -9821,15 +9957,6 @@ "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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -9845,7 +9972,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/ssri": { "version": "8.0.1", @@ -10104,6 +10231,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tempy/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==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", @@ -10205,7 +10344,7 @@ "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=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } @@ -10290,9 +10429,9 @@ "peer": true }, "node_modules/ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -10344,6 +10483,21 @@ "node": ">=6" } }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -10358,7 +10512,7 @@ "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" @@ -10410,9 +10564,9 @@ } }, "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10587,9 +10741,9 @@ } }, "node_modules/update-notifier/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": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -10620,7 +10774,7 @@ "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { "prepend-http": "^2.0.0" @@ -10668,9 +10822,9 @@ } }, "node_modules/v8-to-istanbul/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==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { "node": ">= 8" @@ -10831,7 +10985,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "2.4.3", @@ -10845,9 +10999,9 @@ } }, "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", "dev": true, "engines": { "node": ">=8.3.0" @@ -10992,11 +11146,12 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { @@ -11013,24 +11168,24 @@ "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" }, "@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "dependencies": { @@ -11046,11 +11201,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -11062,6 +11212,18 @@ "@babel/types": "^7.18.2", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-annotate-as-pure": { @@ -11092,13 +11254,6 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.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==" - } } }, "@babel/helper-create-class-features-plugin": { @@ -11140,14 +11295,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==", - "peer": true - } } }, "@babel/helper-environment-visitor": { @@ -11299,19 +11446,19 @@ } }, "@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@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==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -11347,17 +11494,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "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=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -12085,14 +12232,6 @@ "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", "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==", - "peer": true - } } }, "@babel/plugin-transform-shorthand-properties": { @@ -12252,14 +12391,6 @@ "babel-plugin-polyfill-regenerator": "^0.3.0", "core-js-compat": "^3.22.1", "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==", - "peer": true - } } }, "@babel/preset-modules": { @@ -12453,11 +12584,16 @@ "wrap-ansi": "^7.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==", - "peer": true + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } } } }, @@ -12488,6 +12624,14 @@ "semver": "7.3.2", "slugify": "^1.3.4", "sucrase": "^3.20.0" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true + } } }, "@expo/config-plugins": { @@ -12581,6 +12725,12 @@ } } }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true + }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -12618,15 +12768,6 @@ "requires": { "ms": "^2.1.1" } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } } } }, @@ -12685,6 +12826,12 @@ } } }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true + }, "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -12780,6 +12927,15 @@ "sudo-prompt": "9.1.1" }, "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, "sudo-prompt": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", @@ -12853,6 +13009,12 @@ "universalify": "^2.0.0" } }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "peer": true + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -13121,6 +13283,17 @@ "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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" + } + } } }, "@jest/environment": { @@ -13191,14 +13364,6 @@ "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.1.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 - } } }, "@jest/source-map": { @@ -13210,14 +13375,6 @@ "callsites": "^3.0.0", "graceful-fs": "^4.2.9", "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 - } } }, "@jest/test-result": { @@ -13267,12 +13424,6 @@ "write-file-atomic": "^3.0.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 - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -13301,19 +13452,18 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "requires": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@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==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" }, "@jridgewell/set-array": { "version": "1.1.1", @@ -13321,9 +13471,9 @@ "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" }, "@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==" + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" }, "@jridgewell/trace-mapping": { "version": "0.3.13", @@ -13396,6 +13546,15 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "peer": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -13541,9 +13700,9 @@ } }, "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -13580,9 +13739,9 @@ } }, "@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, "requires": { "jest-matcher-utils": "^27.0.0", @@ -13595,14 +13754,14 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" + "version": "16.11.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", + "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" }, "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", "dev": true }, "@types/stack-utils": { @@ -13652,9 +13811,9 @@ "peer": true }, "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "abbrev": { @@ -13674,9 +13833,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-globals": { @@ -13803,7 +13962,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", @@ -13818,18 +13977,6 @@ "requires": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } } }, "babel-jest": { @@ -13904,14 +14051,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==", - "peer": true - } } }, "babel-plugin-polyfill-corejs3": { @@ -13989,9 +14128,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base58-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.0.tgz", - "integrity": "sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", + "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==" }, "base64-js": { "version": "1.5.1", @@ -14247,6 +14386,15 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "peer": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -14305,9 +14453,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==" }, "chalk": { "version": "4.1.2", @@ -14359,9 +14507,9 @@ "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==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" }, "cjs-module-lexer": { "version": "1.2.2", @@ -14415,7 +14563,7 @@ "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -14424,7 +14572,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, "collect-v8-coverage": { @@ -14481,7 +14629,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "configstore": { "version": "5.0.1", @@ -14675,7 +14823,7 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -14684,7 +14832,7 @@ "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "deep-extend": { @@ -14712,47 +14860,6 @@ "requires": { "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "requires": { - "path-key": "^2.0.0" - } - } } }, "defaults": { @@ -14808,12 +14915,23 @@ "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "depd": { "version": "1.1.2", @@ -14828,9 +14946,9 @@ "dev": true }, "did-resolver": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz", - "integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", + "integrity": "sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg==" }, "diff-sequences": { "version": "27.5.1", @@ -14876,7 +14994,7 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, "ee-first": { @@ -14984,15 +15102,6 @@ "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "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, - "optional": true - } } }, "esprima": { @@ -15018,69 +15127,24 @@ "peer": true }, "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "peer": true, "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "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" - } - }, - "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 - }, - "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 - }, - "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" - } - } + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "expect": { @@ -15315,7 +15379,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastq": { @@ -15469,9 +15533,9 @@ "peer": true }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -15507,7 +15571,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -15555,10 +15619,12 @@ "peer": true }, "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } }, "getenv": { "version": "1.0.0", @@ -15594,6 +15660,14 @@ "dev": true, "requires": { "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } } }, "globals": { @@ -15632,17 +15706,6 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } } }, "graceful-fs": { @@ -15789,9 +15852,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -15821,13 +15884,13 @@ "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "import-local": { @@ -15843,7 +15906,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", @@ -15860,7 +15923,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -15872,10 +15935,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-ip": { "version": "4.3.0", @@ -15911,7 +15973,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-binary-path": { @@ -15947,9 +16009,9 @@ } }, "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==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "requires": { "has": "^1.0.3" } @@ -15963,7 +16025,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -16061,14 +16123,15 @@ "peer": 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==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "peer": true }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-valid-path": { @@ -16098,7 +16161,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -16107,9 +16170,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -16117,14 +16180,6 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "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 - } } }, "istanbul-lib-report": { @@ -16147,48 +16202,136 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "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", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "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.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "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.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "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" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "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 + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } } } }, - "istanbul-reports": { - "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", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "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.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "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.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, "jest-circus": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", @@ -16542,6 +16685,102 @@ "jest-util": "^27.5.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "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 + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + } } }, "jest-serializer": { @@ -16582,6 +16821,17 @@ "natural-compare": "^1.4.0", "pretty-format": "^27.5.1", "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "jest-util": { @@ -16726,6 +16976,19 @@ "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "jsesc": { @@ -16736,7 +16999,7 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-parse-even-better-errors": { @@ -16824,7 +17087,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -16864,7 +17127,7 @@ "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "log-symbols": { @@ -16969,14 +17232,6 @@ "dev": 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 - } } }, "make-error": { @@ -17121,10 +17376,10 @@ } }, "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 + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "peer": true }, "mimic-response": { "version": "1.0.1", @@ -17211,9 +17466,9 @@ } }, "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, "ms": { "version": "2.1.2", @@ -17221,9 +17476,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multiformats": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", - "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, "mv": { "version": "2.1.1", @@ -17277,7 +17532,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "ncp": { @@ -17347,7 +17602,7 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node-releases": { @@ -17356,9 +17611,9 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", + "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", "dev": true, "requires": { "chokidar": "^3.5.2", @@ -17385,7 +17640,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "semver": { @@ -17408,7 +17663,7 @@ "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, "requires": { "abbrev": "1" @@ -17447,20 +17702,12 @@ } }, "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, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "peer": true, "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "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-key": "^2.0.0" } }, "nullthrows": { @@ -17511,18 +17758,18 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "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, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "peer": true, "requires": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^1.0.0" } }, "open": { @@ -17713,14 +17960,6 @@ "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.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 - } } }, "parse-json": { @@ -17789,7 +18028,7 @@ "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=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "2.0.1", @@ -17952,13 +18191,13 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "prettier": { @@ -18125,15 +18364,10 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" } } }, @@ -18202,12 +18436,12 @@ } }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "registry-url": { @@ -18251,7 +18485,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", @@ -18294,11 +18528,11 @@ "peer": true }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -18326,7 +18560,7 @@ "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" @@ -18340,23 +18574,6 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "peer": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "peer": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } } }, "reusify": { @@ -18366,9 +18583,10 @@ "peer": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "peer": true, "requires": { "glob": "^7.1.3" } @@ -18415,9 +18633,9 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "semver-diff": { "version": "3.1.1", @@ -18426,14 +18644,6 @@ "dev": true, "requires": { "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 - } } }, "serialize-error": { @@ -18523,6 +18733,12 @@ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", "peer": true }, + "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 + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -18531,14 +18747,6 @@ "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 - } } }, "split": { @@ -18553,7 +18761,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "ssri": { "version": "8.0.1", @@ -18740,6 +18948,12 @@ "unique-string": "^2.0.0" }, "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true + }, "type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", @@ -18822,7 +19036,7 @@ "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=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-readable-stream": { "version": "1.0.0", @@ -18886,9 +19100,9 @@ "peer": true }, "ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", "dev": true, "requires": { "bs-logger": "0.x", @@ -18906,6 +19120,15 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -18923,7 +19146,7 @@ "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" @@ -18960,9 +19183,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, "ua-parser-js": { @@ -19074,9 +19297,9 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -19103,7 +19326,7 @@ "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" @@ -19138,9 +19361,9 @@ }, "dependencies": { "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true } } @@ -19276,7 +19499,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "2.4.3", @@ -19290,9 +19513,9 @@ } }, "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", "dev": true, "requires": {} }, From 017fa26aa0f23cb4590f5d5af192121c3772a0cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 23 Feb 2023 17:41:17 +0100 Subject: [PATCH 121/133] Don't apply key codec before encoding with multibase --- src/identity/hcs/did/hcs-did.ts | 2 +- src/utils/hashing.ts | 26 +++++++------------------- test/integration/hcs-did.test.ts | 14 +++++++------- 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index 5a284de..eac15aa 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -473,7 +473,7 @@ export class HcsDid { const didIdString = didParts.shift(); - if (didIdString.length < 48 || didParts.shift()) { + if (didIdString.length < 44 || didParts.shift()) { throw new DidError( "DID string is invalid. ID holds incorrect format.", DidErrorCode.INVALID_DID_STRING diff --git a/src/utils/hashing.ts b/src/utils/hashing.ts index de5766f..92ba63c 100644 --- a/src/utils/hashing.ts +++ b/src/utils/hashing.ts @@ -1,9 +1,7 @@ import * as crypto from "crypto"; -import { base58btc } from "multiformats/bases/base58"; import { Base64 } from "js-base64"; -import { MultibaseEncoder, MultibaseDecoder } from "multiformats/bases/interface"; -import { Ed25519PubCodec } from "./ed25519PubCodec"; -import { BlockCodec } from "multiformats/codecs/interface"; +import { base58btc } from "multiformats/bases/base58"; +import { MultibaseDecoder, MultibaseEncoder } from "multiformats/bases/interface"; export class Hashing { public static readonly sha256 = { @@ -27,26 +25,16 @@ export class Hashing { /** * @returns Multibase [MULTIBASE] base58-btc encoded value that is a concatenation of the - * Multicodec [MULTICODEC] identifier for the public key type and the raw bytes associated with the public key format. - * MULTIBASE(base58-btc, MULTICODEC(public-key-type, raw-public-key-bytes)) + * MULTIBASE(base58-btc, raw-public-key-bytes) * https://github.com/multiformats/multibase * https://www.w3.org/TR/did-core/#dfn-publickeymultibase */ public static readonly multibase = { - encode: function ( - data: Uint8Array, - base: MultibaseEncoder = base58btc, - codec: BlockCodec = new Ed25519PubCodec() - ): string { - // MULTICODEC(public-key-type, raw-public-key-bytes) - return base.encode(codec.encode(data)); + encode: function (data: Uint8Array, base: MultibaseEncoder = base58btc): string { + return base.encode(data); }, - decode: function ( - data: string, - base: MultibaseDecoder = base58btc, - codec: BlockCodec = new Ed25519PubCodec() - ): Uint8Array { - return codec.decode(base.decode(data)); + decode: function (data: string, base: MultibaseDecoder = base58btc): Uint8Array { + return base.decode(data); }, }; } diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index e7f8903..e8a344a 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -1,7 +1,7 @@ import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; import { DidError, Hashing, HcsDid } from "../../dist"; -const TOPIC_REGEXP = /^0\.0\.[0-9]{8,}/; +const TOPIC_REGEXP = /^0\.0\.[0-9]{3,}/; const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; @@ -1011,12 +1011,12 @@ async function readTopicMessages(topicId, client, timeout = null) { const messages = []; await new TopicMessageQuery() - .setTopicId(topicId) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, null, (msg) => { - messages.push(msg); - }); + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())) + .subscribe(client, null, (msg) => { + messages.push(msg); + }); /** * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read From 5d591057c7f7d3d294c955941a1fab6d3f1b9285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 27 Feb 2023 17:48:56 +0100 Subject: [PATCH 122/133] Upgrade @hashgraph/sdk. Fix tests --- README.md | 12 +- demo/1_generate_register_did.js | 2 +- demo/2_add_update_revoke_service.js | 2 +- ...2_add_update_revoke_verification_method.js | 8 +- ...update_revoke_verification_relationship.js | 10 +- demo/3_read_did_messages.js | 2 +- demo/4_resolve_did.js | 2 +- demo/5_change_did_ownership.js | 2 +- demo/6_delete_did_document.js | 2 +- jest.setup.js | 2 + package-lock.json | 18632 ++++------------ package.json | 2 +- .../hcs/did/hcs-did-event-message-resolver.ts | 2 +- .../hcs/did/hcs-did-topic-listener.ts | 4 + test/integration/did-resolver.test.ts | 10 +- test/integration/hcs-did.test.ts | 82 +- test/unit/did-document.test.ts | 10 +- test/unit/did-parser.test.ts | 4 +- .../hcs-did-create-did-owner-event.test.ts | 24 +- .../hcs-did-update-did-owner-event.test.ts | 24 +- .../hcs-did-create-service-event.test.ts | 12 +- .../hcs-did-revoke-service-event.test.ts | 12 +- .../hcs-did-update-service-event.test.ts | 12 +- ...d-create-verification-method-event.test.ts | 28 +- ...d-revoke-verification-method-event.test.ts | 12 +- ...d-update-verification-method-event.test.ts | 28 +- ...te-verification-relationship-event.test.ts | 28 +- ...ke-verification-relationship-event.test.ts | 12 +- ...te-verification-relationship-event.test.ts | 28 +- test/unit/hashing.test.ts | 8 +- test/unit/hcs-did-message.test.ts | 3 +- test/unit/hcs-did-transaction.test.ts | 2 +- test/unit/hsc-did.test.ts | 20 +- 33 files changed, 5023 insertions(+), 14020 deletions(-) diff --git a/README.md b/README.md index f31b7f6..7ada595 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ const client = Client.forTestnet(); /** * CHANGE IT. use values from step 1: registered DID console output */ -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance @@ -140,7 +140,7 @@ client.setOperator(OPERATOR_ID, OPERATOR_KEY); const existingOwnerDIDPrivateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance @@ -201,7 +201,7 @@ client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance @@ -277,7 +277,7 @@ client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance @@ -362,7 +362,7 @@ client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance @@ -452,7 +452,7 @@ client.setOperator(OPERATOR_ID, privateKey); const didPrivateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); -const existingDIDIdentifier = "did:hedera:testnet:z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB_0.0.29656526"; +const existingDIDIdentifier = "did:hedera:testnet:zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo_0.0.29656526"; /** * Build DID instance diff --git a/demo/1_generate_register_did.js b/demo/1_generate_register_did.js index b53f163..eda75b9 100644 --- a/demo/1_generate_register_did.js +++ b/demo/1_generate_register_did.js @@ -6,7 +6,7 @@ async function main() { /** * Client setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, OPERATOR_KEY); /** diff --git a/demo/2_add_update_revoke_service.js b/demo/2_add_update_revoke_service.js index bb80694..0847b7a 100644 --- a/demo/2_add_update_revoke_service.js +++ b/demo/2_add_update_revoke_service.js @@ -6,7 +6,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); diff --git a/demo/2_add_update_revoke_verification_method.js b/demo/2_add_update_revoke_verification_method.js index 19115a9..74dcf34 100644 --- a/demo/2_add_update_revoke_verification_method.js +++ b/demo/2_add_update_revoke_verification_method.js @@ -6,7 +6,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); @@ -17,10 +17,10 @@ async function main() { const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationMethodIdentifier = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; - const verificationMethodPublicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801"; + const verificationMethodPublicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); const updatedVerificationMethodPublicKey = HcsDid.stringToPublicKey( - "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" + "zAvU2AEh8ybRqNwHAM3CjbkjYaYHpt9oA1uugW9EVTg6P" ); /** diff --git a/demo/2_add_update_revoke_verification_relationship.js b/demo/2_add_update_revoke_verification_relationship.js index 0e85df6..654e3a6 100644 --- a/demo/2_add_update_revoke_verification_relationship.js +++ b/demo/2_add_update_revoke_verification_relationship.js @@ -6,7 +6,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, OPERATOR_KEY); const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); @@ -17,12 +17,10 @@ async function main() { const registeredDid = new HcsDid({ identifier: DID_IDENTIFIER, privateKey: didPrivateKey, client: client }); const verificationRelationshipIdentifier = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801"; - const verificationRelationshipPublicKey = HcsDid.stringToPublicKey( - "z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk" - ); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801"; + const verificationRelationshipPublicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); const updatedVerificationRelationshipPublicKey = HcsDid.stringToPublicKey( - "z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P" + "zAvU2AEh8ybRqNwHAM3CjbkjYaYHpt9oA1uugW9EVTg6P" ); const verificationRelationshipType = "authentication"; diff --git a/demo/3_read_did_messages.js b/demo/3_read_did_messages.js index ee65ab0..288540b 100644 --- a/demo/3_read_did_messages.js +++ b/demo/3_read_did_messages.js @@ -6,7 +6,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); /** * Build DID instance diff --git a/demo/4_resolve_did.js b/demo/4_resolve_did.js index 1eacb55..388aebb 100644 --- a/demo/4_resolve_did.js +++ b/demo/4_resolve_did.js @@ -6,7 +6,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); /** * Build DID instance diff --git a/demo/5_change_did_ownership.js b/demo/5_change_did_ownership.js index fb419d3..cd56fc1 100644 --- a/demo/5_change_did_ownership.js +++ b/demo/5_change_did_ownership.js @@ -25,7 +25,7 @@ async function main() { /** * Setup */ - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, OPERATOR_KEY); const existingOwnerDIDPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); diff --git a/demo/6_delete_did_document.js b/demo/6_delete_did_document.js index 3531d17..f8b28ab 100644 --- a/demo/6_delete_did_document.js +++ b/demo/6_delete_did_document.js @@ -7,7 +7,7 @@ async function main() { * Client setup */ const privateKey = PrivateKey.fromString(OPERATOR_KEY); - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setOperator(OPERATOR_ID, privateKey); const didPrivateKey = PrivateKey.fromString(DID_PRIVATE_KEY); diff --git a/jest.setup.js b/jest.setup.js index f054448..ed9aa67 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,3 +1,5 @@ // process.env.OPERATOR_ID = "0.0.xxxxxx"; // process.env.OPERATOR_KEY = // "302e02..."; + +process.env.WAIT_BEFORE_RESOLVE_DID_FOR = 9000; diff --git a/package-lock.json b/package-lock.json index 0eb2f4f..caec60d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "^2.16.1", + "@hashgraph/sdk": "^2.20.0", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", @@ -35,6 +35,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -47,6 +48,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -55,6 +57,7 @@ "version": "7.18.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -63,6 +66,7 @@ "version": "7.18.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -92,6 +96,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, "dependencies": { "@babel/highlight": "^7.16.7" }, @@ -103,6 +108,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -114,6 +120,7 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, "dependencies": { "@babel/types": "^7.18.2", "@jridgewell/gen-mapping": "^0.3.0", @@ -127,6 +134,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -136,35 +144,11 @@ "node": ">=6.0.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==", - "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==", - "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.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", @@ -178,78 +162,11 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.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.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "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==", - "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-environment-visitor": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", - "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==", - "peer": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, + "dev": true, "engines": { "node": ">=6.9.0" } @@ -258,6 +175,7 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" @@ -270,6 +188,7 @@ "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -277,22 +196,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "peer": true, - "dependencies": { - "@babel/types": "^7.17.0" - }, - "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -304,6 +212,7 @@ "version": "7.18.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -318,52 +227,11 @@ "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==", - "peer": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "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==", - "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.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - }, + "dev": true, "engines": { "node": ">=6.9.0" } @@ -372,6 +240,7 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "dev": true, "dependencies": { "@babel/types": "^7.18.2" }, @@ -379,22 +248,11 @@ "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==", - "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, "dependencies": { "@babel/types": "^7.16.7" }, @@ -406,6 +264,7 @@ "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, "engines": { "node": ">=6.9.0" } @@ -414,21 +273,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "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==", - "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" - }, + "dev": true, "engines": { "node": ">=6.9.0" } @@ -437,6 +282,7 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.18.2", @@ -450,6 +296,7 @@ "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -463,6 +310,7 @@ "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, "dependencies": { "color-convert": "^1.9.0" }, @@ -474,6 +322,7 @@ "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, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -487,6 +336,7 @@ "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, "dependencies": { "color-name": "1.1.3" } @@ -494,12 +344,14 @@ "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -508,6 +360,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -516,6 +369,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -524,9 +378,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -534,180 +388,145 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "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.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "peer": true, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.13.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "peer": true, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", - "peer": true, + "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, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", - "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", - "peer": true, + "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, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.12", - "charcodes": "^0.2.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-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==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", - "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-default-from": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "peer": true, + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -716,14 +535,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-typescript": { "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -732,3810 +550,3296 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/template": { "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==", - "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.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/template/node_modules/@babel/code-frame": { "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==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/highlight": "^7.16.7" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "peer": true, + "node_modules/@babel/traverse": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "peer": true, + "node_modules/@babel/traverse/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, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/highlight": "^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.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "peer": true, + "node_modules/@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "peer": true, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/logger": "^5.7.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==", + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, + "node_modules/@grpc/grpc-js": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", + "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^8.13.0 || >=10.10.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==", + "node_modules/@grpc/proto-loader": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", + "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" } }, - "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==", - "peer": true, + "node_modules/@hashgraph/cryptography": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.3.tgz", + "integrity": "sha512-txU2SVz8mBJ5aHqkrIpmaerJSu0F/S9T/0eXpYAIC2USy/8oTisp54gKVDTETFdnCrq0tNgCJmWt2N8QHMMbcw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "bignumber.js": "^9.1.1", + "crypto-js": "^4.1.1", + "elliptic": "^6.5.4", + "js-base64": "^3.7.4", + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=12.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "expo": "^45.0.3", + "expo-crypto": "^10.1.2", + "expo-random": "^12.1.2" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-crypto": { + "optional": true + }, + "expo-random": { + "optional": true + } } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", - "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", - "peer": true, + "node_modules/@hashgraph/proto": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.12.0.tgz", + "integrity": "sha512-IIN6K3b2X8ih7V14IDH8rsVJ1DE9ud25FfKUpr+lDNnQdBfdZdG2AGlHRhc9iDAz4vCHoHc6F3Ao6yYKMceeTg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "long": "^4.0.0", + "protobufjs": "^7.1.2", + "protobufjs-cli": "^1.0.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10.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==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@hashgraph/sdk": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.20.0.tgz", + "integrity": "sha512-Scc/mP7FtTnw5DZnGWK6YxYoAPmBC+GEnrzzcCgjAVa2YA/3Dbr4qXk3XFPVOXY5G9qxW0O5/j2z9BxY+/yrXg==", + "dependencies": { + "@ethersproject/rlp": "^5.7.0", + "@grpc/grpc-js": "^1.7.3", + "@hashgraph/cryptography": "^1.4.3", + "@hashgraph/proto": "2.12.0", + "axios": "^1.3.1", + "bignumber.js": "^9.1.1", + "crypto-js": "^4.1.1", + "js-base64": "^3.7.4", + "js-logger": "^1.6.1", + "long": "^4.0.0", + "protobufjs": "^7.1.2", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=10.17.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "expo": "^45.0.3" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } } }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", - "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", - "peer": true, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "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==", - "peer": true, + "node_modules/@istanbuljs/load-nyc-config/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, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", - "peer": true, + "node_modules/@istanbuljs/load-nyc-config/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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", - "peer": true, + "node_modules/@istanbuljs/load-nyc-config/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, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "p-try": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=6" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@istanbuljs/load-nyc-config/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, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "p-limit": "^2.2.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" } }, - "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==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@istanbuljs/load-nyc-config/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, + "engines": { + "node": ">=8" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "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==", + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@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.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", + "strip-ansi": "^6.0.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==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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==", + "node_modules/@jest/environment": { + "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": { - "@babel/helper-plugin-utils": "^7.8.0" + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "node_modules/@jest/fake-timers": { + "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": { - "@babel/helper-plugin-utils": "^7.8.0" + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", - "peer": true, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@bcoe/v8-coverage": "^0.2.3", + "@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.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "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", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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==", + "node_modules/@jest/source-map": { + "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": { - "@babel/helper-plugin-utils": "^7.14.5" + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "node_modules/@jest/test-result": { + "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": { - "@babel/helper-plugin-utils": "^7.17.12" + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", - "peer": true, + "node_modules/@jest/test-sequencer": { + "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": { - "@babel/helper-plugin-utils": "^7.17.12" + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", - "peer": true, + "node_modules/@jest/transform": { + "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/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/core": "^7.1.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.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.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", - "peer": true, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", - "peer": true, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "peer": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.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==", - "peer": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": 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" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", - "peer": true, + "node_modules/@jsdoc/salty": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", + "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "lodash": "^4.17.21" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v12.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==", - "peer": true, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "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" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", - "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-flow": "^7.17.12" - }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", - "peer": true, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "type-detect": "4.0.8" } }, - "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==", - "peer": true, + "node_modules/@sinonjs/fake-timers": { + "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": { - "@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" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", - "peer": true, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "defer-to-connect": "^1.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "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==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 6" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", - "peer": true, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "peer": true, + "node_modules/@types/babel__generator": { + "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/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/types": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", - "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", - "peer": true, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@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" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", - "peer": true, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/types": "^7.3.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", - "peer": true, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", - "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", - "peer": true, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", - "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", - "peer": true, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/istanbul-lib-report": "*" } }, - "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==", - "peer": true, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": 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" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", - "peer": true, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/linkify-it": "*", + "@types/mdurl": "*" } }, - "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==", - "peer": true, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "node_modules/@types/node": { + "version": "16.11.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", + "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=0.4.0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "peer": true, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6.9.0" - }, + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "peerDependencies": { - "@babel/core": "^7.0.0-0" + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=0.4.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", - "peer": true, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "debug": "4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 6.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", - "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.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", - "peer": true, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "string-width": "^4.1.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", - "peer": true, + "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": { - "@babel/helper-plugin-utils": "^7.17.12" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", - "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - }, + "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==", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "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==", - "peer": true, + "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==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", - "peer": true, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "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==", - "peer": true, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "sprintf-js": "~1.0.2" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", - "peer": true, + "node_modules/axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", - "peer": true, + "node_modules/babel-jest": { + "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": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.8.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==", - "peer": true, + "node_modules/babel-plugin-istanbul": { + "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.16.7" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "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==", - "peer": true, + "node_modules/babel-plugin-jest-hoist": { + "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/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@babel/preset-env": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "peer": true, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@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-import-assertions": "^7.17.12", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@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.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@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.18.2", - "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.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "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==", - "peer": true, + "node_modules/babel-preset-jest": { + "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/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-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.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==" }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, + "node_modules/base58-js": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", + "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==", "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/template/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==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", "engines": { - "node": ">=6.9.0" + "node": "*" } }, - "node_modules/@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/traverse/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==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { - "@ethersproject/logger": "^5.6.0" + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, - "node_modules/@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "dev": true, "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" } ], "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", - "engines": [ - "node >=0.10.0" - ], - "peer": true, - "dependencies": { - "uuid": "^8.0.0" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.0" }, - "optionalDependencies": { - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/@expo/bunyan/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==", - "peer": true, "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@expo/cli": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", - "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.14.0", - "@expo/code-signing-certificates": "^0.0.2", - "@expo/config": "~6.0.23", - "@expo/config-plugins": "~4.1.4", - "@expo/dev-server": "~0.1.110", - "@expo/devcert": "^1.0.0", - "@expo/json-file": "^8.2.35", - "@expo/metro-config": "~0.3.16", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~0.0.52", - "@expo/plist": "^0.0.18", - "@expo/prebuild-config": "~4.0.0", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.1.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "internal-ip": "4.3.0", - "is-root": "^2.1.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "requireg": "^0.2.2", - "resolve-from": "^5.0.0", - "semver": "^6.3.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "uuid": "^3.4.0", - "wrap-ansi": "^7.0.0" + "browserslist": "cli.js" }, - "bin": { - "expo-internal": "build/bin/cli" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@expo/cli/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "peer": true, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "fast-json-stable-stringify": "2.x" }, "engines": { "node": ">= 6" } }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", - "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", - "peer": true, - "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/@expo/config": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", - "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", - "peer": true, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.1.5", - "@expo/config-types": "^45.0.0", - "@expo/json-file": "8.2.36", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" + "node-int64": "^0.4.0" } }, - "node_modules/@expo/config-plugins": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", - "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", - "peer": true, - "dependencies": { - "@expo/config-types": "^45.0.0", - "@expo/json-file": "8.2.36", - "@expo/plist": "0.0.18", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.3.5", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.4.23" - } + "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 }, - "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "peer": true, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config-types": { - "version": "45.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", - "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", - "peer": true - }, - "node_modules/@expo/config/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/dev-server": { - "version": "0.1.113", - "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", - "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", - "peer": true, - "dependencies": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "0.3.18", - "@expo/osascript": "2.0.33", - "body-parser": "1.19.0", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" + "node": ">=8" } }, - "node_modules/@expo/dev-server/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, + "node_modules/cacheable-request/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": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/dev-server/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": true, - "dependencies": { - "universalify": "^2.0.0" + "node": ">=8" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/dev-server/node_modules/jsonfile/node_modules/universalify": { + "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true, + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/@expo/dev-server/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@expo/dev-server/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/devcert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", - "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", - "peer": true, - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^1.10.0" - } - }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "peer": true, - "dependencies": { - "ms": "^2.1.1" + "node": ">=6" } }, - "node_modules/@expo/image-utils": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", - "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", - "peer": true, - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/image-utils/node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "peer": true, - "engines": { - "node": ">=4" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "lodash": "^4.17.15" }, "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@expo/image-utils/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": 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==", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/image-utils/node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "peer": true, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@expo/image-utils/node_modules/tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "peer": true, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" + "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" }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@expo/image-utils/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "peer": true, - "engines": { - "node": ">=6" - } + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true }, - "node_modules/@expo/image-utils/node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "peer": true, - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/json-file": { - "version": "8.2.36", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", - "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", - "peer": true, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/@expo/metro-config": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", - "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", - "peer": true, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, "dependencies": { - "@expo/config": "6.0.24", - "@expo/json-file": "8.2.36", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" + "mimic-response": "^1.0.0" } }, - "node_modules/@expo/osascript": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", - "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", - "peer": true, - "dependencies": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" - }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { - "node": ">=12" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/@expo/package-manager": { - "version": "0.0.55", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", - "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", - "peer": true, - "dependencies": { - "@expo/json-file": "8.2.36", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "npm-package-arg": "^7.0.0", - "rimraf": "^3.0.2", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - } + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, - "node_modules/@expo/package-manager/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, + "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==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@expo/package-manager/node_modules/sudo-prompt": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", - "peer": true - }, - "node_modules/@expo/plist": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", - "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", - "peer": true, - "dependencies": { - "@xmldom/xmldom": "~0.7.0", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.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==" }, - "node_modules/@expo/prebuild-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", - "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", - "peer": true, - "dependencies": { - "@expo/config": "6.0.24", - "@expo/config-plugins": "4.1.5", - "@expo/config-types": "^45.0.0", - "@expo/image-utils": "0.3.20", - "@expo/json-file": "8.2.36", - "debug": "^4.3.1", - "expo-modules-autolinking": "0.8.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "xml2js": "0.4.23" - } - }, - "node_modules/@expo/prebuild-config/node_modules/expo-modules-autolinking": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", - "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", - "peer": true, + "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==", "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" + "delayed-stream": "~1.0.0" }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@expo/prebuild-config/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==", - "peer": true, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@expo/prebuild-config/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": true, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "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, + "dependencies": { + "safe-buffer": "~5.1.1" } }, - "node_modules/@expo/prebuild-config/node_modules/universalify": { + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/crypto-random-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true, + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", - "peer": true, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, "dependencies": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" + "cssom": "~0.3.6" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/rudder-sdk-node/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==", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=8" } }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "peer": true + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, - "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "peer": true, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, "dependencies": { - "cross-spawn": "^6.0.5" + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@expo/vector-icons": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", - "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", - "peer": true - }, - "node_modules/@expo/xcpretty": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", - "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", - "peer": true, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" + "ms": "2.1.2" }, - "bin": { - "excpretty": "build/cli.js" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@expo/xcpretty/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "peer": true + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true }, - "node_modules/@expo/xcpretty/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "peer": true, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, "dependencies": { - "argparse": "^2.0.1" + "mimic-response": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=4" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "peer": true - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", - "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", - "peer": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, - "node_modules/@grpc/grpc-js": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", - "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", - "dependencies": { - "@grpc/proto-loader": "^0.6.4", - "@types/node": ">=12.12.47" - }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": ">=4.0.0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "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": ">=6" + "node": ">=0.10.0" } }, - "node_modules/@hashgraph/cryptography": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", - "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", - "dependencies": { - "bignumber.js": "^9.0.2", - "crypto-js": "^4.1.1", - "elliptic": "^6.5.4", - "js-base64": "^3.7.2", - "tweetnacl": "^1.0.3", - "utf8": "^3.0.0" - }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "expo": "^45.0.3", - "expo-crypto": "^10.1.2", - "expo-random": "^12.1.2" + "node": ">=0.4.0" } }, - "node_modules/@hashgraph/proto": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", - "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", - "dependencies": { - "long": "^4.0.0", - "protobufjs": "^6.11.2" - }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/@hashgraph/sdk": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.16.1.tgz", - "integrity": "sha512-Yk9M88hDqJIE2SxLp+llmTvemuWaqJS+5C4cr8MZoELHxsaGRFPwfqTLV8Hz/fcLEfdxXLhYItbJmyaCA0na5Q==", - "dependencies": { - "@ethersproject/rlp": "^5.6.0", - "@grpc/grpc-js": "^1.6.7", - "@hashgraph/cryptography": "^1.3.0", - "@hashgraph/proto": "2.5.0", - "axios": "^0.27.2", - "bignumber.js": "^9.0.2", - "crypto-js": "^4.1.1", - "js-base64": "^3.7.2", - "js-logger": "^1.6.1", - "long": "^4.0.0", - "protobufjs": "^6.11.2", - "utf8": "^3.0.0" - }, + "node_modules/did-resolver": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", + "integrity": "sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg==" + }, + "node_modules/diff-sequences": { + "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.17.0" - }, - "peerDependencies": { - "expo": "^45.0.3" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.168", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dependencies": { - "p-try": "^2.0.0" - }, + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "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==" + }, + "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": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "once": "^1.4.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "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", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/console": { - "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.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { - "@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.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", - "strip-ansi": "^6.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "engines": { + "node": ">=6.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/@jest/core/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, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dependencies": { - "glob": "^7.1.3" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/environment": { - "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.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/@jest/fake-timers": { - "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.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4.0" } }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "dependencies": { - "@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": ">= 0.8.0" } }, - "node_modules/@jest/reporters": { + "node_modules/expect": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@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.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "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", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "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" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } } }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "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 + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "bser": "2.1.1" } }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/@jest/test-sequencer": { - "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.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "@babel/core": "^7.1.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.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.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 6" } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "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, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.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/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "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, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">=6.0.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "pump": "^3.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true, - "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "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": ">= 8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "peer": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ini": "2.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "peer": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, + "node_modules/global-dirs/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/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "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, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8.6" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "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/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "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==", + "engines": { + "node": ">=8" + } }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@react-native/normalize-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", - "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", - "peer": true - }, - "node_modules/@segment/loosely-validate-event": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", - "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", - "peer": true, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, - "node_modules/@sinonjs/fake-timers": { - "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==", + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=10.17.0" } }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/babel__generator": { - "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==", + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "@types/node": "*" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/@types/istanbul-lib-coverage": { + "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/node": { - "version": "16.11.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", - "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" - }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@urql/core": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", - "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", - "peer": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" + "ci-info": "^2.0.0" }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/@urql/exchange-retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", - "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", - "peer": true, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "dependencies": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" + "has": "^1.0.3" }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", - "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", - "peer": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">=0.10.0" } }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, + "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==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "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, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">=0.12.0" } }, - "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==", - "peer": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "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, - "dependencies": { - "string-width": "^4.1.0" + "engines": { + "node": ">=8" } }, - "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==", - "dependencies": { - "type-fest": "^0.21.3" - }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "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" - }, - "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==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "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==", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "peer": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/istanbul-lib-source-maps": { + "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": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/application-config-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", - "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", - "peer": true - }, - "node_modules/arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "peer": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/istanbul-reports": { + "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": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "peer": true, + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "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==", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/babel-jest": { + "node_modules/jest": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "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==", - "peer": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "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": "^5.0.4", - "test-exclude": "^6.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/babel-plugin-jest-hoist": { + "node_modules/jest-changed-files": { "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==", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", - "peer": true, + "node_modules/jest-changed-files/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": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 8" } }, - "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==", - "peer": true, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "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==", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.17.7", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", - "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", - "peer": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/jest-changed-files/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, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@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-top-level-await": "^7.8.3" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-preset-expo": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", - "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", - "peer": true, - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-transform-react-jsx": "^7.12.17", - "@babel/preset-env": "^7.12.9", - "babel-plugin-module-resolver": "^4.1.0", - "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.67.0" + "node_modules/jest-changed-files/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/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "node_modules/jest-changed-files/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": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "path-key": "^3.0.0" }, - "peerDependencies": { - "@babel/core": "^7.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==" - }, - "node_modules/base58-js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", - "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "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==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "peer": true, + "node_modules/jest-changed-files/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": { - "open": "^8.0.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "peer": true, + "node_modules/jest-changed-files/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": ">=0.6" + "node": ">=8" } }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "node_modules/jest-changed-files/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": "*" + "node": ">=8" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/jest-changed-files/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/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "peer": true - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "peer": true, + "node_modules/jest-changed-files/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": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" + "node": ">= 8" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/jest-circus": { + "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": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "@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.5.1", + "is-generator-fn": "^2.0.0", + "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" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/jest-cli": { + "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.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.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/jest-config": { + "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.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.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", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", - "peer": true, - "dependencies": { - "stream-buffers": "2.2.x" + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "peer": true, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, "dependencies": { - "big-integer": "1.6.x" + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">= 5.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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==", + "node_modules/jest-docblock": { + "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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/jest-each": { + "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": { - "fill-range": "^7.0.1" + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/jest-environment-jsdom": { + "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": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "node_modules/jest-environment-node": { + "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": { - "fast-json-stable-stringify": "2.x" + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { - "node": ">= 6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "peer": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "peer": true - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "peer": true - }, - "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 - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "peer": true - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "peer": true, + "node_modules/jest-get-type": { + "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": ">= 0.8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "peer": true, + "node_modules/jest-haste-map": { + "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": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "@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.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" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "engines": { - "node": ">=10" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@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.5.1", + "is-generator-fn": "^2.0.0", + "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" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/jest-leak-detector": { + "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": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cacheable-request/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==", + "node_modules/jest-matcher-utils": { + "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": { - "pump": "^3.0.0" + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/jest-message-util": { + "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.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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==", - "peer": true, + "node_modules/jest-message-util/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, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@babel/highlight": "^7.16.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/jest-mock": { + "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.5.1", + "@types/node": "*" + }, "engines": { - "node": ">=6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "engines": { "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001359", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "jest-resolve": "*" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/jest-regex-util": { + "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" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/charcodes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", - "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", - "peer": true, + "node_modules/jest-resolve": { + "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.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "peer": true, + "node_modules/jest-resolve-dependencies": { + "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.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, "engines": { - "node": "*" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/jest-runner": { + "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, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "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" + "@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", + "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" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "peer": true, + "node_modules/jest-runtime": { + "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", + "glob": "^7.1.3", + "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" + }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" + "node_modules/jest-runtime/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/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } }, - "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==", - "peer": true, + "node_modules/jest-runtime/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/jest-runtime/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": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { + "node_modules/jest-runtime/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "peer": true, + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-runtime/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": { - "restore-cursor": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "peer": true, + "node_modules/jest-runtime/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" }, @@ -4543,1859 +3847,1531 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "peer": true, + "node_modules/jest-runtime/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": ">=0.8" + "node": ">=8" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "node_modules/jest-runtime/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": { - "mimic-response": "^1.0.0" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/jest-runtime/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": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "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==", + "node_modules/jest-runtime/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": { - "color-name": "~1.1.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "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==" - }, - "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==", + "node_modules/jest-serializer": { + "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": { - "delayed-stream": "~1.0.0" + "@types/node": "*", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "peer": true - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "peer": true, - "engines": { - "node": ">= 10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "peer": true - }, - "node_modules/component-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", - "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "node_modules/jest-snapshot": { + "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": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@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.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.5.1", + "semver": "^7.3.2" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/configstore/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.10.0" + "node": ">=10" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, + "node_modules/jest-util": { + "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": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "peer": true, + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">= 0.6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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==", + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/core-js-compat": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", - "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", - "peer": true, - "dependencies": { - "browserslist": "^4.20.4", - "semver": "7.0.0" + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" }, "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==", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "peer": true, + "node_modules/jest-watcher": { + "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": { - "node-fetch": "2.6.7" + "@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.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": 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, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" + "node": ">= 10.13.0" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "peer": true, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + "node_modules/js-base64": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } + "node_modules/js-logger": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", + "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "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 }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", - "peer": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" + "xmlcreate": "^2.0.4" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" }, - "engines": { - "node": ">=6.0" + "bin": { + "jsdoc": "jsdoc.js" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=12.0.0" } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, "engines": { - "node": ">=4.0.0" + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": 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==", + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "peer": true, - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "peer": true, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "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/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "dependencies": { - "clone": "^1.0.2" + "json-buffer": "3.0.0" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "peer": true, - "engines": { - "node": ">=0.8" + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "peer": true, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "peer": true, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "package-json": "^6.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "peer": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { - "node": ">=0.4.0" + "node": ">= 0.8.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "peer": true, - "engines": { - "node": ">= 0.6" - } + "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/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" } }, - "node_modules/did-resolver": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", - "integrity": "sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg==" + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=0.10.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "peer": 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==", "dependencies": { - "path-type": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "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, "dependencies": { - "webidl-conversions": "^5.0.0" + "semver": "^6.0.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "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/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "tmpl": "1.0.5" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dependencies": { - "is-obj": "^2.0.0" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "engines": { - "node": ">=8" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.168", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", - "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" } }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/marked": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "bin": { + "marked": "bin/marked.js" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "engines": { + "node": ">= 12" } }, - "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==" + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "peer": true, - "engines": { - "node": ">= 0.8" - } + "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/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==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { - "once": "^1.4.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", - "peer": true, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "peer": true - }, - "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, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "mime-db": "1.52.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "peer": true + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": "*" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "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, + "node_modules/moment": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "engines": { - "node": ">=4.0" + "node": "*" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } + "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/exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", - "peer": true + "node_modules/multiformats": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": true, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", + "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", + "dev": true, + "hasInstallScript": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" }, "engines": { - "node": ">=6" + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "@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": ">=4" } }, - "node_modules/expo": { - "version": "45.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", - "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.14.0", - "@expo/cli": "0.1.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.1.0", - "cross-spawn": "^6.0.5", - "expo-application": "~4.1.0", - "expo-asset": "~8.5.0", - "expo-constants": "~13.1.1", - "expo-file-system": "~14.0.0", - "expo-font": "~10.1.0", - "expo-keep-awake": "~10.1.1", - "expo-modules-autolinking": "0.9.0", - "expo-modules-core": "0.9.2", - "fbemitter": "^3.0.0", - "getenv": "^1.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" - }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { - "expo": "bin/cli.js" - }, - "optionalDependencies": { - "expo-error-recovery": "~3.1.0" - } - }, - "node_modules/expo-application": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", - "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-asset": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", - "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", - "peer": true, - "dependencies": { - "blueimp-md5": "^2.10.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" - } - }, - "node_modules/expo-constants": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", - "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", - "peer": true, - "dependencies": { - "@expo/config": "^6.0.14", - "uuid": "^3.3.2" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-crypto": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", - "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-error-recovery": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", - "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", - "optional": true, - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-file-system": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", - "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", - "peer": true, - "dependencies": { - "@expo/config-plugins": "^4.0.14", - "uuid": "^3.4.0" - }, - "peerDependencies": { - "expo": "*" + "semver": "bin/semver" } }, - "node_modules/expo-font": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", - "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", - "peer": true, + "node_modules/nodemon/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, "dependencies": { - "fontfaceobserver": "^2.1.0" + "has-flag": "^3.0.0" }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-keep-awake": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", - "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", - "peer": true, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">=4" } }, - "node_modules/expo-modules-autolinking": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", - "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", - "peer": true, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" + "abbrev": "1" }, "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-modules-autolinking/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==", - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/expo-modules-autolinking/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/expo-modules-autolinking/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/expo-modules-core": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", - "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", - "peer": true, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" + "wrappy": "1" } }, - "node_modules/expo-random": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", - "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", - "peer": true, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dependencies": { - "base64-js": "^1.3.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/expo/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, "engines": { - "node": ">= 10.14.2" + "node": ">=6" } }, - "node_modules/expo/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" + "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, + "engines": { + "node": ">=6" } }, - "node_modules/expo/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "peer": true, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "peer": true, + "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": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@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.6.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } + "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/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "peer": true, - "dependencies": { - "fbjs": "^3.0.0" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "peer": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "peer": true - }, - "node_modules/fetch-retry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", - "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", - "peer": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "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, "dependencies": { - "to-regex-range": "^5.0.1" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "peer": true, + "node_modules/pkg-dir/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, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" + "node": ">=8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "peer": true, + "node_modules/pkg-dir/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, "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "peer": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, + "node_modules/pkg-dir/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, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up/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==", - "peer": true, + "node_modules/pkg-dir/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, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { "node": ">=8" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "peer": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/pkg-dir/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, "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=8" } }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "peer": true - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/freeport-async": { + "node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", - "peer": true, + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=10.13.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "peer": true, + "node_modules/pretty-format": { + "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": { - "minipass": "^3.0.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">= 8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/pretty-format/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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==", + "node_modules/prompts": { + "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", + "sisteransi": "^1.0.5" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 6" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12.0.0" } }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "peer": true, + "node_modules/protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" } }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "peer": true, - "engines": { - "node": ">=4" + "node_modules/protobufjs-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/protobufjs-cli/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dependencies": { - "pump": "^3.0.0" + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=6" + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", - "peer": true, + "node_modules/protobufjs-cli/node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/protobufjs-cli/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "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" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/protobufjs-cli/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { - "is-glob": "^4.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "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, + "node_modules/protobufjs-cli/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { - "ini": "2.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/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/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } + "node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "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": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "peer": true, + "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": ">= 10.x" + "node": ">=6" } }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "peer": true, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, "dependencies": { - "tslib": "^2.1.0" + "escape-goat": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">=8" } }, - "node_modules/graphql-tag/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "peer": 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==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": ">= 0.4.0" + "bin": { + "rc": "cli.js" } }, - "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==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "peer": true, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "picomatch": "^2.2.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "peer": true, - "engines": { - "node": ">= 0.4" + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dev": true, + "dependencies": { + "rc": "1.2.8" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, "engines": { "node": ">=8" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "lodash": "^4.17.21" } }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "peer": true, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "peer": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "peer": true + "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/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" }, - "engines": { - "node": ">= 6" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/https-proxy-agent": { + "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 + }, + "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/saxes": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "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, - "engines": { - "node": ">=10.17.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "semver": "^6.3.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "peer": true, - "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "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/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "peer": true, + "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==", + "devOptional": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "peer": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "peer": true, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "peer": true, + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "peer": true, + "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "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==", "dependencies": { - "binary-extensions": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "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==", - "peer": true - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/is-ci/node_modules/ci-info": { + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "peer": true, - "bin": { - "is-docker": "cli.js" - }, + "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==", "engines": { "node": ">=8" }, @@ -6403,6771 +5379,1194 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "is-extglob": "^2.1.1" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "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==", + "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, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-invalid-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", - "peer": true, - "dependencies": { - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, - "node_modules/is-invalid-path/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "peer": true, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, "dependencies": { - "is-extglob": "^1.0.0" + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, "engines": { "node": ">=8" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "node_modules/is-valid-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", - "peer": true, - "dependencies": { - "is-invalid-path": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "peer": true, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dependencies": { - "is-docker": "^2.0.0" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.17.0" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/isexe": { + "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/istanbul-lib-coverage": { - "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==", + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "nopt": "~1.0.10" }, - "engines": { - "node": ">=8" + "bin": { + "nodetouch": "bin/nodetouch.js" } }, - "node_modules/istanbul-lib-source-maps": { - "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==", + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "punycode": "^2.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "node_modules/ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" }, "bin": { - "jest": "bin/jest.js" + "ts-jest": "cli.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" }, "peerDependenciesMeta": { - "node-notifier": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { "optional": true } } }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "node_modules/ts-jest/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/jest-changed-files/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==", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">= 8" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/jest-changed-files/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==", + "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": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files/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==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "is-typedarray": "^1.0.0" } }, - "node_modules/jest-changed-files/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==", + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, - "dependencies": { - "path-key": "^3.0.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=8" + "node": ">=4.2.0" } }, - "node_modules/jest-changed-files/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" + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "bin": { + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/jest-changed-files/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/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, - "node_modules/jest-changed-files/node_modules/shebang-command": { + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "crypto-random-string": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-changed-files/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==", + "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": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "isexe": "^2.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { - "node-which": "bin/node-which" + "browserslist-lint": "cli.js" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { - "@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.5.1", - "is-generator-fn": "^2.0.0", - "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" + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { - "@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.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "lru-cache": "^6.0.0" }, "bin": { - "jest": "bin/jest.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10" } }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { - "@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.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", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "prepend-http": "^2.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } + "node": ">=4" } }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/v8-to-istanbul": { + "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": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10.12.0" } }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 8" } }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "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" + "browser-process-hrtime": "^1.0.0" } }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "xml-name-validator": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "makeerror": "1.0.12" } }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10.4" } }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "dependencies": { - "@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.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" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "iconv-lite": "0.4.24" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@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.5.1", - "is-generator-fn": "^2.0.0", - "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": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/jest-matcher-utils": { - "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==", + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "string-width": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-message-util": { - "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.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-message-util/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, + "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==", "dependencies": { - "@babel/highlight": "^7.16.7" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/jest-mock": { - "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.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "node_modules/ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8.3.0" }, "peerDependencies": { - "jest-resolve": "*" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "jest-resolve": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { - "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.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true }, - "node_modules/jest-resolve-dependencies": { - "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.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/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, - "node_modules/jest-runner": { - "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.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", - "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" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, - "node_modules/jest-runtime": { - "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", - "glob": "^7.1.3", - "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" - }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/jest-runtime/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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/jest-runtime/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-serializer": { - "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.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "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/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@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.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.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "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.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate": { - "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.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "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.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "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.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "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, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jimp-compact": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", - "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", - "peer": true - }, - "node_modules/join-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", - "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", - "peer": true - }, - "node_modules/js-base64": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", - "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" - }, - "node_modules/js-logger": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", - "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" - }, - "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==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "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-deref-sync": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", - "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", - "peer": true, - "dependencies": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/json-schema-deref-sync/node_modules/md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", - "peer": true, - "dependencies": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "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==" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "peer": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "peer": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/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==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/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==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/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==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/log-symbols/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/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==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/makeerror": { - "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.5" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "peer": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "peer": true, - "dependencies": { - "buffer-alloc": "^1.1.0" - }, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/md5hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", - "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", - "peer": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "peer": true - }, - "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/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", - "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", - "engines": { - "node": "*" - } - }, - "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==" - }, - "node_modules/multiformats": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", - "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "peer": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "peer": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "peer": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "peer": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" - }, - "node_modules/nodemon": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", - "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/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/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-package-arg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", - "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", - "peer": true, - "dependencies": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "peer": true - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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==", - "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/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "peer": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/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==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/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==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/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==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/ora/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/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==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "peer": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "peer": 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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "peer": true, - "dependencies": { - "pngjs": "^3.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "peer": true, - "dependencies": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" - } - }, - "node_modules/password-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "peer": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "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==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, - "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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/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, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/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, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "peer": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/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==", - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "peer": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", - "peer": true, - "dependencies": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/plist/node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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==", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "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": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/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/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "peer": true, - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "peer": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "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/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "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==", - "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/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode-terminal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", - "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", - "peer": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "peer": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.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==", - "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==", - "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==", - "peer": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "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==", - "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/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dev": true, - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "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==", - "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": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-slash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", - "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", - "peer": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "peer": true, - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/requireg/node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "peer": true, - "dependencies": { - "path-parse": "^1.0.5" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "peer": true - }, - "node_modules/reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "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/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "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/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "peer": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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==" - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true, - "peer": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "peer": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "peer": true, - "dependencies": { - "type-fest": "^0.12.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "peer": true - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==" - }, - "node_modules/simple-plist": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", - "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", - "peer": true, - "dependencies": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", - "peer": true, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "peer": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "peer": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", - "peer": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "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==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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/structured-headers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", - "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", - "peer": true - }, - "node_modules/sucrase": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", - "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", - "peer": true, - "dependencies": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sudo-prompt": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", - "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", - "peer": true - }, - "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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "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==", - "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", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "peer": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", - "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", - "peer": true, - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/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==", - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "peer": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "peer": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "peer": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", - "peer": true - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "peer": true - }, - "node_modules/ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "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==", - "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==", - "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==", - "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==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "peer": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", - "peer": true - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "peer": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "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", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", - "peer": true - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "peer": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "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.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "peer": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wonka": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", - "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", - "peer": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "peer": true, - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "peer": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "peer": true, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" - }, - "@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "@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==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - } - } - }, - "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@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==", - "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==", - "peer": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.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.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "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==", - "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" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" - }, - "@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==", - "peer": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@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==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "peer": true, - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@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==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.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==", - "peer": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@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==", - "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.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "requires": { - "@babel/types": "^7.18.2" - } - }, - "@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==", - "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==", - "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==" - }, - "@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==" - }, - "@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==", - "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.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "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==", - "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==", - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "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.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", - "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.12", - "charcodes": "^0.2.0" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", - "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-default-from": "^7.16.7" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@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==", - "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.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - } - }, - "@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==", - "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.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": 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==", - "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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", - "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", - "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "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.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", - "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-flow": "^7.17.12" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "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.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", - "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", - "peer": true, + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", - "peer": true, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/highlight": "^7.10.4" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } + "@babel/compat-data": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "dev": true }, - "@babel/plugin-transform-new-target": { + "@babel/core": { "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", - "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@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, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + } } }, - "@babel/plugin-transform-object-assign": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", - "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", - "peer": true, + "@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, - "@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==", - "peer": true, + "@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } + "@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true }, - "@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==", - "peer": true, + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" } }, - "@babel/plugin-transform-react-display-name": { + "@babel/helper-hoist-variables": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", - "peer": true, + "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, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-transform-react-jsx-source": { + "@babel/helper-module-imports": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-transform-regenerator": { + "@babel/helper-module-transforms": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", - "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "dev": true, "requires": { + "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - } - }, - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, - "@babel/plugin-transform-spread": { + "@babel/helper-plugin-utils": { "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", + "dev": true }, - "@babel/plugin-transform-template-literals": { + "@babel/helper-simple-access": { "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/types": "^7.18.2" } }, - "@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", - "peer": true, + "@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, "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" + "@babel/types": "^7.16.7" } }, - "@babel/plugin-transform-unicode-escapes": { + "@babel/helper-validator-identifier": { "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==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^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 }, - "@babel/plugin-transform-unicode-regex": { + "@babel/helper-validator-option": { "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==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true }, - "@babel/preset-env": { + "@babel/helpers": { "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", - "@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-import-assertions": "^7.17.12", - "@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.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@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.18.2", - "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.22.1", - "semver": "^6.3.0" - } - }, - "@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==", - "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.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", - "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==", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "dependencies": { - "@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==", - "requires": { - "@babel/highlight": "^7.16.7" - } - } + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, - "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "dependencies": { - "@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==", + "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, "requires": { - "@babel/highlight": "^7.16.7" + "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, + "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, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": 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, + "requires": { + "has-flag": "^3.0.0" } } } }, - "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "@babel/parser": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" + }, + "@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, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "requires": { - "@ethersproject/logger": "^5.6.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "@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, "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", - "peer": true, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "requires": { - "mv": "~2", - "safe-json-stringify": "~1", - "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "peer": true - } + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@expo/cli": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.1.5.tgz", - "integrity": "sha512-27LNT3b9MtBHEosmvJiC9Ug9aJpQAK9T3cC8ekaB9cHnVcJw+mJs2kdVBYpV1aBjKkH7T57aiWWimZp0O7m1wQ==", - "peer": true, + "@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, "requires": { - "@babel/runtime": "^7.14.0", - "@expo/code-signing-certificates": "^0.0.2", - "@expo/config": "~6.0.23", - "@expo/config-plugins": "~4.1.4", - "@expo/dev-server": "~0.1.110", - "@expo/devcert": "^1.0.0", - "@expo/json-file": "^8.2.35", - "@expo/metro-config": "~0.3.16", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~0.0.52", - "@expo/plist": "^0.0.18", - "@expo/prebuild-config": "~4.0.0", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.1.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "internal-ip": "4.3.0", - "is-root": "^2.1.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "requireg": "^0.2.2", - "resolve-from": "^5.0.0", - "semver": "^6.3.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "uuid": "^3.4.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@expo/code-signing-certificates": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz", - "integrity": "sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==", - "peer": true, + "@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, "requires": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@expo/config": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", - "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", - "peer": true, + "@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, "requires": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "4.1.5", - "@expo/config-types": "^45.0.0", - "@expo/json-file": "8.2.36", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@expo/config-plugins": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-4.1.5.tgz", - "integrity": "sha512-RVvU40RtZt12HavuDAe+LDIq9lHj7sheOfMEHdmpJ/uTA8pgvkbc56XF6JHQD+yRr6+uhhb+JnAasGq49dsQbw==", - "peer": true, + "@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, "requires": { - "@expo/config-types": "^45.0.0", - "@expo/json-file": "8.2.36", - "@expo/plist": "0.0.18", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.3.5", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.4.23" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@expo/config-types": { - "version": "45.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-45.0.0.tgz", - "integrity": "sha512-/QGhhLWyaGautgEyU50UJr5YqKJix5t77ePTwreOVAhmZH+ff3nrrtYTTnccx+qF08ZNQmfAyYMCD3rQfzpiJA==", - "peer": true - }, - "@expo/dev-server": { - "version": "0.1.113", - "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.1.113.tgz", - "integrity": "sha512-PT3HT+3h4ZS1bw6Zz8fqjNeryKOWe1FqGdnz4RSASxZGCzib6VHLfLbJeYHkq7t+ashSXRoAw3XW/9yVdbUqLA==", - "peer": true, + "@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, "requires": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "0.3.18", - "@expo/osascript": "2.0.33", - "body-parser": "1.19.0", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": 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==", - "peer": true - } - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@expo/devcert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.0.0.tgz", - "integrity": "sha512-cahGyQCmpZmHpn2U04NR9KwsOIZy7Rhsw8Fg4q+A6563lIJxbkrgPnxq/O3NQAh3ohEvOXOOnoFx0b4yycCkpQ==", - "peer": true, + "@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, "requires": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^1.10.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@expo/image-utils": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", - "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", - "peer": true, + "@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, "requires": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - }, - "dependencies": { - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "peer": true - }, - "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": 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==", - "peer": true - } - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "peer": true - }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "peer": true, - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - } - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "peer": true - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "peer": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "peer": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@expo/json-file": { - "version": "8.2.36", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.36.tgz", - "integrity": "sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ==", - "peer": true, + "@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, "requires": { - "@babel/code-frame": "~7.10.4", - "json5": "^1.0.1", - "write-file-atomic": "^2.3.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@expo/metro-config": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", - "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", - "peer": true, - "requires": { - "@expo/config": "6.0.24", - "@expo/json-file": "8.2.36", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" - } - }, - "@expo/osascript": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", - "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", - "peer": true, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "dev": true, "requires": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" + "@babel/helper-plugin-utils": "^7.17.12" } }, - "@expo/package-manager": { - "version": "0.0.55", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-0.0.55.tgz", - "integrity": "sha512-GWfC+s7XT+sydlGVkHRURWi+Wk9LWdgGBKpk3jqjQi5+jy6kjlY3VqoZbhtXw55oSi/3P2FAO9ifscwut56cvg==", - "peer": true, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, "requires": { - "@expo/json-file": "8.2.36", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "npm-package-arg": "^7.0.0", - "rimraf": "^3.0.2", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "dependencies": { + "@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, "requires": { - "glob": "^7.1.3" + "@babel/highlight": "^7.16.7" } - }, - "sudo-prompt": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", - "peer": true } } }, - "@expo/plist": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.18.tgz", - "integrity": "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w==", - "peer": true, - "requires": { - "@xmldom/xmldom": "~0.7.0", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "@expo/prebuild-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", - "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", - "peer": true, + "@babel/traverse": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "dev": true, "requires": { - "@expo/config": "6.0.24", - "@expo/config-plugins": "4.1.5", - "@expo/config-types": "^45.0.0", - "@expo/image-utils": "0.3.20", - "@expo/json-file": "8.2.36", - "debug": "^4.3.1", - "expo-modules-autolinking": "0.8.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "xml2js": "0.4.23" - }, - "dependencies": { - "expo-modules-autolinking": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.8.1.tgz", - "integrity": "sha512-S8qfaXCv//7tQWV9M+JKx3CF7ypYhDdSUbkUQdaVO/r8D76/aRTArY/aRw1yEfaAOzyK8C8diDToV1itl51DfQ==", - "peer": true, - "requires": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - } - }, - "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==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": true, + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@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, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "@babel/highlight": "^7.16.7" } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "peer": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true } } }, - "@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", - "peer": true, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, "requires": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "peer": true - } + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } }, - "@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "peer": true - }, - "@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "peer": true, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "requires": { - "cross-spawn": "^6.0.5" + "@ethersproject/logger": "^5.7.0" } }, - "@expo/vector-icons": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", - "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", - "peer": true + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, - "@expo/xcpretty": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.0.tgz", - "integrity": "sha512-YUw39JY++J7j7Y2wVWyDuv/4I4azDRw7IZxK3l/8Loapdzhb5Se6deUOXYSGJHFBeSGDLsZUZIqpqRWFKbGc4Q==", - "peer": true, + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "requires": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "peer": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - } + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "peer": true - }, - "@graphql-typed-document-node/core": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", - "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", - "peer": true, - "requires": {} - }, "@grpc/grpc-js": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", - "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", + "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", "requires": { - "@grpc/proto-loader": "^0.6.4", + "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", + "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^6.11.3", + "protobufjs": "^7.0.0", "yargs": "^16.2.0" } }, "@hashgraph/cryptography": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.3.0.tgz", - "integrity": "sha512-nyNXVNy58iFcr9DqgNdPWDVLK631mvkUYesoiJEZZ1/Pzhw0lP8nt4YnXZeflsr52sjSy0+uxJSJoHv3rTdJRQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.3.tgz", + "integrity": "sha512-txU2SVz8mBJ5aHqkrIpmaerJSu0F/S9T/0eXpYAIC2USy/8oTisp54gKVDTETFdnCrq0tNgCJmWt2N8QHMMbcw==", "requires": { - "bignumber.js": "^9.0.2", + "bignumber.js": "^9.1.1", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", - "js-base64": "^3.7.2", + "js-base64": "^3.7.4", "tweetnacl": "^1.0.3", "utf8": "^3.0.0" } }, "@hashgraph/proto": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.5.0.tgz", - "integrity": "sha512-354Ozgf55mdPUUcED5E8n2ehGMO6mpOgtMIo4l4+t/wpp1qRmOfbHlVfI4TQN7W4WMb/CRnmbjCl6KDF/SnTxA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.12.0.tgz", + "integrity": "sha512-IIN6K3b2X8ih7V14IDH8rsVJ1DE9ud25FfKUpr+lDNnQdBfdZdG2AGlHRhc9iDAz4vCHoHc6F3Ao6yYKMceeTg==", "requires": { "long": "^4.0.0", - "protobufjs": "^6.11.2" + "protobufjs": "^7.1.2", + "protobufjs-cli": "^1.0.2" } }, "@hashgraph/sdk": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.16.1.tgz", - "integrity": "sha512-Yk9M88hDqJIE2SxLp+llmTvemuWaqJS+5C4cr8MZoELHxsaGRFPwfqTLV8Hz/fcLEfdxXLhYItbJmyaCA0na5Q==", - "requires": { - "@ethersproject/rlp": "^5.6.0", - "@grpc/grpc-js": "^1.6.7", - "@hashgraph/cryptography": "^1.3.0", - "@hashgraph/proto": "2.5.0", - "axios": "^0.27.2", - "bignumber.js": "^9.0.2", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.20.0.tgz", + "integrity": "sha512-Scc/mP7FtTnw5DZnGWK6YxYoAPmBC+GEnrzzcCgjAVa2YA/3Dbr4qXk3XFPVOXY5G9qxW0O5/j2z9BxY+/yrXg==", + "requires": { + "@ethersproject/rlp": "^5.7.0", + "@grpc/grpc-js": "^1.7.3", + "@hashgraph/cryptography": "^1.4.3", + "@hashgraph/proto": "2.12.0", + "axios": "^1.3.1", + "bignumber.js": "^9.1.1", "crypto-js": "^4.1.1", - "js-base64": "^3.7.2", + "js-base64": "^3.7.4", "js-logger": "^1.6.1", "long": "^4.0.0", - "protobufjs": "^6.11.2", + "protobufjs": "^7.1.2", "utf8": "^3.0.0" } }, @@ -13283,17 +6682,6 @@ "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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" - } - } } }, "@jest/environment": { @@ -13455,6 +6843,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -13463,99 +6852,37 @@ "@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true }, "@jridgewell/set-array": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "peer": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "peer": true, + "@jsdoc/salty": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", + "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } + "lodash": "^4.17.21" } }, "@protobufjs/aspromise": { @@ -13612,22 +6939,6 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, - "@react-native/normalize-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", - "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", - "peer": true - }, - "@segment/loosely-validate-event": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", - "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", - "peer": true, - "requires": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -13720,12 +7031,14 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -13734,6 +7047,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -13748,11 +7062,30 @@ "pretty-format": "^27.0.0" } }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/node": { "version": "16.11.41", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", @@ -13782,33 +7115,8 @@ "@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@urql/core": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", - "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", - "peer": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" - } - }, - "@urql/exchange-retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", - "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", - "peer": true, - "requires": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" - } - }, - "@xmldom/xmldom": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", - "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", - "peer": true + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "abab": { "version": "2.0.6", @@ -13822,21 +7130,10 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, "acorn-globals": { "version": "6.0.0", @@ -13856,6 +7153,12 @@ } } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -13871,16 +7174,6 @@ "debug": "4" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "peer": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -13894,6 +7187,7 @@ "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" } @@ -13911,12 +7205,6 @@ "color-convert": "^2.0.1" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "peer": true - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -13927,56 +7215,28 @@ "picomatch": "^2.0.4" } }, - "application-config-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", - "integrity": "sha512-lljTpVvFteShrHuKRvweZfa9o/Nc34Y8r5/1Lqh/yyKaspRT2J3fkEiSSk1YLG8ZSVyU7yHysRy9zcDDS2aH1Q==", - "peer": true - }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "peer": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "peer": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "peer": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "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==", - "peer": true - }, "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "babel-jest": { @@ -13995,15 +7255,6 @@ "slash": "^3.0.0" } }, - "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==", - "peer": true, - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -14029,55 +7280,6 @@ "@types/babel__traverse": "^7.0.6" } }, - "babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", - "peer": true, - "requires": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" - } - }, - "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==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - } - }, - "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==", - "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==", - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "babel-plugin-react-native-web": { - "version": "0.17.7", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.17.7.tgz", - "integrity": "sha512-UBLfIsfU3vi//Ab4i0WSWAfm1whLTK9uJoH0RPZ6a67eS/h9JGYjKy7+1RpHxSBviHi9NIMiYfWseTLjyIsE1g==", - "peer": true - }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -14098,20 +7300,6 @@ "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, - "babel-preset-expo": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.1.0.tgz", - "integrity": "sha512-dFcgT7AY5n15bLnfOM6R25f8Lh7YSALj4zeGze6aspYHfVrREYcovVG0eMGpY9V24fnwByNRv85lElc1jAj1Mw==", - "peer": true, - "requires": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-transform-react-jsx": "^7.12.17", - "@babel/preset-env": "^7.12.9", - "babel-plugin-module-resolver": "^4.1.0", - "babel-plugin-react-native-web": "~0.17.1", - "metro-react-native-babel-preset": "~0.67.0" - } - }, "babel-preset-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", @@ -14132,31 +7320,10 @@ "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "peer": true - }, - "better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "peer": true, - "requires": { - "open": "^8.0.4" - } - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "peer": true - }, "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" }, "binary-extensions": { "version": "2.2.0", @@ -14164,52 +7331,16 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "peer": true + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "peer": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - } - } - }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -14240,24 +7371,6 @@ } } }, - "bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", - "peer": true, - "requires": { - "stream-buffers": "2.2.x" - } - }, - "bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "peer": true, - "requires": { - "big-integer": "1.6.x" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -14271,6 +7384,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -14290,6 +7404,7 @@ "version": "4.21.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001358", "electron-to-chromium": "^1.4.164", @@ -14315,89 +7430,12 @@ "node-int64": "^0.4.0" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "peer": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "peer": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "peer": 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 }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "peer": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "peer": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "peer": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -14430,16 +7468,6 @@ } } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -14455,7 +7483,16 @@ "caniuse-lite": { "version": "1.0.30001359", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==" + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", + "dev": true + }, + "catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "requires": { + "lodash": "^4.17.15" + } }, "chalk": { "version": "4.1.2", @@ -14472,18 +7509,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "charcodes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", - "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", - "peer": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "peer": true - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -14500,16 +7525,11 @@ "readdirp": "~3.6.0" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "peer": true - }, "ci-info": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true }, "cjs-module-lexer": { "version": "1.2.2", @@ -14517,33 +7537,12 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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==", - "peer": true - }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "peer": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "peer": true - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -14554,12 +7553,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "peer": true - }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -14602,30 +7595,6 @@ "delayed-stream": "~1.0.0" } }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "peer": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "peer": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "peer": true - }, - "component-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", - "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==", - "peer": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -14659,103 +7628,15 @@ } } }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "peer": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "peer": 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, "requires": { "safe-buffer": "~5.1.1" } }, - "core-js-compat": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", - "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", - "peer": true, - "requires": { - "browserslist": "^4.20.4", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "peer": true - } - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "peer": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "peer": true - }, "crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -14764,7 +7645,8 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true }, "cssom": { "version": "0.4.4", @@ -14789,12 +7671,6 @@ } } }, - "dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", - "peer": true - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -14810,6 +7686,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -14838,13 +7715,13 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", @@ -14852,93 +7729,17 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "peer": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "peer": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "peer": true - } - } - }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "peer": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "peer": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "peer": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "peer": true - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -14956,15 +7757,6 @@ "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "peer": true, - "requires": { - "path-type": "^4.0.0" - } - }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -14997,16 +7789,11 @@ "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "peer": true - }, "electron-to-chromium": { "version": "1.4.168", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz", - "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==" + "integrity": "sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==", + "dev": true }, "elliptic": { "version": "6.5.4", @@ -15033,31 +7820,19 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "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" } }, - "env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", - "peer": true - }, - "eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "peer": true + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" }, "error-ex": { "version": "1.3.2", @@ -15079,17 +7854,10 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "peer": true - }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" }, "escodegen": { "version": "2.0.0", @@ -15104,6 +7872,21 @@ "source-map": "~0.6.1" } }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -15112,35 +7895,13 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, - "exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", - "peer": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -15159,217 +7920,6 @@ "jest-message-util": "^27.5.1" } }, - "expo": { - "version": "45.0.6", - "resolved": "https://registry.npmjs.org/expo/-/expo-45.0.6.tgz", - "integrity": "sha512-QOemudowFuzgxmK/bNMdOngpBOf6yLkkA9zWBcMQYEDyaz16GLVm1IpzZ2nAFuUKuwUkzvB62QzQDIFS7jdN5g==", - "peer": true, - "requires": { - "@babel/runtime": "^7.14.0", - "@expo/cli": "0.1.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.1.0", - "cross-spawn": "^6.0.5", - "expo-application": "~4.1.0", - "expo-asset": "~8.5.0", - "expo-constants": "~13.1.1", - "expo-error-recovery": "~3.1.0", - "expo-file-system": "~14.0.0", - "expo-font": "~10.1.0", - "expo-keep-awake": "~10.1.1", - "expo-modules-autolinking": "0.9.0", - "expo-modules-core": "0.9.2", - "fbemitter": "^3.0.0", - "getenv": "^1.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "expo-application": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-4.1.0.tgz", - "integrity": "sha512-Z2kctgVMpYZB1Iwaxd+XcMBq7h8EEY50GGrwxXsb1OHHQKN+WEVGBWxjvtPkAroqCdujLaB5HBay46gvUHRDQg==", - "peer": true, - "requires": {} - }, - "expo-asset": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.5.0.tgz", - "integrity": "sha512-k3QErZYxb6e6rPkJ1sG5yIJ7bhd4RFvnFStz0ZCO6SfktGygBAjTz5aTOLaaomiCIObRiBQ4byky/RLdli/NLw==", - "peer": true, - "requires": { - "blueimp-md5": "^2.10.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" - } - }, - "expo-constants": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-13.1.1.tgz", - "integrity": "sha512-QRVHrrMCLenBzWZ8M+EvCXM+jjdQzFMW27YQHRac3SGGoND1hWr81scOmGwlFo2wLZrYXm8HcYt1E6ry3IIwrA==", - "peer": true, - "requires": { - "@expo/config": "^6.0.14", - "uuid": "^3.3.2" - } - }, - "expo-crypto": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-10.2.0.tgz", - "integrity": "sha512-YVFp+DJXBtt4t6oZXepnzb+xwpKzFbXn3B9Oma1Tfh6J0rIlm/I20UW/5apdvEdbj44fxJ5DsiZeyADI3bcZkQ==", - "peer": true, - "requires": {} - }, - "expo-error-recovery": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-3.1.0.tgz", - "integrity": "sha512-qUxCW7kPB6AVX5h3ZPVnxw4LLZWsRwAPBtRDlh1UDN7GWZ+CQN1SNk0w0BPotjNtSlXEZSFDqKqtoDDAUYjNmg==", - "optional": true, - "peer": true, - "requires": {} - }, - "expo-file-system": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-14.0.0.tgz", - "integrity": "sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==", - "peer": true, - "requires": { - "@expo/config-plugins": "^4.0.14", - "uuid": "^3.4.0" - } - }, - "expo-font": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-10.1.0.tgz", - "integrity": "sha512-vmhzpE95Ym4iOj8IELof+C/3Weert2B3LyxV5rBjGosjzBdov+o+S6b5mN7Yc9kyEGykwB6k7npL45X3hFYDQA==", - "peer": true, - "requires": { - "fontfaceobserver": "^2.1.0" - } - }, - "expo-keep-awake": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz", - "integrity": "sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==", - "peer": true, - "requires": {} - }, - "expo-modules-autolinking": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.9.0.tgz", - "integrity": "sha512-brczklrHpWood7H2C4MjBfUD85NAyjotEhYs7hnHRtbnVgwwzXeAveDje/19kLaK8W40hvUN0LdBVxkZN3Hw6g==", - "peer": true, - "requires": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "dependencies": { - "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==", - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "peer": true - } - } - }, - "expo-modules-core": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.9.2.tgz", - "integrity": "sha512-p/C0GJxFIIDGwmrWi70Q0ggfsgeUFS25ZkkBgoaHT7MVgiMjlKA/DCC3D6ZUkHl/JlzUm0aTftIGS8LWXsnZBw==", - "peer": true, - "requires": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, - "expo-random": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.2.0.tgz", - "integrity": "sha512-SihCGLmDyDOALzBN8XXpz2hCw0RSx9c4/rvjcS4Bfqhw6luHjL2rHNTLrFYrPrPRmG1jHM6dXXJe/Zm8jdu+2g==", - "peer": true, - "requires": { - "base64-js": "^1.3.0" - } - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "peer": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, "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", @@ -15379,17 +7929,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "peer": true, - "requires": { - "reusify": "^1.0.4" - } + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fb-watchman": { "version": "2.0.1", @@ -15400,137 +7940,19 @@ "bser": "2.1.1" } }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "peer": true, - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "peer": true, - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "peer": true - }, - "fetch-retry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", - "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", - "peer": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - } - } - }, - "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "peer": true, - "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "peer": true - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "dependencies": { - "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==", - "peer": true - } - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "peer": true, - "requires": { - "micromatch": "^4.0.2" - } - }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "peer": true + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "form-data": { "version": "4.0.0", @@ -15542,32 +7964,6 @@ "mime-types": "^2.1.12" } }, - "freeport-async": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", - "peer": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -15583,55 +7979,35 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "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==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "peer": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } }, - "getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", - "peer": true - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -15649,6 +8025,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -15673,21 +8050,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "peer": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, "got": { "version": "9.6.0", @@ -15713,33 +8077,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "peer": true - }, - "graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "peer": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "peer": 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" } @@ -15749,21 +8091,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "peer": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "peer": true - }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -15789,15 +8116,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -15819,27 +8137,6 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "peer": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "peer": true - } - } - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -15871,16 +8168,11 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "peer": true - }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -15906,19 +8198,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "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==", - "peer": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "peer": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -15937,38 +8218,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "peer": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "peer": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "peer": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -15985,12 +8236,6 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "peer": true - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -16012,20 +8257,16 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, "requires": { "has": "^1.0.3" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "peer": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -16042,6 +8283,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -16056,32 +8298,6 @@ "is-path-inside": "^3.0.2" } }, - "is-invalid-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", - "peer": true, - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "peer": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "peer": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -16091,7 +8307,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "2.0.0", @@ -16099,16 +8316,11 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "peer": true - }, "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==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -16116,42 +8328,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "peer": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "is-valid-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", - "peer": true, - "requires": { - "is-invalid-path": "^0.1.0" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "peer": true, - "requires": { - "is-docker": "^2.0.0" - } - }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -16161,7 +8343,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -16907,22 +9090,10 @@ } } }, - "jimp-compact": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", - "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", - "peer": true - }, - "join-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", - "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", - "peer": true - }, "js-base64": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", - "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, "js-logger": { "version": "1.6.1", @@ -16932,17 +9103,49 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, + "js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "requires": { + "xmlcreate": "^2.0.4" + } + }, + "jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "requires": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + } + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -16994,7 +9197,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-buffer": { "version": "3.0.0", @@ -17008,53 +9212,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema-deref-sync": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", - "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", - "peer": true, - "requires": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "dependencies": { - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", - "peer": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "peer": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -17064,10 +9221,19 @@ "json-buffer": "3.0.0" } }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true }, "latest-version": { "version": "5.1.0", @@ -17088,7 +9254,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -17097,15 +9262,15 @@ "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==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "requires": { - "p-locate": "^5.0.0" + "uc.micro": "^1.0.1" } }, "lodash": { @@ -17118,99 +9283,17 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "peer": true - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "peer": true, - "requires": { - "chalk": "^2.0.1" - }, - "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==", - "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==", - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "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==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -17249,43 +9332,40 @@ "tmpl": "1.0.5" } }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "peer": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "peer": true, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "requires": { - "buffer-alloc": "^1.1.0" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + } } }, - "md5hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", - "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", - "peer": true + "markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "requires": {} }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "peer": true + "marked": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==" }, - "memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "peer": true + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "merge-stream": { "version": "2.0.0", @@ -17293,75 +9373,16 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "peer": true - }, - "metro-react-native-babel-preset": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz", - "integrity": "sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "peer": true - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -17375,12 +9396,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "peer": true - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -17410,60 +9425,10 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "peer": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "peer": true, - "requires": { - "minimist": "^1.2.6" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { "version": "2.29.3", @@ -17473,132 +9438,20 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "multiformats": { "version": "9.7.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "peer": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "peer": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "peer": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "peer": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "peer": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "peer": true - }, - "nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "peer": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "peer": true - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -17608,7 +9461,8 @@ "node-releases": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true }, "nodemon": { "version": "2.0.18", @@ -17681,80 +9535,12 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, - "npm-package-arg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", - "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", - "peer": true, - "requires": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "peer": true - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "peer": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "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==", - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -17763,31 +9549,10 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "peer": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "peer": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -17797,158 +9562,17 @@ "word-wrap": "~1.2.3" } }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "peer": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true - }, - "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==", - "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==", - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "peer": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "peer": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "peer": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "peer": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==", - "peer": 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==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "package-json": { "version": "6.5.0", @@ -17974,93 +9598,40 @@ "lines-and-columns": "^1.1.6" } }, - "parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "peer": true, - "requires": { - "pngjs": "^3.3.0" - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "peer": true - }, - "password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "peer": true, - "requires": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "peer": true - } - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "peer": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": 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==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "peer": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "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==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -18116,83 +9687,10 @@ } } }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "peer": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "peer": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "peer": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "peer": true, - "requires": { - "p-limit": "^2.0.0" - } - } - } - }, - "plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", - "peer": true, - "requires": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" - }, - "dependencies": { - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", - "peer": true - } - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "peer": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "prepend-http": { "version": "2.0.0", @@ -18206,12 +9704,6 @@ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, - "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==", - "peer": true - }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -18231,55 +9723,120 @@ } } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "peer": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "peer": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "peer": true - }, "prompts": { "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", "sisteransi": "^1.0.5" } }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } + "protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + } + } + }, + "protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "requires": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { "version": "1.8.0", @@ -18297,6 +9854,7 @@ "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" @@ -18317,46 +9875,11 @@ "escape-goat": "^2.0.0" } }, - "qrcode-terminal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", - "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", - "peer": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "peer": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "peer": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "peer": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "peer": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -18367,20 +9890,16 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true } } }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "readdirp": { "version": "3.6.0", @@ -18391,50 +9910,6 @@ "picomatch": "^2.2.1" } }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "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==", - "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==", - "peer": true - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "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==", - "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" - } - }, "registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -18453,84 +9928,24 @@ "rc": "^1.2.8" } }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "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==", - "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": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "peer": true - } - } - }, - "remove-trailing-slash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", - "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", - "peer": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "peer": true - }, - "requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "peer": true, + "requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "requires": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "peer": true, - "requires": { - "path-parse": "^1.0.5" - } - } + "lodash": "^4.17.21" } }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "peer": true - }, - "reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "peer": true - }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -18549,7 +9964,8 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, "resolve.exports": { "version": "1.1.0", @@ -18566,62 +9982,25 @@ "lowercase-keys": "^1.0.0" } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "peer": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true - }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "peer": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, "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==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true, - "peer": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "peer": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "saxes": { "version": "5.0.1", @@ -18635,7 +10014,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 }, "semver-diff": { "version": "3.1.1", @@ -18646,98 +10026,29 @@ "semver": "^6.3.0" } }, - "serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "peer": true, - "requires": { - "type-fest": "^0.12.0" - }, - "dependencies": { - "type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "peer": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "peer": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": 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==" - }, - "simple-plist": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", - "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", - "peer": true, - "requires": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - }, - "dependencies": { - "bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", - "peer": true, - "requires": { - "big-integer": "1.6.x" - } - } - } + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", - "peer": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "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 + "devOptional": true }, "source-map-support": { "version": "0.5.21", @@ -18749,28 +10060,11 @@ "source-map": "^0.6.0" } }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "peer": true, - "requires": { - "through": "2" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "peer": true, - "requires": { - "minipass": "^3.1.1" - } + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "stack-utils": { "version": "2.0.5", @@ -18781,18 +10075,6 @@ "escape-string-regexp": "^2.0.0" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true - }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", - "peer": true - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -18827,12 +10109,6 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "peer": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18842,42 +10118,7 @@ "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 - }, - "structured-headers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", - "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", - "peer": true - }, - "sucrase": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz", - "integrity": "sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ==", - "peer": true, - "requires": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "peer": true - } - } - }, - "sudo-prompt": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", - "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", - "peer": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "7.2.0", @@ -18891,6 +10132,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -18899,7 +10141,8 @@ "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==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true }, "symbol-tree": { "version": "3.2.4", @@ -18907,65 +10150,11 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "peer": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "peer": true - } - } - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "peer": true - }, - "tempy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", - "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", - "peer": true, - "requires": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "peer": true - }, - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "peer": true - } - } - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -18982,49 +10171,18 @@ "minimatch": "^3.0.4" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "peer": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "peer": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "peer": true - }, "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "peer": true, + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" } }, "tmpl": { @@ -19036,7 +10194,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-readable-stream": { "version": "1.0.0", @@ -19048,16 +10207,11 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "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", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "peer": true - }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -19087,18 +10241,6 @@ "punycode": "^2.1.1" } }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", - "peer": true - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "peer": true - }, "ts-jest": { "version": "27.1.5", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", @@ -19132,12 +10274,6 @@ } } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -19147,7 +10283,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -19161,17 +10296,8 @@ "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==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", @@ -19188,11 +10314,15 @@ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "peer": true + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" }, "undefsafe": { "version": "2.0.5", @@ -19200,56 +10330,16 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "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==", - "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==", - "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==", - "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==", - "peer": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "peer": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "peer": true, - "requires": { - "imurmurhash": "^0.1.4" - } + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -19257,18 +10347,14 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "peer": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "update-browserslist-db": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -19307,22 +10393,6 @@ } } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", - "peer": true - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "peer": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -19337,18 +10407,6 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "peer": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "peer": true - }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -19368,21 +10426,6 @@ } } }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", - "peer": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "peer": true, - "requires": { - "builtins": "^1.0.3" - } - }, "varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -19415,15 +10458,6 @@ "makeerror": "1.0.12" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "peer": true, - "requires": { - "defaults": "^1.0.3" - } - }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -19456,15 +10490,6 @@ "webidl-conversions": "^6.1.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -19474,17 +10499,10 @@ "string-width": "^4.0.0" } }, - "wonka": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", - "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", - "peer": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", @@ -19501,17 +10519,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "ws": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", @@ -19519,24 +10526,6 @@ "dev": true, "requires": {} }, - "xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "peer": true, - "requires": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "peer": true - } - } - }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -19549,36 +10538,17 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "peer": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "peer": true - } - } - }, - "xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "peer": true - }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -19607,12 +10577,6 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "peer": true } } } diff --git a/package.json b/package.json index 19eea38..c894144 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "^2.16.1", + "@hashgraph/sdk": "^2.20.0", "base58-js": "^1.0.0", "did-resolver": "^3.1.5", "js-base64": "^3.6.1", diff --git a/src/identity/hcs/did/hcs-did-event-message-resolver.ts b/src/identity/hcs/did/hcs-did-event-message-resolver.ts index 4432a7c..7e50532 100644 --- a/src/identity/hcs/did/hcs-did-event-message-resolver.ts +++ b/src/identity/hcs/did/hcs-did-event-message-resolver.ts @@ -84,7 +84,7 @@ export class HcsDidEventMessageResolver { protected async waitOrFinish(): Promise { const timeDiff = Long.fromInt(Date.now()).sub(this.lastMessageArrivalTime); - if (timeDiff.lt(this.noMoreMessagesTimeout)) { + if (timeDiff.lessThanOrEqual(this.noMoreMessagesTimeout)) { if (this.nextMessageArrivalTimeout) { clearTimeout(this.nextMessageArrivalTimeout); } diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 6db804e..65670e0 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -26,6 +26,10 @@ export class HcsDidTopicListener { constructor(topicId: TopicId, startTime: Timestamp = new Timestamp(0, 0)) { this.topicId = topicId; this.query = new TopicMessageQuery().setTopicId(topicId).setStartTime(startTime); + + this.query.setMaxBackoff(3000); + this.query.setMaxAttempts(10); + this.ignoreErrors = false; } diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts index a938452..cab69d6 100644 --- a/test/integration/did-resolver.test.ts +++ b/test/integration/did-resolver.test.ts @@ -10,13 +10,17 @@ const NETWORK = "testnet"; // hedera const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; +function delay(time) { + return new Promise((resolve) => setTimeout(resolve, time)); +} + describe("HederaDidResolver", () => { let client; beforeAll(async () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); + client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setMirrorNetwork(MIRROR_PROVIDER); client.setOperator(operatorId, operatorKey); }); @@ -73,6 +77,8 @@ describe("HederaDidResolver", () => { serviceEndpoint: "https://example.com/vcs", }); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const resolver = new Resolver({ ...new HederaDidResolver(client).build(), }); @@ -118,6 +124,8 @@ describe("HederaDidResolver", () => { await did.register(); await did.delete(); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const resolver = new Resolver({ ...new HederaDidResolver().build(), }); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index e8a344a..b1e58ce 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -11,13 +11,17 @@ const NETWORK = "testnet"; // hedera const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; +function delay(time) { + return new Promise((resolve) => setTimeout(resolve, time)); +} + describe("HcsDid", () => { let client; beforeAll(async () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); - client = Client.forTestnet(); + client = Client.forTestnet({ scheduleNetworkUpdate: false }); client.setMirrorNetwork(MIRROR_PROVIDER); client.setOperator(operatorId, operatorKey); }); @@ -135,6 +139,8 @@ describe("HcsDid", () => { await did.register(); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -200,6 +206,8 @@ describe("HcsDid", () => { await did.register(); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didJSON = (await did.resolve()).toJsonTree(); expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -218,6 +226,9 @@ describe("HcsDid", () => { await did.delete(); + const messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); + didJSON = (await did.resolve()).toJsonTree(); expect(didJSON).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -226,9 +237,6 @@ describe("HcsDid", () => { id: did.getIdentifier(), verificationMethod: [], }); - - let messages = await readTopicMessages(did.getTopicId(), client); - expect(messages.length).toEqual(2); }); }); @@ -328,6 +336,9 @@ describe("HcsDid", () => { newPrivateKey: newDidPrivateKey, }); + const messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); + const doc = (await did.resolve()).toJsonTree(); expect(doc).toEqual({ @@ -345,9 +356,6 @@ describe("HcsDid", () => { }, ], }); - - let messages = await readTopicMessages(did.getTopicId(), client); - expect(messages.length).toEqual(2); }); }); @@ -426,6 +434,8 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -473,6 +483,8 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -517,6 +529,8 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -560,6 +574,8 @@ describe("HcsDid", () => { console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -638,8 +654,8 @@ describe("HcsDid", () => { //new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); await did.register(); await did.addVerificationMethod({ @@ -652,7 +668,7 @@ describe("HcsDid", () => { /** * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ - await new Promise((resolve) => setTimeout(resolve, 9000)); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); @@ -691,9 +707,9 @@ describe("HcsDid", () => { //new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); + const updatePublicKey = HcsDid.stringToPublicKey("zAvU2AEh8ybRqNwHAM3CjbkjYaYHpt9oA1uugW9EVTg6P"); await did.register(); await did.addVerificationMethod({ @@ -712,7 +728,7 @@ describe("HcsDid", () => { /** * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ - await new Promise((resolve) => setTimeout(resolve, 9000)); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); @@ -750,8 +766,8 @@ describe("HcsDid", () => { //new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); await did.register(); await did.addVerificationMethod({ @@ -767,7 +783,7 @@ describe("HcsDid", () => { /** * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node */ - await new Promise((resolve) => setTimeout(resolve, 9000)); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); @@ -862,8 +878,8 @@ describe("HcsDid", () => { //new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); await ( await did.register() @@ -875,6 +891,8 @@ describe("HcsDid", () => { publicKey, }); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -907,11 +925,15 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - //new verification DID and publickey + const pk = PrivateKey.generate(); + console.log(Hashing.multibase.encode(pk.publicKey.toBytes())); + + // new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); - const updatePublicKey = HcsDid.stringToPublicKey("z6MkhHbhBBLdKGiGnHPvrrH9GL7rgw6egpZiLgvQ9n7pHt1P"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); + const updatePublicKey = HcsDid.stringToPublicKey("zAvU2AEh8ybRqNwHAM3CjbkjYaYHpt9oA1uugW9EVTg6P"); await did.register(); await did.addVerificationRelationship({ @@ -929,6 +951,8 @@ describe("HcsDid", () => { publicKey: updatePublicKey, }); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -963,8 +987,8 @@ describe("HcsDid", () => { //new verification DID and publickey const newVerificationDid = - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29617801#key-1"; - const publicKey = HcsDid.stringToPublicKey("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29617801#key-1"; + const publicKey = HcsDid.stringToPublicKey("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); await did.register(); await did.addVerificationRelationship({ @@ -979,6 +1003,8 @@ describe("HcsDid", () => { relationshipType: "authentication", }); + await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + const didDoc = await did.resolve(); const didDocument = didDoc.toJsonTree(); @@ -1010,7 +1036,7 @@ describe("HcsDid", () => { async function readTopicMessages(topicId, client, timeout = null) { const messages = []; - await new TopicMessageQuery() + const query = new TopicMessageQuery() .setTopicId(topicId) .setStartTime(new Timestamp(0, 0)) .setEndTime(Timestamp.fromDate(new Date())) @@ -1021,7 +1047,9 @@ async function readTopicMessages(topicId, client, timeout = null) { /** * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read */ - await new Promise((resolve) => setTimeout(resolve, timeout || 6000)); + await delay(timeout || process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + + query.unsubscribe(); return messages; } diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 9377a71..057af26 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -80,7 +80,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, ], @@ -110,7 +110,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, ], @@ -268,7 +268,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { @@ -410,7 +410,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { @@ -549,7 +549,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { diff --git a/test/unit/did-parser.test.ts b/test/unit/did-parser.test.ts index 8500ff4..ace9f1e 100644 --- a/test/unit/did-parser.test.ts +++ b/test/unit/did-parser.test.ts @@ -1,5 +1,5 @@ -import { DidParser, Hashing } from "../../dist"; import { PrivateKey } from "@hashgraph/sdk"; +import { DidParser, Hashing } from "../../dist"; describe("DidParser", () => { it("throw an error when invalid did string provided", async () => { @@ -30,7 +30,7 @@ describe("DidParser", () => { const base58btcEncodedString = Hashing.multibase.encode(publickeybytes); [ - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.29643290", + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.29643290", `did:hedera:testnet:${base58btcEncodedString}_0.0.1`, ].forEach((did) => { expect(DidParser.parse(did)).toBeDefined(); diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts index a99a1aa..b8a39d4 100644 --- a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -88,14 +88,14 @@ describe("HcsDidCreateDidOwnerEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns base58 encoded publicKey", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6Nk1rb2dWem9HSk1WVkxoYXo4MmNBNWpaUUtBQXFVZ2hoQ3JwemtTREZEd3hmSmFfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -104,9 +104,9 @@ describe("HcsDidCreateDidOwnerEvent", () => { it("returns event JSON tree", () => { expect(event.toJsonTree()).toEqual({ DIDOwner: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -116,7 +116,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { describe("#toJSON", () => { it("returns stringified version of JSON tree", () => { expect(event.toJSON()).toEqual( - '{"DIDOwner":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -124,18 +124,18 @@ describe("HcsDidCreateDidOwnerEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidCreateDidOwnerEvent object", () => { const eventFromJson = HcsDidCreateDidOwnerEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); expect(eventFromJson).toBeInstanceOf(HcsDidCreateDidOwnerEvent); expect(eventFromJson.toJsonTree()).toEqual({ DIDOwner: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts index 54afb91..1623d52 100644 --- a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -88,14 +88,14 @@ describe("HcsDidUpdateDidOwnerEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns base58 encoded publicKey", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6Nk1rb2dWem9HSk1WVkxoYXo4MmNBNWpaUUtBQXFVZ2hoQ3JwemtTREZEd3hmSmFfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -104,9 +104,9 @@ describe("HcsDidUpdateDidOwnerEvent", () => { it("returns event JSON tree", () => { expect(event.toJsonTree()).toEqual({ DIDOwner: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -116,7 +116,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { describe("#toJSON", () => { it("returns stringified version of JSON tree", () => { expect(event.toJSON()).toEqual( - '{"DIDOwner":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -124,18 +124,18 @@ describe("HcsDidUpdateDidOwnerEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidUpdateDidOwnerEvent object", () => { const eventFromJson = HcsDidUpdateDidOwnerEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); expect(eventFromJson).toBeInstanceOf(HcsDidUpdateDidOwnerEvent); expect(eventFromJson.toJsonTree()).toEqual({ DIDOwner: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#did-root-key", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/service/hcs-did-create-service-event.test.ts b/test/unit/event/service/hcs-did-create-service-event.test.ts index e94025f..ce745d8 100644 --- a/test/unit/event/service/hcs-did-create-service-event.test.ts +++ b/test/unit/event/service/hcs-did-create-service-event.test.ts @@ -69,7 +69,7 @@ describe("HcsDidCreateServiceEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1" ); }); }); @@ -89,7 +89,7 @@ describe("HcsDidCreateServiceEvent", () => { describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0OnpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQ18wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" ); }); }); @@ -98,7 +98,7 @@ describe("HcsDidCreateServiceEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }, @@ -109,7 +109,7 @@ describe("HcsDidCreateServiceEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' + '{"Service":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' ); }); }); @@ -117,7 +117,7 @@ describe("HcsDidCreateServiceEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidCreateServiceEvent object", () => { const eventFromJson = HcsDidCreateServiceEvent.fromJsonTree({ - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }); @@ -125,7 +125,7 @@ describe("HcsDidCreateServiceEvent", () => { expect(eventFromJson).toBeInstanceOf(HcsDidCreateServiceEvent); expect(eventFromJson.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }, diff --git a/test/unit/event/service/hcs-did-revoke-service-event.test.ts b/test/unit/event/service/hcs-did-revoke-service-event.test.ts index 1b61df4..0e0068c 100644 --- a/test/unit/event/service/hcs-did-revoke-service-event.test.ts +++ b/test/unit/event/service/hcs-did-revoke-service-event.test.ts @@ -41,7 +41,7 @@ describe("HcsDidRevokeServiceEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1" ); }); }); @@ -49,7 +49,7 @@ describe("HcsDidRevokeServiceEvent", () => { describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIn19" + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0OnpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQ18wLjAuMjk2MTMzMjcjc2VydmljZS0xIn19" ); }); }); @@ -58,7 +58,7 @@ describe("HcsDidRevokeServiceEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", }, }); }); @@ -66,20 +66,20 @@ describe("HcsDidRevokeServiceEvent", () => { describe("#toJSON", () => { expect(event.toJSON()).toEqual( - '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1"}}' + '{"Service":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1"}}' ); }); describe("#fromJsonTree", () => { it("rebuilds HcsDidRevokeServiceEvent object", () => { const eventFromJson = HcsDidRevokeServiceEvent.fromJsonTree({ - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", }); expect(eventFromJson).toBeInstanceOf(HcsDidRevokeServiceEvent); expect(eventFromJson.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", }, }); }); diff --git a/test/unit/event/service/hcs-did-update-service-event.test.ts b/test/unit/event/service/hcs-did-update-service-event.test.ts index 2ba3415..24074ec 100644 --- a/test/unit/event/service/hcs-did-update-service-event.test.ts +++ b/test/unit/event/service/hcs-did-update-service-event.test.ts @@ -69,7 +69,7 @@ describe("HcsDidUpdateServiceEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1" ); }); }); @@ -89,7 +89,7 @@ describe("HcsDidUpdateServiceEvent", () => { describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0Ono2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYV8wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" + "eyJTZXJ2aWNlIjp7ImlkIjoiZGlkOmhlZGVyYTp0ZXN0bmV0OnpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQ18wLjAuMjk2MTMzMjcjc2VydmljZS0xIiwidHlwZSI6IkRJRENvbW1NZXNzYWdpbmciLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL3ZjLnRlc3Quc2VydmljZS5jb20ifX0=" ); }); }); @@ -98,7 +98,7 @@ describe("HcsDidUpdateServiceEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }, @@ -108,14 +108,14 @@ describe("HcsDidUpdateServiceEvent", () => { describe("#toJSON", () => { expect(event.toJSON()).toEqual( - '{"Service":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' + '{"Service":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1","type":"DIDCommMessaging","serviceEndpoint":"https://vc.test.service.com"}}' ); }); describe("#fromJsonTree", () => { it("rebuilds HcsDidUpdateServiceEvent object", () => { const eventFromJson = HcsDidUpdateServiceEvent.fromJsonTree({ - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }); @@ -123,7 +123,7 @@ describe("HcsDidUpdateServiceEvent", () => { expect(eventFromJson).toBeInstanceOf(HcsDidUpdateServiceEvent); expect(eventFromJson.toJsonTree()).toEqual({ Service: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#service-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#service-1", serviceEndpoint: "https://vc.test.service.com", type: "DIDCommMessaging", }, diff --git a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts index 225da3e..331df9f 100644 --- a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts @@ -102,7 +102,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -116,7 +116,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#getController", () => { it("returns type passed via constructor", () => { expect(event.getController()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327" ); }); }); @@ -129,14 +129,14 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -145,9 +145,9 @@ describe("HcsDidCreateVerificationMethodEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationMethod: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -157,7 +157,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -165,18 +165,18 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidCreateVerificationMethodEvent object", () => { const eventFromJson = HcsDidCreateVerificationMethodEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); expect(eventFromJson).toBeInstanceOf(HcsDidCreateVerificationMethodEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationMethod: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts index 6a45ddd..e283efb 100644 --- a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts @@ -41,7 +41,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -49,7 +49,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSJ9fQ==" + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSJ9fQ==" ); }); }); @@ -58,7 +58,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationMethod: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", }, }); }); @@ -67,7 +67,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1"}}' + '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1"}}' ); }); }); @@ -75,13 +75,13 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidRevokeVerificationMethodEvent object", () => { const eventFromJson = HcsDidRevokeVerificationMethodEvent.fromJsonTree({ - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", }); expect(eventFromJson).toBeInstanceOf(HcsDidRevokeVerificationMethodEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationMethod: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", }, }); }); diff --git a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts index 0cd6005..b5f439d 100644 --- a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts @@ -102,7 +102,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -116,7 +116,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#getController", () => { it("returns type passed via constructor", () => { expect(event.getController()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327" ); }); }); @@ -129,14 +129,14 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -145,9 +145,9 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationMethod: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -157,7 +157,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationMethod":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -165,18 +165,18 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidUpdateVerificationMethodEvent object", () => { const eventFromJson = HcsDidUpdateVerificationMethodEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); expect(eventFromJson).toBeInstanceOf(HcsDidUpdateVerificationMethodEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationMethod: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts index ebb3c82..8ae6cdc 100644 --- a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts @@ -131,7 +131,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -151,7 +151,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#getController", () => { it("returns type passed via constructor", () => { expect(event.getController()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327" ); }); }); @@ -164,14 +164,14 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -180,9 +180,9 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationRelationship: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, @@ -193,7 +193,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -201,9 +201,9 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidCreateVerificationRelationshipEvent object", () => { const eventFromJson = HcsDidCreateVerificationRelationshipEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }); @@ -211,9 +211,9 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { expect(eventFromJson).toBeInstanceOf(HcsDidCreateVerificationRelationshipEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationRelationship: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, diff --git a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts index 2be0385..b18ec4a 100644 --- a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts @@ -53,7 +53,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -67,7 +67,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiJ9fQ==" + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiJ9fQ==" ); }); }); @@ -76,7 +76,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationRelationship: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", relationshipType: "authentication", }, }); @@ -86,7 +86,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication"}}' + '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication"}}' ); }); }); @@ -94,14 +94,14 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidRevokeVerificationRelationshipEvent object", () => { const eventFromJson = HcsDidRevokeVerificationRelationshipEvent.fromJsonTree({ - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", relationshipType: "authentication", }); expect(eventFromJson).toBeInstanceOf(HcsDidRevokeVerificationRelationshipEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationRelationship: { - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", relationshipType: "authentication", }, }); diff --git a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts index 69b838b..2a84746 100644 --- a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts @@ -131,7 +131,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#getId", () => { it("returns id passed via constructor", () => { expect(event.getId()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1" ); }); }); @@ -151,7 +151,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#getController", () => { it("returns type passed via constructor", () => { expect(event.getController()).toEqual( - "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327" + "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327" ); }); }); @@ -164,14 +164,14 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#getPublicKeyMultibase", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"); + expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ejZNa29nVnpvR0pNVlZMaGF6ODJjQTVqWlFLQUFxVWdoaENycHprU0RGRHd4ZkphXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtvZ1Z6b0dKTVZWTGhhejgyY0E1alpRS0FBcVVnaGhDcnB6a1NERkR3eGZKYSJ9fQ==" + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" ); }); }); @@ -180,9 +180,9 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { it("returns event JSON structure", () => { expect(event.toJsonTree()).toEqual({ VerificationRelationship: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, @@ -193,7 +193,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationRelationship":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","publicKeyMultibase":"z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa"}}' + '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -201,9 +201,9 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#fromJsonTree", () => { it("rebuilds HcsDidUpdateVerificationRelationshipEvent object", () => { const eventFromJson = HcsDidUpdateVerificationRelationshipEvent.fromJsonTree({ - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }); @@ -211,9 +211,9 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { expect(eventFromJson).toBeInstanceOf(HcsDidUpdateVerificationRelationshipEvent); expect(eventFromJson.toJsonTree()).toEqual({ VerificationRelationship: { - controller: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327", - id: "did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327#key-1", - publicKeyMultibase: "z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa", + controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", + id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", + publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, diff --git a/test/unit/hashing.test.ts b/test/unit/hashing.test.ts index cd9dfef..a7324a5 100644 --- a/test/unit/hashing.test.ts +++ b/test/unit/hashing.test.ts @@ -1,7 +1,7 @@ -import { Hashing } from "../../dist"; import { PrivateKey } from "@hashgraph/sdk"; +import { Hashing } from "../../dist"; -describe("Util Multibase & Multicodec", () => { +describe("Util Multibase", () => { it("Test Valid Multibase base58btc with ed25519 pub key encode", async () => { const privateKey = PrivateKey.generate(); @@ -9,8 +9,8 @@ describe("Util Multibase & Multicodec", () => { const base58btcEncodedString = Hashing.multibase.encode(publickeybytes); const decodedPublicKeyBytes = Hashing.multibase.decode(base58btcEncodedString); - // z is for base58btc & 6Mk is for ed25519 pub key - expect(base58btcEncodedString.startsWith("z6Mk")).toBeTruthy(); + // z is for base58btc + expect(base58btcEncodedString.startsWith("z")).toBeTruthy(); expect(decodedPublicKeyBytes).toStrictEqual(publickeybytes); }); }); diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index c8172af..51d5fe3 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -1,5 +1,4 @@ import { Client, PrivateKey, TopicId } from "@hashgraph/sdk"; -import crypto from "crypto"; import { DidMethodOperation, Hashing, HcsDid, HcsDidCreateDidOwnerEvent, HcsDidMessage } from "../../dist"; const network = "testnet"; @@ -7,7 +6,7 @@ const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); const DID_TOPIC_ID2 = TopicId.fromString("0.0.3"); describe("HcsDidMessage", () => { - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); const privateKey = PrivateKey.generate(); const identifier = `did:hedera:${network}:${Hashing.multibase.encode( privateKey.publicKey.toBytes() diff --git a/test/unit/hcs-did-transaction.test.ts b/test/unit/hcs-did-transaction.test.ts index ce40e11..c81091e 100644 --- a/test/unit/hcs-did-transaction.test.ts +++ b/test/unit/hcs-did-transaction.test.ts @@ -12,7 +12,7 @@ import { describe("HcsDidTransaction", () => { const network = "testnet"; const DID_TOPIC_ID1 = TopicId.fromString("0.0.2"); - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); const privateKey = PrivateKey.generate(); const identifier = `did:hedera:${network}:${Hashing.multibase.encode( privateKey.publicKey.toBytes() diff --git a/test/unit/hsc-did.test.ts b/test/unit/hsc-did.test.ts index a37951b..9381a25 100644 --- a/test/unit/hsc-did.test.ts +++ b/test/unit/hsc-did.test.ts @@ -5,7 +5,7 @@ describe("HcsDid", () => { let client; beforeAll(async () => { - client = Client.forTestnet(); + client = Client.forTestnet({ scheduleNetworkUpdate: false }); }); describe("#constructor", () => { it("throws error because of missing identifier and privateKey", () => { @@ -56,7 +56,7 @@ describe("HcsDid", () => { }); it("accepts client parameter", () => { - const client = Client.forTestnet(); + const client = Client.forTestnet({ scheduleNetworkUpdate: false }); const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier, client }); @@ -71,7 +71,7 @@ describe("HcsDid", () => { it("throws error if topicId missing", () => { let error = null; try { - HcsDid.parseIdentifier("did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + HcsDid.parseIdentifier("did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); } catch (err) { error = err; } @@ -83,7 +83,7 @@ describe("HcsDid", () => { it("throws error if invalid prefix", () => { let error = null; try { - HcsDid.parseIdentifier("abcd:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + HcsDid.parseIdentifier("abcd:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { error = err; } @@ -95,7 +95,7 @@ describe("HcsDid", () => { it("throws error if invalid method name", () => { let error = null; try { - HcsDid.parseIdentifier("did:hashgraph:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + HcsDid.parseIdentifier("did:hashgraph:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { error = err; } @@ -107,7 +107,7 @@ describe("HcsDid", () => { it("throws error if Invalid Hedera network", () => { let error = null; try { - HcsDid.parseIdentifier("did:hedera:nonetwork:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1"); + HcsDid.parseIdentifier("did:hedera:nonetwork:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { error = err; } @@ -130,12 +130,12 @@ describe("HcsDid", () => { it("should get array with NetworkName, topicId and didIdString", () => { const [networkName, topicId, didIdString] = HcsDid.parseIdentifier( - "did:hedera:testnet:z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk_0.0.1" + "did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1" ); expect(networkName).toEqual("testnet"); expect(topicId.toString()).toEqual("0.0.1"); - expect(didIdString).toEqual("z6Mkkcn1EDXc5vzpmvnQeCKpEswyrnQG7qq59k92gFRm1EGk"); + expect(didIdString).toEqual("z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); }); }); @@ -145,7 +145,7 @@ describe("HcsDid", () => { "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); const result = HcsDid.publicKeyToIdString(privateKey.publicKey); - expect(result).toEqual("z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB"); + expect(result).toEqual("zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo"); }); }); @@ -154,7 +154,7 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString( "302e020100300506032b657004220420a4b76d7089dfd33c83f586990c3a36ae92fb719fdf262e7749d1b0ddd1d055b0" ); - const result = HcsDid.stringToPublicKey("z6MkvD6JAfMyP6pgQoYxfE9rubgwLD9Hmz8rQh1FAxvbW8XB"); + const result = HcsDid.stringToPublicKey("zGkqFaR7Y3ZLDJJiFyfC24W8wWdsSN6tVig6KLgxaaujo"); expect(result).toEqual(privateKey.publicKey); }); }); From 7e72bd07e540cc6db443ae9fcae4c7b4b813d5c8 Mon Sep 17 00:00:00 2001 From: Vijay Shiyani Date: Tue, 28 Feb 2023 12:51:54 +1100 Subject: [PATCH 123/133] fixing integration test and small --- jest.setupAfterEnv.js | 2 +- package.json | 4 ++-- src/identity/hcs/did/hcs-did-topic-listener.ts | 4 ++-- test/integration/hcs-did.test.ts | 18 +++++++++++------- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/jest.setupAfterEnv.js b/jest.setupAfterEnv.js index 09ffd35..5033304 100644 --- a/jest.setupAfterEnv.js +++ b/jest.setupAfterEnv.js @@ -1 +1 @@ -jest.setTimeout(60000); +jest.setTimeout(80000); diff --git a/package.json b/package.json index c894144..e5ac20e 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "build:dev": "tsc --sourceMap -w", "start": "node dist/index.js", "start:dev": "nodemon --inspect dist/index.js", - "test": "jest", + "test": "jest --detectOpenHandles --forceExit", "test:unit": "jest --testPathPattern=test/unit", - "test:integration": "jest --testPathPattern=test/integration" + "test:integration": "jest --testPathPattern=test/integration --detectOpenHandles --forceExit" }, "repository": { "type": "git", diff --git a/src/identity/hcs/did/hcs-did-topic-listener.ts b/src/identity/hcs/did/hcs-did-topic-listener.ts index 65670e0..2d75765 100644 --- a/src/identity/hcs/did/hcs-did-topic-listener.ts +++ b/src/identity/hcs/did/hcs-did-topic-listener.ts @@ -27,8 +27,8 @@ export class HcsDidTopicListener { this.topicId = topicId; this.query = new TopicMessageQuery().setTopicId(topicId).setStartTime(startTime); - this.query.setMaxBackoff(3000); - this.query.setMaxAttempts(10); + this.query.setMaxBackoff(2000); + this.query.setMaxAttempts(15); this.ignoreErrors = false; } diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index b1e58ce..2523bb8 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -1,4 +1,4 @@ -import { AccountId, Client, PrivateKey, Timestamp, TopicMessageQuery } from "@hashgraph/sdk"; +import { AccountId, Client, PrivateKey, Timestamp, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; import { DidError, Hashing, HcsDid } from "../../dist"; const TOPIC_REGEXP = /^0\.0\.[0-9]{3,}/; @@ -1034,22 +1034,26 @@ describe("HcsDid", () => { */ async function readTopicMessages(topicId, client, timeout = null) { - const messages = []; + const messages: TopicMessage[] = []; const query = new TopicMessageQuery() .setTopicId(topicId) .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())) - .subscribe(client, null, (msg) => { - messages.push(msg); - }); + .setEndTime(Timestamp.fromDate(new Date())); + + query.setMaxBackoff(2000); + query.setMaxAttempts(15); + + const querySubcription = query.subscribe(client, null, (msg) => { + messages.push(msg); + }); /** * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read */ await delay(timeout || process.env.WAIT_BEFORE_RESOLVE_DID_FOR); - query.unsubscribe(); + querySubcription.unsubscribe(); return messages; } From 1a5cd220d404b87a05b1c2a7f1e89f4d123ff5cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 17 Jul 2023 16:05:30 +0200 Subject: [PATCH 124/133] Upgrade @hashgraph/sdk to 2.28.0; publicKeyMultibase is replaced with publicKeyBase58, encoding of the value updated; Fixing tests. --- package-lock.json | 1353 ++++++++++++++++- package.json | 10 +- .../owner/hcs-did-create-did-owner-event.ts | 10 +- .../owner/hcs-did-update-did-owner-event.ts | 2 +- ...cs-did-create-verification-method-event.ts | 10 +- ...cs-did-update-verification-method-event.ts | 2 +- ...-create-verification-relationship-event.ts | 10 +- ...-update-verification-relationship-event.ts | 2 +- src/utils/hashing.ts | 10 + test/integration/did-resolver.test.ts | 14 +- test/integration/hcs-did.test.ts | 106 +- test/unit/did-document.test.ts | 26 +- test/unit/did-parser.test.ts | 2 +- .../hcs-did-create-did-owner-event.test.ts | 28 +- .../hcs-did-update-did-owner-event.test.ts | 28 +- .../hcs-did-create-service-event.test.ts | 14 +- .../hcs-did-revoke-service-event.test.ts | 6 +- .../hcs-did-update-service-event.test.ts | 14 +- ...d-create-verification-method-event.test.ts | 37 +- ...d-revoke-verification-method-event.test.ts | 6 +- ...d-update-verification-method-event.test.ts | 37 +- ...te-verification-relationship-event.test.ts | 36 +- ...ke-verification-relationship-event.test.ts | 10 +- ...te-verification-relationship-event.test.ts | 36 +- test/unit/hcs-did-message.test.ts | 6 +- test/unit/hsc-did.test.ts | 12 +- 26 files changed, 1536 insertions(+), 291 deletions(-) diff --git a/package-lock.json b/package-lock.json index caec60d..b30d89c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "^2.20.0", - "base58-js": "^1.0.0", + "@hashgraph/sdk": "^2.28.0", + "base58-js": "^1.0.5", "did-resolver": "^3.1.5", - "js-base64": "^3.6.1", + "js-base64": "^3.7.5", "moment": "^2.29.1", "multiformats": "^9.6.2", "varint": "^6.0.0" @@ -628,6 +628,138 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", @@ -646,6 +778,69 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, "node_modules/@ethersproject/logger": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", @@ -661,6 +856,42 @@ } ] }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, "node_modules/@ethersproject/rlp": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", @@ -680,10 +911,101 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/@grpc/grpc-js": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", - "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.2.tgz", + "integrity": "sha512-5cqCjUvDKJWHGeu1prlrFOUmjuML0NequZKJ38PsCkfwIqPnZq4Q9burPP3It7/+46wpl0KsqVN3s6Te3B9Qtw==", "dependencies": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" @@ -693,15 +1015,15 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", - "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.8.tgz", + "integrity": "sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" @@ -710,12 +1032,51 @@ "node": ">=6" } }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/@hashgraph/cryptography": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.3.tgz", - "integrity": "sha512-txU2SVz8mBJ5aHqkrIpmaerJSu0F/S9T/0eXpYAIC2USy/8oTisp54gKVDTETFdnCrq0tNgCJmWt2N8QHMMbcw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.6.tgz", + "integrity": "sha512-3HmnT1Lek71l6nHxc4GOyT/hSx/LmgusyWfE7hQda2dnE5vL2umydDw5TK2wq8gqmD9S3uRSMhz/BO55wtzxRA==", "dependencies": { "bignumber.js": "^9.1.1", + "bn.js": "^5.1.1", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", "js-base64": "^3.7.4", @@ -756,20 +1117,24 @@ } }, "node_modules/@hashgraph/sdk": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.20.0.tgz", - "integrity": "sha512-Scc/mP7FtTnw5DZnGWK6YxYoAPmBC+GEnrzzcCgjAVa2YA/3Dbr4qXk3XFPVOXY5G9qxW0O5/j2z9BxY+/yrXg==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.28.0.tgz", + "integrity": "sha512-sMhU9KREplxgUaqU98ArG2fJATyw4dhn1XFxKWNkr8j9fR95ugHH9lSh3BZHNH81eX2a+U9Y0nApYk5c17+54A==", "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", "@ethersproject/rlp": "^5.7.0", - "@grpc/grpc-js": "^1.7.3", - "@hashgraph/cryptography": "^1.4.3", + "@grpc/grpc-js": "1.8.2", + "@hashgraph/cryptography": "1.4.6", "@hashgraph/proto": "2.12.0", "axios": "^1.3.1", "bignumber.js": "^9.1.1", "crypto-js": "^4.1.1", "js-base64": "^3.7.4", - "js-logger": "^1.6.1", "long": "^4.0.0", + "pino": "^8.14.1", + "pino-pretty": "^10.0.0", "protobufjs": "^7.1.2", "utf8": "^3.0.0" }, @@ -1435,6 +1800,17 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -1570,6 +1946,14 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/axios": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", @@ -1678,13 +2062,32 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base58-js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", - "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz", + "integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==", "engines": { "node": ">= 8" } }, + "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==", + "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/bignumber.js": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", @@ -1708,9 +2111,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/boxen": { "version": "5.1.2", @@ -1839,6 +2242,29 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2011,6 +2437,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2058,6 +2485,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2164,6 +2596,14 @@ "node": ">=10" } }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2324,6 +2764,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -2345,7 +2790,6 @@ "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" } @@ -2466,6 +2910,22 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -2490,6 +2950,11 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + }, "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", @@ -2501,6 +2966,19 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -2746,6 +3224,65 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "dependencies": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/help-me/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/help-me/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/help-me/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/help-me/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -2828,6 +3365,25 @@ "node": ">=0.10.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==", + "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/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -4046,15 +4602,23 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, "node_modules/js-base64": { "version": "3.7.5", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, - "node_modules/js-logger": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", - "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -4612,6 +5176,11 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "node_modules/on-exit-leak-free": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", + "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4725,6 +5294,65 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pino": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.1.tgz", + "integrity": "sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.1.tgz", + "integrity": "sha512-yrn00+jNpkvZX/NrPVCPIVHAfTDy3ahF0PND9tKqZk4j9s+loK8dpzrJj4dGb7i+WLuR50ussuTAiWoMWU+qeA==", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -4862,6 +5490,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", + "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -4876,9 +5517,9 @@ } }, "node_modules/protobufjs": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", - "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -5031,7 +5672,6 @@ "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" @@ -5058,6 +5698,11 @@ "node": ">=8" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -5088,6 +5733,21 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5100,6 +5760,14 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -5216,6 +5884,14 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5234,6 +5910,11 @@ "node": ">=10" } }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -5276,6 +5957,14 @@ "node": ">=8" } }, + "node_modules/sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5295,6 +5984,14 @@ "source-map": "^0.6.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5313,6 +6010,33 @@ "node": ">=10" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/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==", + "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/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -5451,6 +6175,14 @@ "node": ">=8" } }, + "node_modules/thread-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", + "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", + "dependencies": { + "real-require": "^0.2.0" + } + }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -5805,6 +6537,11 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -6006,6 +6743,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -6023,6 +6761,7 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, "engines": { "node": ">=10" } @@ -6485,6 +7224,78 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, "@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", @@ -6493,11 +7304,60 @@ "@ethersproject/logger": "^5.7.0" } }, + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, "@ethersproject/logger": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, "@ethersproject/rlp": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", @@ -6507,33 +7367,116 @@ "@ethersproject/logger": "^5.7.0" } }, + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "@grpc/grpc-js": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", - "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.2.tgz", + "integrity": "sha512-5cqCjUvDKJWHGeu1prlrFOUmjuML0NequZKJ38PsCkfwIqPnZq4Q9burPP3It7/+46wpl0KsqVN3s6Te3B9Qtw==", "requires": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", - "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.8.tgz", + "integrity": "sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } } }, "@hashgraph/cryptography": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.3.tgz", - "integrity": "sha512-txU2SVz8mBJ5aHqkrIpmaerJSu0F/S9T/0eXpYAIC2USy/8oTisp54gKVDTETFdnCrq0tNgCJmWt2N8QHMMbcw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.4.6.tgz", + "integrity": "sha512-3HmnT1Lek71l6nHxc4GOyT/hSx/LmgusyWfE7hQda2dnE5vL2umydDw5TK2wq8gqmD9S3uRSMhz/BO55wtzxRA==", "requires": { "bignumber.js": "^9.1.1", + "bn.js": "^5.1.1", "crypto-js": "^4.1.1", "elliptic": "^6.5.4", "js-base64": "^3.7.4", @@ -6552,20 +7495,24 @@ } }, "@hashgraph/sdk": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.20.0.tgz", - "integrity": "sha512-Scc/mP7FtTnw5DZnGWK6YxYoAPmBC+GEnrzzcCgjAVa2YA/3Dbr4qXk3XFPVOXY5G9qxW0O5/j2z9BxY+/yrXg==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.28.0.tgz", + "integrity": "sha512-sMhU9KREplxgUaqU98ArG2fJATyw4dhn1XFxKWNkr8j9fR95ugHH9lSh3BZHNH81eX2a+U9Y0nApYk5c17+54A==", "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", "@ethersproject/rlp": "^5.7.0", - "@grpc/grpc-js": "^1.7.3", - "@hashgraph/cryptography": "^1.4.3", + "@grpc/grpc-js": "1.8.2", + "@hashgraph/cryptography": "1.4.6", "@hashgraph/proto": "2.12.0", "axios": "^1.3.1", "bignumber.js": "^9.1.1", "crypto-js": "^4.1.1", "js-base64": "^3.7.4", - "js-logger": "^1.6.1", "long": "^4.0.0", + "pino": "^8.14.1", + "pino-pretty": "^10.0.0", "protobufjs": "^7.1.2", "utf8": "^3.0.0" } @@ -7130,6 +8077,14 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -7229,6 +8184,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, "axios": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", @@ -7316,9 +8276,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base58-js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.4.tgz", - "integrity": "sha512-DQtWOeY+JwAUyFaL1KBqL0L81LWUj5S92N39LCiQwBouHz1GNZBqyhJz9ZtIDEtwaBYyoF63x27oqFL0Lu7DUg==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz", + "integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bignumber.js": { "version": "9.1.1", @@ -7337,9 +8302,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "boxen": { "version": "5.1.2", @@ -7430,6 +8395,15 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7547,6 +8521,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -7587,6 +8562,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7682,6 +8662,11 @@ "whatwg-url": "^8.0.0" } }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7807,6 +8792,13 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } } }, "emittery": { @@ -7824,7 +8816,6 @@ "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" } @@ -7902,6 +8893,16 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -7920,6 +8921,11 @@ "jest-message-util": "^27.5.1" } }, + "fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + }, "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", @@ -7931,6 +8937,16 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -8106,6 +9122,55 @@ "minimalistic-assert": "^1.0.1" } }, + "help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "requires": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -8173,6 +9238,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -9090,15 +10160,20 @@ } } }, + "joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" + }, "js-base64": { "version": "3.7.5", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, - "js-logger": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/js-logger/-/js-logger-1.6.1.tgz", - "integrity": "sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==" + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "js-tokens": { "version": "4.0.0", @@ -9541,6 +10616,11 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "on-exit-leak-free": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", + "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9627,6 +10707,59 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pino": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.1.tgz", + "integrity": "sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==", + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + } + }, + "pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "requires": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "pino-pretty": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.1.tgz", + "integrity": "sha512-yrn00+jNpkvZX/NrPVCPIVHAfTDy3ahF0PND9tKqZk4j9s+loK8dpzrJj4dGb7i+WLuR50ussuTAiWoMWU+qeA==", + "requires": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -9723,6 +10856,16 @@ } } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "process-warning": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", + "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -9734,9 +10877,9 @@ } }, "protobufjs": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", - "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -9854,7 +10997,6 @@ "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" @@ -9875,6 +11017,11 @@ "escape-goat": "^2.0.0" } }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -9901,6 +11048,18 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9910,6 +11069,11 @@ "picomatch": "^2.2.1" } }, + "real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" + }, "registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -9996,6 +11160,11 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10011,6 +11180,11 @@ "xmlchars": "^2.2.0" } }, + "secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -10044,6 +11218,14 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "requires": { + "atomic-sleep": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10060,6 +11242,11 @@ "source-map": "^0.6.0" } }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -10075,6 +11262,21 @@ "escape-string-regexp": "^2.0.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "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==" + } + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -10171,6 +11373,14 @@ "minimatch": "^3.0.4" } }, + "thread-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", + "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", + "requires": { + "real-require": "^0.2.0" + } + }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -10407,6 +11617,11 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -10563,6 +11778,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -10576,7 +11792,8 @@ "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/package.json b/package.json index e5ac20e..dc0f725 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "build:dev": "tsc --sourceMap -w", "start": "node dist/index.js", "start:dev": "nodemon --inspect dist/index.js", - "test": "jest --detectOpenHandles --forceExit", + "test": "jest --runInBand --detectOpenHandles --forceExit", "test:unit": "jest --testPathPattern=test/unit", - "test:integration": "jest --testPathPattern=test/integration --detectOpenHandles --forceExit" + "test:integration": "jest --testPathPattern=test/integration --runInBand --detectOpenHandles --forceExit" }, "repository": { "type": "git", @@ -43,10 +43,10 @@ "typescript": "^4.3.2" }, "dependencies": { - "@hashgraph/sdk": "^2.20.0", - "base58-js": "^1.0.0", + "@hashgraph/sdk": "^2.28.0", + "base58-js": "^1.0.5", "did-resolver": "^3.1.5", - "js-base64": "^3.6.1", + "js-base64": "^3.7.5", "moment": "^2.29.1", "multiformats": "^9.6.2", "varint": "^6.0.0" diff --git a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts index aeef7ff..b3b0ada 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-create-did-owner-event.ts @@ -46,8 +46,8 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { return this.publicKey; } - public getPublicKeyMultibase() { - return Hashing.multibase.encode(this.getPublicKey().toBytes()); + public getPublicKeyBase58() { + return Hashing.base58.encode(this.getPublicKey().toBytes()); } public getOwnerDef() { @@ -55,7 +55,7 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { id: this.getId(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }; } @@ -65,7 +65,7 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { id: this.getId(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }, }; } @@ -75,7 +75,7 @@ export class HcsDidCreateDidOwnerEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateDidOwnerEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidCreateDidOwnerEvent(tree?.id, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts index 28c3eb7..84ac82f 100644 --- a/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts +++ b/src/identity/hcs/did/event/owner/hcs-did-update-did-owner-event.ts @@ -4,7 +4,7 @@ import { HcsDidCreateDidOwnerEvent } from "./hcs-did-create-did-owner-event"; export class HcsDidUpdateDidOwnerEvent extends HcsDidCreateDidOwnerEvent { static fromJsonTree(tree: any): HcsDidUpdateDidOwnerEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidUpdateDidOwnerEvent(tree?.id, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts index 6478823..0c0473b 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-create-verification-method-event.ts @@ -46,8 +46,8 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { return this.publicKey; } - public getPublicKeyMultibase() { - return Hashing.multibase.encode(this.getPublicKey().toBytes()); + public getPublicKeyBase58() { + return Hashing.base58.encode(this.getPublicKey().toBytes()); } public getVerificationMethodDef() { @@ -55,7 +55,7 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { id: this.getId(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }; } @@ -65,7 +65,7 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { id: this.getId(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }, }; } @@ -75,7 +75,7 @@ export class HcsDidCreateVerificationMethodEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidCreateVerificationMethodEvent(tree?.id, tree?.type, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts index 22ba8ad..e93b4bd 100644 --- a/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts +++ b/src/identity/hcs/did/event/verification-method/hcs-did-update-verification-method-event.ts @@ -4,7 +4,7 @@ import { HcsDidCreateVerificationMethodEvent } from "./hcs-did-create-verificati export class HcsDidUpdateVerificationMethodEvent extends HcsDidCreateVerificationMethodEvent { static fromJsonTree(tree: any): HcsDidCreateVerificationMethodEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidUpdateVerificationMethodEvent(tree?.id, tree?.type, tree?.controller, publicKey); } } diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts index dc65dbd..2346b3e 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-create-verification-relationship-event.ts @@ -58,8 +58,8 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { return this.publicKey; } - public getPublicKeyMultibase() { - return Hashing.multibase.encode(this.getPublicKey().toBytes()); + public getPublicKeyBase58() { + return Hashing.base58.encode(this.getPublicKey().toBytes()); } public getVerificationMethodDef() { @@ -67,7 +67,7 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { id: this.getId(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }; } @@ -78,7 +78,7 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { relationshipType: this.getRelationshipType(), type: this.getType(), controller: this.getController(), - publicKeyMultibase: this.getPublicKeyMultibase(), + publicKeyBase58: this.getPublicKeyBase58(), }, }; } @@ -88,7 +88,7 @@ export class HcsDidCreateVerificationRelationshipEvent extends HcsDidEvent { } static fromJsonTree(tree: any): HcsDidCreateVerificationRelationshipEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidCreateVerificationRelationshipEvent( tree?.id, tree?.relationshipType, diff --git a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts index 897ea63..844ca10 100644 --- a/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts +++ b/src/identity/hcs/did/event/verification-relationship/hcs-did-update-verification-relationship-event.ts @@ -4,7 +4,7 @@ import { HcsDidCreateVerificationRelationshipEvent } from "./hcs-did-create-veri export class HcsDidUpdateVerificationRelationshipEvent extends HcsDidCreateVerificationRelationshipEvent { static fromJsonTree(tree: any): HcsDidUpdateVerificationRelationshipEvent { - const publicKey = PublicKey.fromBytes(Hashing.multibase.decode(tree?.publicKeyMultibase)); + const publicKey = PublicKey.fromBytes(Hashing.base58.decode(tree?.publicKeyBase58)); return new HcsDidUpdateVerificationRelationshipEvent( tree?.id, tree?.relationshipType, diff --git a/src/utils/hashing.ts b/src/utils/hashing.ts index 92ba63c..7a9ae8d 100644 --- a/src/utils/hashing.ts +++ b/src/utils/hashing.ts @@ -1,3 +1,4 @@ +import * as Base58 from "base58-js"; import * as crypto from "crypto"; import { Base64 } from "js-base64"; import { base58btc } from "multiformats/bases/base58"; @@ -23,6 +24,15 @@ export class Hashing { }, }; + public static readonly base58 = { + decode: function (encodedString: string): Uint8Array { + return Base58.base58_to_binary(encodedString); + }, + encode: function (decodedBytes: Uint8Array): string { + return Base58.binary_to_base58(decodedBytes); + }, + }; + /** * @returns Multibase [MULTIBASE] base58-btc encoded value that is a concatenation of the * MULTIBASE(base58-btc, raw-public-key-bytes) diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts index cab69d6..c5a402b 100644 --- a/test/integration/did-resolver.test.ts +++ b/test/integration/did-resolver.test.ts @@ -2,8 +2,8 @@ import { AccountId, Client, PrivateKey } from "@hashgraph/sdk"; import { Resolver } from "did-resolver"; import { Hashing, HcsDid, HederaDidResolver } from "../../dist"; -const OPERATOR_ID = process.env.OPERATOR_ID; -const OPERATOR_KEY = process.env.OPERATOR_KEY; +const OPERATOR_ID = process.env.OPERATOR_ID; +const OPERATOR_KEY = process.env.OPERATOR_KEY; // testnet, previewnet, mainnet const NETWORK = "testnet"; @@ -17,7 +17,7 @@ function delay(time) { describe("HederaDidResolver", () => { let client; - beforeAll(async () => { + beforeEach(async () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); client = Client.forTestnet({ scheduleNetworkUpdate: false }); @@ -25,6 +25,10 @@ describe("HederaDidResolver", () => { client.setOperator(operatorId, operatorKey); }); + afterEach(() => { + client.close(); + }); + describe("#resolve", () => { it("returns error response", async () => { const resolver = new Resolver({ @@ -44,7 +48,7 @@ describe("HederaDidResolver", () => { /** * Does not return messages because Resolver wrapper handles that */ - result = await resolver.resolve(null); + result = await resolver.resolve(""); expect(result).toEqual({ didDocument: null, didDocumentMetadata: {}, @@ -101,7 +105,7 @@ describe("HederaDidResolver", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 2523bb8..f92b7fa 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -3,8 +3,8 @@ import { DidError, Hashing, HcsDid } from "../../dist"; const TOPIC_REGEXP = /^0\.0\.[0-9]{3,}/; -const OPERATOR_ID = process.env.OPERATOR_ID; -const OPERATOR_KEY = process.env.OPERATOR_KEY; +const OPERATOR_ID = process.env.OPERATOR_ID; +const OPERATOR_KEY = process.env.OPERATOR_KEY; // testnet, previewnet, mainnet const NETWORK = "testnet"; @@ -18,7 +18,7 @@ function delay(time) { describe("HcsDid", () => { let client; - beforeAll(async () => { + beforeEach(async () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); client = Client.forTestnet({ scheduleNetworkUpdate: false }); @@ -26,6 +26,10 @@ describe("HcsDid", () => { client.setOperator(operatorId, operatorKey); }); + afterEach(() => { + client.close(); + }); + describe("#register", () => { it("throws error if DID is already registered", async () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); @@ -33,7 +37,7 @@ describe("HcsDid", () => { await did.register(); - let error = null; + let error; try { await did.register(); } catch (err) { @@ -47,7 +51,7 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); - let error = null; + let error; try { await did.register(); } catch (err) { @@ -109,7 +113,7 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); - let error = null; + let error; try { await did.resolve(); } catch (err) { @@ -123,7 +127,7 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); - let error = null; + let error; try { await did.resolve(); } catch (err) { @@ -153,7 +157,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -164,7 +168,7 @@ describe("HcsDid", () => { describe("#delete", () => { it("throws error if DID is not registered", async () => { const did = new HcsDid({ privateKey: PrivateKey.fromString(OPERATOR_KEY), client }); - let error = null; + let error; try { await did.delete(); } catch (err) { @@ -177,7 +181,7 @@ describe("HcsDid", () => { it("throws error if instance has no privateKey assigned", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier, client }); - let error = null; + let error; try { await did.delete(); } catch (err) { @@ -190,7 +194,7 @@ describe("HcsDid", () => { it("throws error if instance has no client assigned", async () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier, privateKey: PrivateKey.fromString(OPERATOR_KEY) }); - let error = null; + let error; try { await did.delete(); } catch (err) { @@ -218,7 +222,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(didPrivateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(didPrivateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -248,7 +252,7 @@ describe("HcsDid", () => { const didPrivateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey: didPrivateKey, client: client }); - let error = null; + let error; try { await did.changeOwner({ controller: newOwnerIdentifier, @@ -267,7 +271,7 @@ describe("HcsDid", () => { client: client, }); - let error = null; + let error; try { await did.changeOwner({ controller: newOwnerIdentifier, @@ -287,7 +291,7 @@ describe("HcsDid", () => { privateKey: didPrivateKey, }); - let error = null; + let error; try { await did.changeOwner({ controller: newOwnerIdentifier, @@ -308,11 +312,11 @@ describe("HcsDid", () => { client: client, }); - let error = null; + let error; try { await did.changeOwner({ controller: newOwnerIdentifier, - newPrivateKey: null, + newPrivateKey: null, }); } catch (err) { error = err; @@ -351,7 +355,7 @@ describe("HcsDid", () => { { controller: newOwnerIdentifier, id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(newDidPrivateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(newDidPrivateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -364,9 +368,9 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); - let error = null; + let error; try { - await did.addService({ id: null, type: null, serviceEndpoint: null }); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { error = err; } @@ -378,9 +382,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); - let error = null; + let error; try { - await did.addService({ id: null, type: null, serviceEndpoint: null }); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { error = err; } @@ -392,9 +396,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); - let error = null; + let error; try { - await did.addService({ id: null, type: null, serviceEndpoint: null }); + await did.addService({ id: null, type: null, serviceEndpoint: null }); } catch (err) { error = err; } @@ -406,7 +410,7 @@ describe("HcsDid", () => { const privateKey = PrivateKey.fromString(OPERATOR_KEY); const did = new HcsDid({ privateKey, client }); - let error = null; + let error; try { await did.register(); await did.addService({ @@ -448,7 +452,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -497,7 +501,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -543,7 +547,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -588,7 +592,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -610,9 +614,9 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); - let error = null; + let error; try { - await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { error = err; } @@ -624,9 +628,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); - let error = null; + let error; try { - await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { error = err; } @@ -638,9 +642,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); - let error = null; + let error; try { - await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); + await did.addVerificationMethod({ id: null, type: null, controller: null, publicKey: null }); } catch (err) { error = err; } @@ -685,13 +689,13 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: did.getIdentifier(), id: newVerificationDid, - publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -745,13 +749,13 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: did.getIdentifier(), id: newVerificationDid, - publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(updatePublicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -800,7 +804,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -816,9 +820,9 @@ describe("HcsDid", () => { const identifier = "did:hedera:testnet:z6MkgUv5CvjRP6AsvEYqSRN7djB6p4zK9bcMQ93g5yK6Td7N_0.0.29613327"; const did = new HcsDid({ identifier }); - let error = null; + let error; try { - await did.addVerificationRelationship({ + await did.addVerificationRelationship({ id: null, relationshipType: null, type: null, @@ -836,9 +840,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey }); - let error = null; + let error; try { - await did.addVerificationRelationship({ + await did.addVerificationRelationship({ id: null, relationshipType: null, type: null, @@ -856,9 +860,9 @@ describe("HcsDid", () => { const privateKey = PrivateKey.generate(); const did = new HcsDid({ privateKey, client }); - let error = null; + let error; try { - await did.addVerificationRelationship({ + await did.addVerificationRelationship({ id: null, relationshipType: null, type: null, @@ -905,13 +909,13 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: did.getIdentifier(), id: newVerificationDid, - publicKeyMultibase: Hashing.multibase.encode(publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -965,13 +969,13 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: did.getIdentifier(), id: newVerificationDid, - publicKeyMultibase: Hashing.multibase.encode(updatePublicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(updatePublicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -1017,7 +1021,7 @@ describe("HcsDid", () => { { controller: did.getIdentifier(), id: `${did.getIdentifier()}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(privateKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 057af26..715901e 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -80,7 +80,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, ], @@ -110,7 +110,7 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, ], @@ -191,13 +191,13 @@ describe("DidDocument", () => { { controller: otherOwnerIdentifier, id: `${otherOwnerIdentifier}#did-root-key`, - publicKeyMultibase: Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(otherOwnerKey.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key2.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -268,19 +268,19 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key1.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key1.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key2.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key2.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -410,25 +410,25 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-1`, - publicKeyMultibase: Hashing.multibase.encode(key4.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key4.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-2`, - publicKeyMultibase: Hashing.multibase.encode(key5.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key5.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key3.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], @@ -549,13 +549,13 @@ describe("DidDocument", () => { { controller: identifier, id: `${identifier}#did-root-key`, - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, { controller: identifier, id: `${identifier}#key-3`, - publicKeyMultibase: Hashing.multibase.encode(key3.publicKey.toBytes()), + publicKeyBase58: Hashing.base58.encode(key3.publicKey.toBytes()), type: "Ed25519VerificationKey2018", }, ], diff --git a/test/unit/did-parser.test.ts b/test/unit/did-parser.test.ts index ace9f1e..9e16070 100644 --- a/test/unit/did-parser.test.ts +++ b/test/unit/did-parser.test.ts @@ -4,7 +4,7 @@ import { DidParser, Hashing } from "../../dist"; describe("DidParser", () => { it("throw an error when invalid did string provided", async () => { [ - null, + "", "invalidDid1", "did:invalid", "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", diff --git a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts index b8a39d4..9abd30b 100644 --- a/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-create-did-owner-event.test.ts @@ -14,9 +14,9 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidCreateDidOwnerEvent(null, identifier, privateKey.publicKey); + new HcsDidCreateDidOwnerEvent(null, identifier, privateKey.publicKey); } catch (err) { error = err; } @@ -26,9 +26,9 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { - new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); } catch (err) { error = err; } @@ -38,9 +38,9 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); it("throws error if publicKey is null", () => { - let error = null; + let error; try { - new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, null); + new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, null); } catch (err) { error = err; } @@ -50,7 +50,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidCreateDidOwnerEvent(identifier, identifier, privateKey.publicKey); } catch (err) { @@ -86,16 +86,16 @@ describe("HcsDidCreateDidOwnerEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns base58 encoded publicKey", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -106,7 +106,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { DIDOwner: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -116,7 +116,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { describe("#toJSON", () => { it("returns stringified version of JSON tree", () => { expect(event.toJSON()).toEqual( - '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -126,7 +126,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { const eventFromJson = HcsDidCreateDidOwnerEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); @@ -135,7 +135,7 @@ describe("HcsDidCreateDidOwnerEvent", () => { DIDOwner: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts index 1623d52..886c1c0 100644 --- a/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts +++ b/test/unit/event/owner/hcs-did-update-did-owner-event.test.ts @@ -14,9 +14,9 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidUpdateDidOwnerEvent(null, identifier, privateKey.publicKey); + new HcsDidUpdateDidOwnerEvent(null, identifier, privateKey.publicKey); } catch (err) { error = err; } @@ -26,9 +26,9 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { - new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); + new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", null, privateKey.publicKey); } catch (err) { error = err; } @@ -38,9 +38,9 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); it("throws error if publicKey is null", () => { - let error = null; + let error; try { - new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", identifier, null); + new HcsDidUpdateDidOwnerEvent(identifier + "#did-root-key", identifier, null); } catch (err) { error = err; } @@ -50,7 +50,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidUpdateDidOwnerEvent(identifier, identifier, privateKey.publicKey); } catch (err) { @@ -86,16 +86,16 @@ describe("HcsDidUpdateDidOwnerEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns base58 encoded publicKey", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJESURPd25lciI6eyJpZCI6ImRpZDpoZWRlcmE6dGVzdG5ldDp6QUVFeEQyM3Y5d3JFVVZIS3ZiN3RpSm1BTUdDcUhveFc4eXFXTnlGdzNTWENfMC4wLjI5NjEzMzI3I2RpZC1yb290LWtleSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -106,7 +106,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { DIDOwner: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -116,7 +116,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { describe("#toJSON", () => { it("returns stringified version of JSON tree", () => { expect(event.toJSON()).toEqual( - '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"DIDOwner":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -126,7 +126,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { const eventFromJson = HcsDidUpdateDidOwnerEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); @@ -135,7 +135,7 @@ describe("HcsDidUpdateDidOwnerEvent", () => { DIDOwner: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#did-root-key", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/service/hcs-did-create-service-event.test.ts b/test/unit/event/service/hcs-did-create-service-event.test.ts index ce745d8..4e8750f 100644 --- a/test/unit/event/service/hcs-did-create-service-event.test.ts +++ b/test/unit/event/service/hcs-did-create-service-event.test.ts @@ -18,9 +18,9 @@ describe("HcsDidCreateServiceEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidCreateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); + new HcsDidCreateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); } catch (err) { error = err; } @@ -30,9 +30,9 @@ describe("HcsDidCreateServiceEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { - new HcsDidCreateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); + new HcsDidCreateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); } catch (err) { error = err; } @@ -42,9 +42,9 @@ describe("HcsDidCreateServiceEvent", () => { }); it("throws error if serviceEndpoint is null", () => { - let error = null; + let error; try { - new HcsDidCreateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); + new HcsDidCreateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); } catch (err) { error = err; } @@ -54,7 +54,7 @@ describe("HcsDidCreateServiceEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidCreateServiceEvent(identifier, "DIDCommMessaging", "https://vc.test.service.com"); } catch (err) { diff --git a/test/unit/event/service/hcs-did-revoke-service-event.test.ts b/test/unit/event/service/hcs-did-revoke-service-event.test.ts index 0e0068c..4459208 100644 --- a/test/unit/event/service/hcs-did-revoke-service-event.test.ts +++ b/test/unit/event/service/hcs-did-revoke-service-event.test.ts @@ -14,9 +14,9 @@ describe("HcsDidRevokeServiceEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidRevokeServiceEvent(null); + new HcsDidRevokeServiceEvent(""); } catch (err) { error = err; } @@ -26,7 +26,7 @@ describe("HcsDidRevokeServiceEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidRevokeServiceEvent(identifier); } catch (err) { diff --git a/test/unit/event/service/hcs-did-update-service-event.test.ts b/test/unit/event/service/hcs-did-update-service-event.test.ts index 24074ec..83a646c 100644 --- a/test/unit/event/service/hcs-did-update-service-event.test.ts +++ b/test/unit/event/service/hcs-did-update-service-event.test.ts @@ -18,9 +18,9 @@ describe("HcsDidUpdateServiceEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidUpdateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); + new HcsDidUpdateServiceEvent(null, "DIDCommMessaging", "https://vc.test.service.com"); } catch (err) { error = err; } @@ -30,9 +30,9 @@ describe("HcsDidUpdateServiceEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { - new HcsDidUpdateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); + new HcsDidUpdateServiceEvent(identifier + "#service-1", null, "https://vc.test.service.com"); } catch (err) { error = err; } @@ -42,9 +42,9 @@ describe("HcsDidUpdateServiceEvent", () => { }); it("throws error if serviceEndpoint is null", () => { - let error = null; + let error; try { - new HcsDidUpdateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); + new HcsDidUpdateServiceEvent(identifier + "#service-1", "DIDCommMessaging", null); } catch (err) { error = err; } @@ -54,7 +54,7 @@ describe("HcsDidUpdateServiceEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidUpdateServiceEvent(identifier, "DIDCommMessaging", "https://vc.test.service.com"); } catch (err) { diff --git a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts index 331df9f..57ecc7c 100644 --- a/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-create-verification-method-event.test.ts @@ -19,10 +19,10 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationMethodEvent( - null, + null, "Ed25519VerificationKey2018", identifier, privateKey.publicKey @@ -36,9 +36,14 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { - new HcsDidCreateVerificationMethodEvent(identifier + "#key-1", null, identifier, privateKey.publicKey); + new HcsDidCreateVerificationMethodEvent( + identifier + "#key-1", + null, + identifier, + privateKey.publicKey + ); } catch (err) { error = err; } @@ -48,12 +53,12 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", - null, + null, privateKey.publicKey ); } catch (err) { @@ -65,13 +70,13 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); it("throws error if publicKey is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, - null + null ); } catch (err) { error = err; @@ -82,7 +87,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidCreateVerificationMethodEvent( identifier, @@ -127,16 +132,16 @@ describe("HcsDidCreateVerificationMethodEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -147,7 +152,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { VerificationMethod: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -157,7 +162,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -167,7 +172,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { const eventFromJson = HcsDidCreateVerificationMethodEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); @@ -176,7 +181,7 @@ describe("HcsDidCreateVerificationMethodEvent", () => { VerificationMethod: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts index e283efb..22bd65a 100644 --- a/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-revoke-verification-method-event.test.ts @@ -14,9 +14,9 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidRevokeVerificationMethodEvent(null); + new HcsDidRevokeVerificationMethodEvent(""); } catch (err) { error = err; } @@ -26,7 +26,7 @@ describe("HcsDidRevokeVerificationMethodEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidRevokeVerificationMethodEvent(identifier); } catch (err) { diff --git a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts index b5f439d..05c77a3 100644 --- a/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts +++ b/test/unit/event/verification-method/hcs-did-update-verification-method-event.test.ts @@ -19,10 +19,10 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationMethodEvent( - null, + null, "Ed25519VerificationKey2018", identifier, privateKey.publicKey @@ -36,9 +36,14 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { - new HcsDidUpdateVerificationMethodEvent(identifier + "#key-1", null, identifier, privateKey.publicKey); + new HcsDidUpdateVerificationMethodEvent( + identifier + "#key-1", + null, + identifier, + privateKey.publicKey + ); } catch (err) { error = err; } @@ -48,12 +53,12 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", - null, + null, privateKey.publicKey ); } catch (err) { @@ -65,13 +70,13 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); it("throws error publicKey id is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationMethodEvent( identifier + "#key-1", "Ed25519VerificationKey2018", identifier, - null + null ); } catch (err) { error = err; @@ -82,7 +87,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationMethodEvent( identifier, @@ -127,16 +132,16 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJWZXJpZmljYXRpb25NZXRob2QiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -147,7 +152,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { VerificationMethod: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); @@ -157,7 +162,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"VerificationMethod":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -167,7 +172,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { const eventFromJson = HcsDidUpdateVerificationMethodEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }); @@ -176,7 +181,7 @@ describe("HcsDidUpdateVerificationMethodEvent", () => { VerificationMethod: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", type: "Ed25519VerificationKey2018", }, }); diff --git a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts index 8ae6cdc..3501ffc 100644 --- a/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-create-verification-relationship-event.test.ts @@ -20,10 +20,10 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( - null, + null, "authentication", "Ed25519VerificationKey2018", identifier, @@ -38,11 +38,11 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if relationshipType is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-1", - null, + null, "Ed25519VerificationKey2018", identifier, privateKey.publicKey @@ -56,12 +56,12 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-1", "authentication", - null, + null, identifier, privateKey.publicKey ); @@ -74,13 +74,13 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-1", "authentication", "Ed25519VerificationKey2018", - null, + null, privateKey.publicKey ); } catch (err) { @@ -92,14 +92,14 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if publicKey is null", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( identifier + "#key-1", "authentication", "Ed25519VerificationKey2018", identifier, - null + null ); } catch (err) { error = err; @@ -110,7 +110,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidCreateVerificationRelationshipEvent( identifier, @@ -162,16 +162,16 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -182,7 +182,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { VerificationRelationship: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, @@ -193,7 +193,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -203,7 +203,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { const eventFromJson = HcsDidCreateVerificationRelationshipEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }); @@ -213,7 +213,7 @@ describe("HcsDidCreateVerificationRelationshipEvent", () => { VerificationRelationship: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, diff --git a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts index b18ec4a..e1a35c5 100644 --- a/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-revoke-verification-relationship-event.test.ts @@ -14,9 +14,9 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { - new HcsDidRevokeVerificationRelationshipEvent(null, "authentication"); + new HcsDidRevokeVerificationRelationshipEvent("", "authentication"); } catch (err) { error = err; } @@ -26,9 +26,9 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { }); it("throws error if relationshipType is null", () => { - let error = null; + let error; try { - new HcsDidRevokeVerificationRelationshipEvent(identifier + "#key-1", null); + new HcsDidRevokeVerificationRelationshipEvent(identifier + "#key-1", null); } catch (err) { error = err; } @@ -38,7 +38,7 @@ describe("HcsDidRevokeVerificationRelationshipEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidRevokeVerificationRelationshipEvent(identifier, "authentication"); } catch (err) { diff --git a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts index 2a84746..28c8ef4 100644 --- a/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts +++ b/test/unit/event/verification-relationship/hcs-did-update-verification-relationship-event.test.ts @@ -20,10 +20,10 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if id is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( - null, + "", "authentication", "Ed25519VerificationKey2018", identifier, @@ -38,11 +38,11 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if relationshipType is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( identifier + "#key-1", - null, + null, "Ed25519VerificationKey2018", identifier, privateKey.publicKey @@ -56,12 +56,12 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if type is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( identifier + "#key-1", "authentication", - null, + null, identifier, privateKey.publicKey ); @@ -74,13 +74,13 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if controller is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( identifier + "#key-1", "authentication", "Ed25519VerificationKey2018", - null, + "", privateKey.publicKey ); } catch (err) { @@ -92,14 +92,14 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if publicKey is null", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( identifier + "#key-1", "authentication", "Ed25519VerificationKey2018", identifier, - null + null ); } catch (err) { error = err; @@ -110,7 +110,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); it("throws error if id is not valid", () => { - let error = null; + let error; try { new HcsDidUpdateVerificationRelationshipEvent( identifier, @@ -162,16 +162,16 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { }); }); - describe("#getPublicKeyMultibase", () => { + describe("#getPublicKeyBase58", () => { it("returns public key base58 encoded", () => { - expect(event.getPublicKeyMultibase()).toEqual("zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); + expect(event.getPublicKeyBase58()).toEqual("AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"); }); }); describe("#getBase64", () => { it("returns event data encoded in base64", () => { expect(event.getBase64()).toEqual( - "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleU11bHRpYmFzZSI6InpBRUV4RDIzdjl3ckVVVkhLdmI3dGlKbUFNR0NxSG94Vzh5cVdOeUZ3M1NYQyJ9fQ==" + "eyJWZXJpZmljYXRpb25SZWxhdGlvbnNoaXAiOnsiaWQiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyNrZXktMSIsInJlbGF0aW9uc2hpcFR5cGUiOiJhdXRoZW50aWNhdGlvbiIsInR5cGUiOiJFZDI1NTE5VmVyaWZpY2F0aW9uS2V5MjAxOCIsImNvbnRyb2xsZXIiOiJkaWQ6aGVkZXJhOnRlc3RuZXQ6ekFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDXzAuMC4yOTYxMzMyNyIsInB1YmxpY0tleUJhc2U1OCI6IkFFRXhEMjN2OXdyRVVWSEt2Yjd0aUptQU1HQ3FIb3hXOHlxV055RnczU1hDIn19" ); }); }); @@ -182,7 +182,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { VerificationRelationship: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, @@ -193,7 +193,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { describe("#toJSON", () => { it("returns stringified JSON structure version", () => { expect(event.toJSON()).toEqual( - '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyMultibase":"zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' + '{"VerificationRelationship":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1","relationshipType":"authentication","type":"Ed25519VerificationKey2018","controller":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","publicKeyBase58":"AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC"}}' ); }); }); @@ -203,7 +203,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { const eventFromJson = HcsDidUpdateVerificationRelationshipEvent.fromJsonTree({ controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }); @@ -213,7 +213,7 @@ describe("HcsDidUpdateVerificationRelationshipEvent", () => { VerificationRelationship: { controller: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327", id: "did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327#key-1", - publicKeyMultibase: "zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", + publicKeyBase58: "AEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC", relationshipType: "authentication", type: "Ed25519VerificationKey2018", }, diff --git a/test/unit/hcs-did-message.test.ts b/test/unit/hcs-did-message.test.ts index 51d5fe3..3109233 100644 --- a/test/unit/hcs-did-message.test.ts +++ b/test/unit/hcs-did-message.test.ts @@ -65,7 +65,7 @@ describe("HcsDidMessage", () => { const did = new HcsDid({ identifier: identifier, privateKey: privateKey, client: client }); let message = new HcsDidMessage( - null, + null, did.getIdentifier(), new HcsDidCreateDidOwnerEvent( did.getIdentifier() + "#did-root-key", @@ -79,7 +79,7 @@ describe("HcsDidMessage", () => { message = new HcsDidMessage( DidMethodOperation.CREATE, - null, + null, new HcsDidCreateDidOwnerEvent( did.getIdentifier() + "#did-root-key", did.getIdentifier(), @@ -90,7 +90,7 @@ describe("HcsDidMessage", () => { expect(message.getDid()).toEqual(null); expect(message.isValid()).toEqual(false); - message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), null); + message = new HcsDidMessage(DidMethodOperation.CREATE, did.getIdentifier(), null); expect(message.getEvent()).toEqual(null); expect(message.isValid()).toEqual(false); diff --git a/test/unit/hsc-did.test.ts b/test/unit/hsc-did.test.ts index 9381a25..b91839d 100644 --- a/test/unit/hsc-did.test.ts +++ b/test/unit/hsc-did.test.ts @@ -36,7 +36,7 @@ describe("HcsDid", () => { it("throws error if passed identifier is invalid", () => { [ - null, + "", "invalidDid1", "did:invalid", "did:invalidMethod:8LjUL78kFVnWV9rFnNCTE5bZdRmjm2obqJwS892jVLak_0.0.24352", @@ -69,7 +69,7 @@ describe("HcsDid", () => { }); describe("#parseIdentifier", () => { it("throws error if topicId missing", () => { - let error = null; + let error; try { HcsDid.parseIdentifier("did:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb"); } catch (err) { @@ -81,7 +81,7 @@ describe("HcsDid", () => { }); it("throws error if invalid prefix", () => { - let error = null; + let error; try { HcsDid.parseIdentifier("abcd:hedera:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { @@ -93,7 +93,7 @@ describe("HcsDid", () => { }); it("throws error if invalid method name", () => { - let error = null; + let error; try { HcsDid.parseIdentifier("did:hashgraph:testnet:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { @@ -105,7 +105,7 @@ describe("HcsDid", () => { }); it("throws error if Invalid Hedera network", () => { - let error = null; + let error; try { HcsDid.parseIdentifier("did:hedera:nonetwork:z87meAWt7t2zrDxo7qw3PVTjexKWReYWS75LH29THy8kb_0.0.1"); } catch (err) { @@ -117,7 +117,7 @@ describe("HcsDid", () => { }); it("throws error if Invalid id string", () => { - let error = null; + let error; try { HcsDid.parseIdentifier("did:hedera:testnet:z6Mkabcd_0.0.1"); } catch (err) { From d6b13399a10f2f682dbc804dcb214b41baaafd1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 17 Jul 2023 17:32:35 +0200 Subject: [PATCH 125/133] Use default mirror nodes that sdk provides --- test/integration/did-resolver.test.ts | 6 ------ test/integration/hcs-did.test.ts | 6 ------ 2 files changed, 12 deletions(-) diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts index c5a402b..a0629f0 100644 --- a/test/integration/did-resolver.test.ts +++ b/test/integration/did-resolver.test.ts @@ -4,11 +4,6 @@ import { Hashing, HcsDid, HederaDidResolver } from "../../dist"; const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; -// testnet, previewnet, mainnet -const NETWORK = "testnet"; - -// hedera -const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; function delay(time) { return new Promise((resolve) => setTimeout(resolve, time)); @@ -21,7 +16,6 @@ describe("HederaDidResolver", () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); client = Client.forTestnet({ scheduleNetworkUpdate: false }); - client.setMirrorNetwork(MIRROR_PROVIDER); client.setOperator(operatorId, operatorKey); }); diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index f92b7fa..7f39eda 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -5,11 +5,6 @@ const TOPIC_REGEXP = /^0\.0\.[0-9]{3,}/; const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; -// testnet, previewnet, mainnet -const NETWORK = "testnet"; - -// hedera -const MIRROR_PROVIDER = ["hcs." + NETWORK + ".mirrornode.hedera.com:5600"]; function delay(time) { return new Promise((resolve) => setTimeout(resolve, time)); @@ -22,7 +17,6 @@ describe("HcsDid", () => { const operatorId = AccountId.fromString(OPERATOR_ID); const operatorKey = PrivateKey.fromString(OPERATOR_KEY); client = Client.forTestnet({ scheduleNetworkUpdate: false }); - client.setMirrorNetwork(MIRROR_PROVIDER); client.setOperator(operatorId, operatorKey); }); From ee3849406c0d6693c123f8f8341f050c507a2f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 17 Jul 2023 19:30:21 +0200 Subject: [PATCH 126/133] Update tests with better logic to read mirror nodes --- jest.setup.js | 2 +- test/integration/did-resolver.test.ts | 27 ++-- test/integration/hcs-did.test.ts | 216 +++++++++++++++----------- test/utils.ts | 51 ++++++ 4 files changed, 196 insertions(+), 100 deletions(-) create mode 100644 test/utils.ts diff --git a/jest.setup.js b/jest.setup.js index ed9aa67..c013bfe 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -2,4 +2,4 @@ // process.env.OPERATOR_KEY = // "302e02..."; -process.env.WAIT_BEFORE_RESOLVE_DID_FOR = 9000; +process.env.WAIT_BEFORE_RESOLVE_DID_FOR = 30000; diff --git a/test/integration/did-resolver.test.ts b/test/integration/did-resolver.test.ts index a0629f0..3108da0 100644 --- a/test/integration/did-resolver.test.ts +++ b/test/integration/did-resolver.test.ts @@ -1,13 +1,12 @@ import { AccountId, Client, PrivateKey } from "@hashgraph/sdk"; import { Resolver } from "did-resolver"; import { Hashing, HcsDid, HederaDidResolver } from "../../dist"; +import { delayUntil } from "../utils"; const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; -function delay(time) { - return new Promise((resolve) => setTimeout(resolve, time)); -} +const WAIT_BEFORE_RESOLVE_DID_FOR = parseInt(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); describe("HederaDidResolver", () => { let client; @@ -75,13 +74,17 @@ describe("HederaDidResolver", () => { serviceEndpoint: "https://example.com/vcs", }); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); - const resolver = new Resolver({ - ...new HederaDidResolver(client).build(), + ...new HederaDidResolver().build(), }); - let result = await resolver.resolve(did.getIdentifier()); + let result: any; + + await delayUntil(async () => { + result = await resolver.resolve(did.getIdentifier()); + return result?.didDocument?.service?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + expect(result).toEqual({ didDocument: { "@context": "https://www.w3.org/ns/did/v1", @@ -122,13 +125,17 @@ describe("HederaDidResolver", () => { await did.register(); await did.delete(); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); - const resolver = new Resolver({ ...new HederaDidResolver().build(), }); - let result = await resolver.resolve(did.getIdentifier()); + let result: any; + + await delayUntil(async () => { + result = await resolver.resolve(did.getIdentifier()); + return result?.didDocument?.verificationMethod?.length === 0; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + expect(result).toEqual({ didDocument: { "@context": "https://www.w3.org/ns/did/v1", diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index 7f39eda..b3bbc61 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -1,14 +1,13 @@ -import { AccountId, Client, PrivateKey, Timestamp, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; +import { AccountId, Client, PrivateKey } from "@hashgraph/sdk"; import { DidError, Hashing, HcsDid } from "../../dist"; +import { delayUntil, readTopicMessages } from "../utils"; const TOPIC_REGEXP = /^0\.0\.[0-9]{3,}/; const OPERATOR_ID = process.env.OPERATOR_ID; const OPERATOR_KEY = process.env.OPERATOR_KEY; -function delay(time) { - return new Promise((resolve) => setTimeout(resolve, time)); -} +const WAIT_BEFORE_RESOLVE_DID_FOR = parseInt(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); describe("HcsDid", () => { let client; @@ -73,6 +72,12 @@ describe("HcsDid", () => { expect(did.getClient()).toEqual(client); expect(did.getNetwork()).toEqual("testnet"); + await delayUntil(async () => { + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + const messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(1); @@ -85,18 +90,36 @@ describe("HcsDid", () => { await did.register(); const topicId = did.getTopicId(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + let messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(1); await did.delete(); expect(did.getTopicId()).toEqual(topicId); + await delayUntil(async () => { + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 0; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(2); await did.register(); expect(did.getTopicId()).toEqual(topicId); + await delayUntil(async () => { + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + messages = await readTopicMessages(did.getTopicId(), client); expect(messages.length).toEqual(3); }); @@ -137,10 +160,13 @@ describe("HcsDid", () => { await did.register(); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length > 0; + }, WAIT_BEFORE_RESOLVE_DID_FOR); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -204,10 +230,15 @@ describe("HcsDid", () => { await did.register(); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; + + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - let didJSON = (await did.resolve()).toJsonTree(); - expect(didJSON).toEqual({ + expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], authentication: [`${did.getIdentifier()}#did-root-key`], @@ -224,17 +255,22 @@ describe("HcsDid", () => { await did.delete(); - const messages = await readTopicMessages(did.getTopicId(), client); - expect(messages.length).toEqual(2); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 0; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - didJSON = (await did.resolve()).toJsonTree(); - expect(didJSON).toEqual({ + expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [], authentication: [], id: did.getIdentifier(), verificationMethod: [], }); + + const messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); }); }); @@ -334,12 +370,15 @@ describe("HcsDid", () => { newPrivateKey: newDidPrivateKey, }); - const messages = await readTopicMessages(did.getTopicId(), client); - expect(messages.length).toEqual(2); + let didDocument: any; - const doc = (await did.resolve()).toJsonTree(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.controller === newOwnerIdentifier; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - expect(doc).toEqual({ + expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], authentication: [`${did.getIdentifier()}#did-root-key`], @@ -354,6 +393,9 @@ describe("HcsDid", () => { }, ], }); + + const messages = await readTopicMessages(did.getTopicId(), client); + expect(messages.length).toEqual(2); }); }); @@ -430,12 +472,15 @@ describe("HcsDid", () => { serviceEndpoint: "https://example.com/vcs", }); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + let didDocument: any; - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.service?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -479,12 +524,15 @@ describe("HcsDid", () => { serviceEndpoint: "https://example.com/did", }); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + let didDocument: any; - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.service?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -525,12 +573,15 @@ describe("HcsDid", () => { id: did.getIdentifier() + "#service-1", }); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + let didDocument: any; - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod === 1 && !didDocument?.service; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -570,12 +621,15 @@ describe("HcsDid", () => { serviceEndpoint: "https://meeco.me/vijay", }); - console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); + let didDocument: any; - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.service?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -663,17 +717,17 @@ describe("HcsDid", () => { publicKey, }); - /** - * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node - */ - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; + + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 2; + }, WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); - expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], @@ -723,17 +777,17 @@ describe("HcsDid", () => { publicKey: updatePublicKey, }); - /** - * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node - */ - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; + + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 2; + }, WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); - expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], @@ -778,17 +832,17 @@ describe("HcsDid", () => { id: newVerificationDid, }); - /** - * wait for 9s so DIDOwner and VerificationMethod event to be propagated to mirror node - */ - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; + + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); - expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", assertionMethod: [`${did.getIdentifier()}#did-root-key`], @@ -889,10 +943,13 @@ describe("HcsDid", () => { publicKey, }); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.authentication?.length === 2; + }, WAIT_BEFORE_RESOLVE_DID_FOR); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -949,10 +1006,13 @@ describe("HcsDid", () => { publicKey: updatePublicKey, }); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.authentication?.length === 2; + }, WAIT_BEFORE_RESOLVE_DID_FOR); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -1001,10 +1061,13 @@ describe("HcsDid", () => { relationshipType: "authentication", }); - await delay(process.env.WAIT_BEFORE_RESOLVE_DID_FOR); + let didDocument: any; - const didDoc = await did.resolve(); - const didDocument = didDoc.toJsonTree(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + didDocument = didDoc.toJsonTree(); + return didDocument?.authentication?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); expect(didDocument).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -1030,28 +1093,3 @@ describe("HcsDid", () => { /** * Test Helpers */ - -async function readTopicMessages(topicId, client, timeout = null) { - const messages: TopicMessage[] = []; - - const query = new TopicMessageQuery() - .setTopicId(topicId) - .setStartTime(new Timestamp(0, 0)) - .setEndTime(Timestamp.fromDate(new Date())); - - query.setMaxBackoff(2000); - query.setMaxAttempts(15); - - const querySubcription = query.subscribe(client, null, (msg) => { - messages.push(msg); - }); - - /** - * wait for READ_MESSAGES_TIMEOUT seconds and assume all messages were read - */ - await delay(timeout || process.env.WAIT_BEFORE_RESOLVE_DID_FOR); - - querySubcription.unsubscribe(); - - return messages; -} diff --git a/test/utils.ts b/test/utils.ts new file mode 100644 index 0000000..e756d76 --- /dev/null +++ b/test/utils.ts @@ -0,0 +1,51 @@ +import { Timestamp, TopicMessage, TopicMessageQuery } from "@hashgraph/sdk"; + +export function delay(time) { + return new Promise((resolve) => setTimeout(resolve, time)); +} + +export async function delayUntil(condition: () => Promise, timeoutMs: number): Promise { + return new Promise(async (resolve) => { + const startTime = Date.now(); + + const checkCondition = async () => { + try { + const isConditionMet = await condition(); + + if (isConditionMet) { + resolve(true); + } else if (Date.now() - startTime >= timeoutMs) { + resolve(false); + } else { + setTimeout(checkCondition, 3000); + } + } catch (error) { + resolve(false); + } + }; + + checkCondition(); + }); +} + +export async function readTopicMessages(topicId, client) { + const messages: TopicMessage[] = []; + + const query = new TopicMessageQuery() + .setTopicId(topicId) + .setStartTime(new Timestamp(0, 0)) + .setEndTime(Timestamp.fromDate(new Date())); + + query.setMaxBackoff(2000); + query.setMaxAttempts(5); + + const querySubcription = query.subscribe(client, null, (msg) => { + messages.push(msg); + }); + + await delay(2000); + + querySubcription.unsubscribe(); + + return messages; +} From e849b00c2b9cd7984254f9f4c4c4cdbc65ef64ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Mon, 17 Jul 2023 19:49:47 +0200 Subject: [PATCH 127/133] Add delayUntil for test checking already registered DID flow --- test/integration/hcs-did.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index b3bbc61..be1232a 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -30,6 +30,12 @@ describe("HcsDid", () => { await did.register(); + await delayUntil(async () => { + const didDoc = await did.resolve(); + const didDocument = didDoc.toJsonTree(); + return didDocument?.verificationMethod?.length === 1; + }, WAIT_BEFORE_RESOLVE_DID_FOR); + let error; try { await did.register(); From 0f8ba6e290414997c540e687814700da7d3f5245 Mon Sep 17 00:00:00 2001 From: Zak Barbuto Date: Fri, 30 Jun 2023 15:56:53 +0930 Subject: [PATCH 128/133] Add support for resolving DID documents from IPFS --- package-lock.json | 116 ++++++++++++++++++ package.json | 2 + src/identity/did-document.ts | 114 +++++++++++------ src/identity/did-method-operation.ts | 1 + .../hcs-did-create-did-document-event.ts | 65 ++++++++++ .../hcs/did/event/hcs-did-event-parser.ts | 2 + .../did/event/hcs-did-event-target-name.ts | 1 + src/identity/hcs/did/event/hcs-did-event.ts | 17 ++- src/identity/hcs/did/hcs-did.ts | 11 +- src/identity/hcs/message-envelope.ts | 18 ++- src/index.ts | 2 + src/utils/ipfs.ts | 22 ++++ test/unit/did-document.test.ts | 103 +++++++++++++--- .../hcs-did-create-did-document-event.test.ts | 98 +++++++++++++++ 14 files changed, 503 insertions(+), 69 deletions(-) create mode 100644 src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts create mode 100644 src/utils/ipfs.ts create mode 100644 test/unit/event/document/hcs-did-create-did-document-event.test.ts diff --git a/package-lock.json b/package-lock.json index b30d89c..c814f34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,11 +15,13 @@ "js-base64": "^3.7.5", "moment": "^2.29.1", "multiformats": "^9.6.2", + "node-fetch": "^2.6.12", "varint": "^6.0.0" }, "devDependencies": { "@types/jest": "^27.4.0", "@types/node": "^16.7.7", + "@types/node-fetch": "^2.6.4", "jest": "^27.5.0", "nodemon": "^2.0.7", "prettier": "2.5.1", @@ -1761,6 +1763,30 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" }, + "node_modules/@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/prettier": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", @@ -5057,6 +5083,44 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8038,6 +8102,29 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz", "integrity": "sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==" }, + "@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "@types/prettier": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", @@ -10527,6 +10614,35 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", diff --git a/package.json b/package.json index dc0f725..708ab2c 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "devDependencies": { "@types/jest": "^27.4.0", "@types/node": "^16.7.7", + "@types/node-fetch": "^2.6.4", "jest": "^27.5.0", "nodemon": "^2.0.7", "prettier": "2.5.1", @@ -49,6 +50,7 @@ "js-base64": "^3.7.5", "moment": "^2.29.1", "multiformats": "^9.6.2", + "node-fetch": "^2.6.12", "varint": "^6.0.0" } } diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index f41a051..95ceb94 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -6,8 +6,10 @@ import { HcsDidMessage, HcsDidUpdateDidOwnerEvent, } from ".."; +import { IpfsDidDocumentDownloader } from "../utils/ipfs"; import { DidDocumentJsonProperties } from "./did-document-json-properties"; import { DidSyntax } from "./did-syntax"; +import { HcsDidCreateDidDocumentEvent } from "./hcs/did/event/document/hcs-did-create-did-document-event"; import { HcsDidEventTargetName } from "./hcs/did/event/hcs-did-event-target-name"; import { HcsDidUpdateServiceEvent } from "./hcs/did/event/service/hcs-did-update-service-event"; import { HcsDidCreateVerificationMethodEvent } from "./hcs/did/event/verification-method/hcs-did-create-verification-method-event"; @@ -24,6 +26,7 @@ export class DidDocument { private updated: Timestamp = null; private versionId: string = null; private deactivated: boolean = false; + private downloader: IpfsDidDocumentDownloader = new IpfsDidDocumentDownloader(); private controller: any; private services: Map = new Map(); @@ -37,11 +40,9 @@ export class DidDocument { capabilityDelegation: [], }; - constructor(did: string, messages: HcsDidMessage[]) { + constructor(did: string) { this.id = did; this.context = DidSyntax.DID_DOCUMENT_CONTEXT; - - this.processMessages(messages); } public hasOwner() { @@ -72,14 +73,49 @@ export class DidDocument { return this.deactivated; } + public async processMessages(messages: HcsDidMessage[]): Promise { + for (const msg of messages) { + if ( + !this.controller && + msg.getOperation() === DidMethodOperation.CREATE && + msg.getEvent().targetName !== HcsDidEventTargetName.DID_OWNER && + msg.getEvent().targetName !== HcsDidEventTargetName.DID_DOCUMENT + ) { + console.warn("DID document owner is not registered. Event will be ignored..."); + return; + } + + switch (msg.getOperation()) { + case DidMethodOperation.CREATE: + await this.processCreateMessage(msg); + return; + case DidMethodOperation.UPDATE: + await this.processUpdateMessage(msg); + return; + case DidMethodOperation.REVOKE: + await this.processRevokeMessage(msg); + return; + case DidMethodOperation.DELETE: + await this.processDeleteMessage(msg); + return; + default: + console.warn(`Operation ${msg.getOperation()} is not supported. Event will be ignored...`); + } + } + } + + public setIpfsDownloader(downloader: IpfsDidDocumentDownloader) { + this.downloader = downloader; + } + public toJsonTree(): any { let rootObject = {}; rootObject[DidDocumentJsonProperties.CONTEXT] = this.context; rootObject[DidDocumentJsonProperties.ID] = this.id; - if (this.controller && this.id !== this.controller.controller) { - rootObject[DidDocumentJsonProperties.CONTROLLER] = this.controller.controller; + if (this.controller && this.id !== this.controller && this.id !== this.controller.controller) { + rootObject[DidDocumentJsonProperties.CONTROLLER] = this.controller.controller ?? this.controller; } rootObject[DidDocumentJsonProperties.VERIFICATION_METHOD] = Array.from(this.verificationMethods.values()); @@ -148,40 +184,40 @@ export class DidDocument { this.versionId = timestamp.toDate().getTime().toString(); } - private processMessages(messages: HcsDidMessage[]): void { - messages.forEach((msg) => { - if ( - !this.controller && - msg.getOperation() === DidMethodOperation.CREATE && - msg.getEvent().targetName !== HcsDidEventTargetName.DID_OWNER - ) { - console.warn("DID document owner is not registered. Event will be ignored..."); - return; - } - - switch (msg.getOperation()) { - case DidMethodOperation.CREATE: - this.processCreateMessage(msg); - return; - case DidMethodOperation.UPDATE: - this.processUpdateMessage(msg); - return; - case DidMethodOperation.REVOKE: - this.processRevokeMessage(msg); - return; - case DidMethodOperation.DELETE: - this.processDeleteMessage(msg); - return; - default: - console.warn(`Operation ${msg.getOperation()} is not supported. Event will be ignored...`); - } - }); - } - - private processCreateMessage(message: HcsDidMessage): void { + private async processCreateMessage(message: HcsDidMessage): Promise { const event = message.getEvent(); switch (event.targetName) { + case HcsDidEventTargetName.DID_DOCUMENT: + const doc = await this.downloader.downloadDocument(event as HcsDidCreateDidDocumentEvent); + if (doc[DidDocumentJsonProperties.ID] !== this.id) { + throw new Error("Document ID does not match did"); + } + this.controller = doc[DidDocumentJsonProperties.CONTROLLER]; + + this.services = new Map( + (doc[DidDocumentJsonProperties.SERVICE] ?? []).map((service) => [service.id, service]) + ); + this.verificationMethods = new Map( + (doc[DidDocumentJsonProperties.VERIFICATION_METHOD] ?? []).map((verificationMethod) => [ + verificationMethod.id, + verificationMethod, + ]) + ); + + this.verificationRelationships[DidDocumentJsonProperties.ASSERTION_METHOD] = + doc[DidDocumentJsonProperties.ASSERTION_METHOD] ?? []; + this.verificationRelationships[DidDocumentJsonProperties.AUTHENTICATION] = + doc[DidDocumentJsonProperties.AUTHENTICATION] ?? []; + this.verificationRelationships[DidDocumentJsonProperties.KEY_AGREEMENT] = + doc[DidDocumentJsonProperties.KEY_AGREEMENT] ?? []; + this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_INVOCATION] = + doc[DidDocumentJsonProperties.CAPABILITY_INVOCATION] ?? []; + this.verificationRelationships[DidDocumentJsonProperties.CAPABILITY_DELEGATION] = + doc[DidDocumentJsonProperties.CAPABILITY_DELEGATION] ?? []; + + return; + case HcsDidEventTargetName.DID_OWNER: if (this.controller) { console.warn(`DID owner is already registered: ${this.controller}. Event will be ignored...`); @@ -244,7 +280,7 @@ export class DidDocument { } } - private processUpdateMessage(message: HcsDidMessage): void { + private async processUpdateMessage(message: HcsDidMessage): Promise { const event = message.getEvent(); switch (event.targetName) { @@ -303,7 +339,7 @@ export class DidDocument { } } - private processRevokeMessage(message: HcsDidMessage): void { + private async processRevokeMessage(message: HcsDidMessage): Promise { const event = message.getEvent(); switch (event.targetName) { @@ -369,7 +405,7 @@ export class DidDocument { } } - private processDeleteMessage(message: HcsDidMessage): void { + private async processDeleteMessage(message: HcsDidMessage): Promise { const event = message.getEvent(); switch (event.targetName) { diff --git a/src/identity/did-method-operation.ts b/src/identity/did-method-operation.ts index 13b60bb..d687df2 100644 --- a/src/identity/did-method-operation.ts +++ b/src/identity/did-method-operation.ts @@ -1,5 +1,6 @@ export enum DidMethodOperation { CREATE = "create", + CREATE_DID_DOCUMENT = "create-did-document", UPDATE = "update", DELETE = "delete", REVOKE = "revoke", diff --git a/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts new file mode 100644 index 0000000..4d1827d --- /dev/null +++ b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts @@ -0,0 +1,65 @@ +import { DidError } from "../../../../did-error"; +import { HcsDidEvent } from "../hcs-did-event"; +import { HcsDidEventTargetName } from "../hcs-did-event-target-name"; + +export class HcsDidCreateDidDocumentEvent extends HcsDidEvent { + public static DID_DOCUMENT_TYPE = "DIDDocument"; + + public readonly targetName = HcsDidEventTargetName.DID_DOCUMENT; + + protected id: string; + protected type = HcsDidCreateDidDocumentEvent.DID_DOCUMENT_TYPE; + protected cid: string; + protected url: string; + + constructor(id: string, cid: string, url?: string) { + super(); + + if (!id || !cid) { + throw new DidError("Validation failed. DID Document args are missing"); + } + + if (!this.isDidValid(id)) { + throw new DidError("DID is invalid"); + } + + this.id = id; + this.cid = cid; + this.url = url; + } + + public getId() { + return this.id; + } + + public getType() { + return this.type; + } + + public getCid() { + return this.cid; + } + + public getUrl() { + return this.url; + } + + public toJsonTree() { + return { + [this.targetName]: { + id: this.getId(), + type: this.getType(), + cid: this.getCid(), + url: this.getUrl(), + }, + }; + } + + public toJSON() { + return JSON.stringify(this.toJsonTree()); + } + + static fromJsonTree(tree: any): HcsDidCreateDidDocumentEvent { + return new HcsDidCreateDidDocumentEvent(tree?.id, tree?.cid, tree?.url); + } +} diff --git a/src/identity/hcs/did/event/hcs-did-event-parser.ts b/src/identity/hcs/did/event/hcs-did-event-parser.ts index d311c0f..ef889f2 100644 --- a/src/identity/hcs/did/event/hcs-did-event-parser.ts +++ b/src/identity/hcs/did/event/hcs-did-event-parser.ts @@ -1,5 +1,6 @@ import { Hashing } from "../../../../utils/hashing"; import { DidMethodOperation } from "../../../did-method-operation"; +import { HcsDidCreateDidDocumentEvent } from "./document/hcs-did-create-did-document-event"; import { HcsDidDeleteEvent } from "./document/hcs-did-delete-event"; import { HcsDidEvent } from "./hcs-did-event"; import { HcsDidEventTargetName } from "./hcs-did-event-target-name"; @@ -18,6 +19,7 @@ import { HcsDidUpdateVerificationRelationshipEvent } from "./verification-relati const EVENT_NAME_TO_CLASS = { [DidMethodOperation.CREATE]: { [HcsDidEventTargetName.DID_OWNER]: HcsDidCreateDidOwnerEvent, + [HcsDidEventTargetName.DID_DOCUMENT]: HcsDidCreateDidDocumentEvent, [HcsDidEventTargetName.SERVICE]: HcsDidCreateServiceEvent, [HcsDidEventTargetName.VERIFICATION_METHOD]: HcsDidCreateVerificationMethodEvent, [HcsDidEventTargetName.VERIFICATION_RELATIONSHIP]: HcsDidCreateVerificationRelationshipEvent, diff --git a/src/identity/hcs/did/event/hcs-did-event-target-name.ts b/src/identity/hcs/did/event/hcs-did-event-target-name.ts index 1fa4f58..7427e20 100644 --- a/src/identity/hcs/did/event/hcs-did-event-target-name.ts +++ b/src/identity/hcs/did/event/hcs-did-event-target-name.ts @@ -1,4 +1,5 @@ export enum HcsDidEventTargetName { + DID_DOCUMENT = "DIDDocument", DID_OWNER = "DIDOwner", VERIFICATION_METHOD = "VerificationMethod", VERIFICATION_RELATIONSHIP = "VerificationRelationship", diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index d74e20c..7b7ce4b 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -25,6 +25,17 @@ export abstract class HcsDidEvent { throw new Error("not implemented"); } + protected isDidValid(eventId: string) { + const [identifier, id] = eventId?.split("#"); + + if (!identifier) { + return false; + } + + HcsDid.parseIdentifier(identifier); + return true; + } + protected isOwnerEventIdValid(eventId: string) { const [identifier, id] = eventId?.split("#"); @@ -35,8 +46,6 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); return this.OWNER_KEY_POSTFIX_REGEX.test(id) !== false; - - } protected isServiceEventIdValid(eventId: string) { @@ -49,8 +58,6 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); return this.SERVICE_ID_POSTFIX_REGEX.test(id) !== false; - - } protected isKeyEventIdValid(eventId: string) { @@ -63,7 +70,5 @@ export abstract class HcsDidEvent { HcsDid.parseIdentifier(identifier); return this.KEY_ID_POSTFIX_REGEX.test(id) !== false; - - } } diff --git a/src/identity/hcs/did/hcs-did.ts b/src/identity/hcs/did/hcs-did.ts index eac15aa..bdac3ae 100644 --- a/src/identity/hcs/did/hcs-did.ts +++ b/src/identity/hcs/did/hcs-did.ts @@ -191,10 +191,15 @@ export class HcsDid { return new Promise((resolve, reject) => { new HcsDidEventMessageResolver(this.topicId) .setTimeout(HcsDid.READ_TOPIC_MESSAGES_TIMEOUT) - .whenFinished((messages) => { + .whenFinished(async (messages) => { this.messages = messages.map((msg) => msg.open()); - this.document = new DidDocument(this.identifier, this.messages); - resolve(this.document); + this.document = new DidDocument(this.identifier); + try { + await this.document.processMessages(this.messages); + resolve(this.document); + } catch (err) { + reject(err); + } }) .onError((err) => { // console.error(err); diff --git a/src/identity/hcs/message-envelope.ts b/src/identity/hcs/message-envelope.ts index 5551674..1a32c27 100644 --- a/src/identity/hcs/message-envelope.ts +++ b/src/identity/hcs/message-envelope.ts @@ -121,13 +121,21 @@ export class MessageEnvelope { */ public static fromJson(json: string, messageClass: JsonClass): MessageEnvelope { const result = new MessageEnvelope(); - const root = JSON.parse(json); - result.signature = root[MessageEnvelope.SIGNATURE_KEY]; - if (root.hasOwnProperty(MessageEnvelope.MESSAGE_KEY)) { - result.message = messageClass.fromJsonTree(root[MessageEnvelope.MESSAGE_KEY]); - } else { + let root; + try { + root = JSON.parse(json); + result.signature = root[MessageEnvelope.SIGNATURE_KEY]; + if (root.hasOwnProperty(MessageEnvelope.MESSAGE_KEY)) { + result.message = messageClass.fromJsonTree(root[MessageEnvelope.MESSAGE_KEY]); + } else { + result.message = null; + } + } catch (err) { + console.warn(`Invalid message JSON message - it will be ignored`); + // Invalid json - ignore the message result.message = null; } + return result; } diff --git a/src/index.ts b/src/index.ts index 439de3d..1e92092 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import { DidMethodOperation } from "./identity/did-method-operation"; import { DidParser } from "./identity/did-parser"; import { HederaDidResolver } from "./identity/did-resolver"; import { DidSyntax } from "./identity/did-syntax"; +import { HcsDidCreateDidDocumentEvent } from "./identity/hcs/did/event/document/hcs-did-create-did-document-event"; import { HcsDidDeleteEvent } from "./identity/hcs/did/event/document/hcs-did-delete-event"; import { HcsDidEventTargetName } from "./identity/hcs/did/event/hcs-did-event-target-name"; import { HcsDidCreateDidOwnerEvent } from "./identity/hcs/did/event/owner/hcs-did-create-did-owner-event"; @@ -44,6 +45,7 @@ export { Ed25519PubCodec, Hashing, HcsDid, + HcsDidCreateDidDocumentEvent, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidCreateVerificationMethodEvent, diff --git a/src/utils/ipfs.ts b/src/utils/ipfs.ts new file mode 100644 index 0000000..827cccd --- /dev/null +++ b/src/utils/ipfs.ts @@ -0,0 +1,22 @@ +import fetch from "node-fetch"; +import { HcsDidCreateDidDocumentEvent } from "../identity/hcs/did/event/document/hcs-did-create-did-document-event"; + +const IPFS_IO_HTTP_PROXY = "https://ipfs.io/ipfs/"; + +export class IpfsDidDocumentDownloader { + constructor(private readonly ipfsHttpProxy: string = IPFS_IO_HTTP_PROXY) {} + + async downloadDocument(docEvent: HcsDidCreateDidDocumentEvent) { + const url = docEvent.getUrl() ?? `${this.ipfsHttpProxy}/${docEvent.getCid}`; + + const result = await fetch(url); + if (!result.ok) { + throw new Error(`DID document could not be fetched from URL: ${url}`); + } + try { + const doc = await result.json(); + } catch (err) { + throw new Error(`DID document from URL could not be parsed as JSON: ${url}`); + } + } +} diff --git a/test/unit/did-document.test.ts b/test/unit/did-document.test.ts index 715901e..8d6065d 100644 --- a/test/unit/did-document.test.ts +++ b/test/unit/did-document.test.ts @@ -3,6 +3,7 @@ import { DidDocument, DidMethodOperation, Hashing, + HcsDidCreateDidDocumentEvent, HcsDidCreateDidOwnerEvent, HcsDidCreateServiceEvent, HcsDidCreateVerificationMethodEvent, @@ -21,8 +22,8 @@ describe("DidDocument", () => { privateKey.publicKey.toBytes() )}_0.0.29613327`; - it("returns empty document if not events were passed", () => { - const doc = new DidDocument(identifier, []); + it("returns empty document if not events were passed", async () => { + const doc = new DidDocument(identifier); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -37,8 +38,9 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeNull(); }); - it("ignores events til first create DIDOwner event", () => { - const doc = new DidDocument(identifier, [ + it("ignores events til first create DIDOwner event", async () => { + const doc = new DidDocument(identifier); + await doc.processMessages([ new HcsDidMessage( DidMethodOperation.CREATE, identifier, @@ -91,7 +93,70 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("handles create DIDOwner event", () => { + it("handles HcsDidCreateDidDocumentEvent events", async () => { + const messages = [ + new HcsDidMessage( + DidMethodOperation.CREATE, + identifier, + new HcsDidCreateDidDocumentEvent(`${identifier}#did-document`, "Qm123456") + ), + ]; + + const doc = new DidDocument(identifier); + const documents = { + Qm123456: { + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://example.com/vcs", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }, + }; + + doc.setIpfsDownloader({ + downloadDocument: (event: HcsDidCreateDidDocumentEvent) => documents[event.getCid()], + } as any); + + await doc.processMessages(messages); + + expect(doc.toJsonTree()).toEqual({ + "@context": "https://www.w3.org/ns/did/v1", + assertionMethod: [`${identifier}#did-root-key`], + authentication: [`${identifier}#did-root-key`], + id: identifier, + service: [ + { + id: `${identifier}#service-1`, + serviceEndpoint: "https://example.com/vcs", + type: "LinkedDomains", + }, + ], + verificationMethod: [ + { + controller: identifier, + id: `${identifier}#did-root-key`, + publicKeyMultibase: Hashing.multibase.encode(privateKey.publicKey.toBytes()), + type: "Ed25519VerificationKey2018", + }, + ], + }); + }); + + it("handles create DIDOwner event", async () => { const messages = [ new HcsDidMessage( DidMethodOperation.CREATE, @@ -99,7 +164,8 @@ describe("DidDocument", () => { new HcsDidCreateDidOwnerEvent(identifier + "#did-root-key", identifier, privateKey.publicKey) ), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -121,7 +187,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("handles DID delete event", () => { + it("handles DID delete event", async () => { const messages = [ new HcsDidMessage( DidMethodOperation.CREATE, @@ -130,7 +196,8 @@ describe("DidDocument", () => { ), new HcsDidMessage(DidMethodOperation.DELETE, identifier, new HcsDidDeleteEvent()), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -145,7 +212,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeNull(); }); - it("handles change DID owner event", () => { + it("handles change DID owner event", async () => { const otherOwnerKey = PrivateKey.generate(); const otherOwnerIdentifier = "did:hedera:testnet:" + Hashing.multibase.encode(otherOwnerKey.publicKey.toBytes()) + "_0.0.29999999"; @@ -178,7 +245,8 @@ describe("DidDocument", () => { ) ), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -208,7 +276,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfully handles add service, verificationMethod and verificationRelationship events", () => { + it("successfully handles add service, verificationMethod and verificationRelationship events", async () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); @@ -249,7 +317,8 @@ describe("DidDocument", () => { ) ), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -291,7 +360,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfully handles update service, verificationMethod and verificationRelationship events", () => { + it("successfully handles update service, verificationMethod and verificationRelationship events", async () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); const key3 = PrivateKey.generate(); @@ -386,7 +455,8 @@ describe("DidDocument", () => { ) ), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", @@ -439,7 +509,7 @@ describe("DidDocument", () => { expect(doc.getVersionId()).toBeTruthy(); }); - it("successfully handles revoke service, verificationMethod and verificationRelationship events", () => { + it("successfully handles revoke service, verificationMethod and verificationRelationship events", async () => { const key1 = PrivateKey.generate(); const key2 = PrivateKey.generate(); const key3 = PrivateKey.generate(); @@ -531,7 +601,8 @@ describe("DidDocument", () => { ) ), ]; - const doc = new DidDocument(identifier, messages); + const doc = new DidDocument(identifier); + await doc.processMessages(messages); expect(doc.toJsonTree()).toEqual({ "@context": "https://www.w3.org/ns/did/v1", diff --git a/test/unit/event/document/hcs-did-create-did-document-event.test.ts b/test/unit/event/document/hcs-did-create-did-document-event.test.ts new file mode 100644 index 0000000..87ed259 --- /dev/null +++ b/test/unit/event/document/hcs-did-create-did-document-event.test.ts @@ -0,0 +1,98 @@ +import { PrivateKey } from "@hashgraph/sdk"; +import { DidError, Hashing, HcsDidCreateDidDocumentEvent } from "../../../../dist"; + +describe("HcsDidCreateDidDocumentEvent", () => { + const privateKey = PrivateKey.fromString( + "302e020100300506032b6570042204209044d8f201e4b0aa7ba8ed577b0334b8cb6e38aad6c596171b5b1246737f5079" + ); + const identifier = `did:hedera:testnet:${Hashing.multibase.encode(privateKey.publicKey.toBytes())}_0.0.29613327`; + const cid = "QmaBcDeFgHiJkLmNoP"; + const url = `https://ipfs.io/ifs/${cid}`; + const event = new HcsDidCreateDidDocumentEvent(identifier, cid, url); + + describe("#constructor", () => { + it("throws error if id is null", () => { + expect(() => new HcsDidCreateDidDocumentEvent(null as any, cid)).toThrow( + new DidError("Validation failed. DID Document args are missing") + ); + }); + + it("throws error if cid is null", () => { + expect(() => new HcsDidCreateDidDocumentEvent(identifier, null as any)).toThrow( + new DidError("Validation failed. DID Document args are missing") + ); + }); + + it("throws error if id is not valid", () => { + expect(() => new HcsDidCreateDidDocumentEvent("example", cid)).toThrow( + new DidError("DID string is invalid: topic ID is missing") + ); + }); + }); + + describe("#getId", () => { + it("returns the id that was passed via constructor", () => { + expect(event.getId()).toEqual(identifier + "#did-root-key"); + }); + }); + + describe("#getType", () => { + it("returns DIDDocument", () => { + expect(event.getType()).toEqual("DIDDocument"); + }); + }); + + describe("#getCid", () => { + it("returns the cid that was passed via constructor", () => { + expect(event.getCid()).toEqual(cid); + }); + }); + + describe("#getUrl", () => { + it("returns the url that was passed via constructor", () => { + expect(event.getUrl()).toEqual(url); + }); + }); + + describe("#toJsonTree", () => { + it("returns event JSON tree", () => { + expect(event.toJsonTree()).toEqual({ + DIDDocument: { + id: identifier, + type: "DIDDocument", + cid, + url, + }, + }); + }); + }); + + describe("#toJSON", () => { + it("returns stringified version of JSON tree", () => { + expect(event.toJSON()).toEqual( + '{"DIDDocument":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","type":"DIDDocument","cid":"QmaBcDeFgHiJkLmNoP","url":"https://ipfs.io/ifs/QmaBcDeFgHiJkLmNoP"}}' + ); + }); + }); + + describe("#fromJsonTree", () => { + it("rebuilds the HcsDidCreateDidDocumentEvent", () => { + const eventFromJson = HcsDidCreateDidDocumentEvent.fromJSONTree({ + id: identifier, + type: "DIDDocument", + cid, + url, + }); + + expect(eventFromJson).toBeInstanceOf(HcsDidCreateDidDocumentEvent); + expect(event.toJsonTree()).toEqual({ + DIDDocument: { + id: identifier, + type: "DIDDocument", + cid, + url, + }, + }); + }); + }); +}); From 0ecfe46c5b72649804dde7ab1f483e3fd745c240 Mon Sep 17 00:00:00 2001 From: Zak Barbuto Date: Thu, 20 Jul 2023 14:50:51 +0930 Subject: [PATCH 129/133] Switch returns to continues Fixes some test failures --- jest.config.js | 1 + src/identity/did-document.ts | 10 +++++----- .../document/hcs-did-create-did-document-event.ts | 2 +- .../document/hcs-did-create-did-document-event.test.ts | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/jest.config.js b/jest.config.js index fbd2bc1..7ed666a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,4 +3,5 @@ module.exports = { testEnvironment: "node", setupFilesAfterEnv: ["./jest.setupAfterEnv.js"], setupFiles: ["./jest.setup.js"], + modulePathIgnorePatterns: ["/dist/"], }; diff --git a/src/identity/did-document.ts b/src/identity/did-document.ts index 95ceb94..461970f 100644 --- a/src/identity/did-document.ts +++ b/src/identity/did-document.ts @@ -82,22 +82,22 @@ export class DidDocument { msg.getEvent().targetName !== HcsDidEventTargetName.DID_DOCUMENT ) { console.warn("DID document owner is not registered. Event will be ignored..."); - return; + continue; } switch (msg.getOperation()) { case DidMethodOperation.CREATE: await this.processCreateMessage(msg); - return; + continue; case DidMethodOperation.UPDATE: await this.processUpdateMessage(msg); - return; + continue; case DidMethodOperation.REVOKE: await this.processRevokeMessage(msg); - return; + continue; case DidMethodOperation.DELETE: await this.processDeleteMessage(msg); - return; + continue; default: console.warn(`Operation ${msg.getOperation()} is not supported. Event will be ignored...`); } diff --git a/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts index 4d1827d..6ca6009 100644 --- a/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts +++ b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts @@ -59,7 +59,7 @@ export class HcsDidCreateDidDocumentEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJsonTree(tree: any): HcsDidCreateDidDocumentEvent { + static fromJSONTree(tree: any): HcsDidCreateDidDocumentEvent { return new HcsDidCreateDidDocumentEvent(tree?.id, tree?.cid, tree?.url); } } diff --git a/test/unit/event/document/hcs-did-create-did-document-event.test.ts b/test/unit/event/document/hcs-did-create-did-document-event.test.ts index 87ed259..6200a68 100644 --- a/test/unit/event/document/hcs-did-create-did-document-event.test.ts +++ b/test/unit/event/document/hcs-did-create-did-document-event.test.ts @@ -32,7 +32,7 @@ describe("HcsDidCreateDidDocumentEvent", () => { describe("#getId", () => { it("returns the id that was passed via constructor", () => { - expect(event.getId()).toEqual(identifier + "#did-root-key"); + expect(event.getId()).toEqual(identifier); }); }); @@ -70,7 +70,7 @@ describe("HcsDidCreateDidDocumentEvent", () => { describe("#toJSON", () => { it("returns stringified version of JSON tree", () => { expect(event.toJSON()).toEqual( - '{"DIDDocument":{"id":"did:hedera:testnet:z6MkogVzoGJMVVLhaz82cA5jZQKAAqUghhCrpzkSDFDwxfJa_0.0.29613327","type":"DIDDocument","cid":"QmaBcDeFgHiJkLmNoP","url":"https://ipfs.io/ifs/QmaBcDeFgHiJkLmNoP"}}' + '{"DIDDocument":{"id":"did:hedera:testnet:zAEExD23v9wrEUVHKvb7tiJmAMGCqHoxW8yqWNyFw3SXC_0.0.29613327","type":"DIDDocument","cid":"QmaBcDeFgHiJkLmNoP","url":"https://ipfs.io/ifs/QmaBcDeFgHiJkLmNoP"}}' ); }); }); From 43d69103dd5f133519593abaea7dcaf948d9ce35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linas=20Is=CC=8Cganaitis?= Date: Thu, 20 Jul 2023 15:56:15 +0200 Subject: [PATCH 130/133] Update few integration tests --- test/integration/hcs-did.test.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/integration/hcs-did.test.ts b/test/integration/hcs-did.test.ts index be1232a..4676545 100644 --- a/test/integration/hcs-did.test.ts +++ b/test/integration/hcs-did.test.ts @@ -535,7 +535,7 @@ describe("HcsDid", () => { await delayUntil(async () => { const didDoc = await did.resolve(); didDocument = didDoc.toJsonTree(); - return didDocument?.service?.length === 1; + return didDocument?.service[0]?.serviceEndpoint === "https://example.com/did"; }, WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`https://testnet.dragonglass.me/hedera/topics/${did.getTopicId().toString()}`); @@ -788,7 +788,10 @@ describe("HcsDid", () => { await delayUntil(async () => { const didDoc = await did.resolve(); didDocument = didDoc.toJsonTree(); - return didDocument?.verificationMethod?.length === 2; + return ( + didDocument?.verificationMethod[1]?.publicKeyBase58 === + Hashing.base58.encode(updatePublicKey.toBytes()) + ); }, WAIT_BEFORE_RESOLVE_DID_FOR); console.log(`${did.getIdentifier()}`); @@ -1017,7 +1020,10 @@ describe("HcsDid", () => { await delayUntil(async () => { const didDoc = await did.resolve(); didDocument = didDoc.toJsonTree(); - return didDocument?.authentication?.length === 2; + return ( + didDocument?.verificationMethod[1]?.publicKeyBase58 === + Hashing.base58.encode(updatePublicKey.toBytes()) + ); }, WAIT_BEFORE_RESOLVE_DID_FOR); expect(didDocument).toEqual({ From 1fb2141adbfce110922b2d1f8278be34d4d98b1e Mon Sep 17 00:00:00 2001 From: Zak Barbuto Date: Thu, 17 Aug 2023 14:33:39 +0930 Subject: [PATCH 131/133] Fix some issues resolving IPFS DIDs - Fix method name for json tree - Add missing return for fetched json --- .../hcs/did/event/document/hcs-did-create-did-document-event.ts | 2 +- src/identity/hcs/did/event/hcs-did-event.ts | 2 +- src/utils/ipfs.ts | 2 +- .../event/document/hcs-did-create-did-document-event.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts index 6ca6009..4d1827d 100644 --- a/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts +++ b/src/identity/hcs/did/event/document/hcs-did-create-did-document-event.ts @@ -59,7 +59,7 @@ export class HcsDidCreateDidDocumentEvent extends HcsDidEvent { return JSON.stringify(this.toJsonTree()); } - static fromJSONTree(tree: any): HcsDidCreateDidDocumentEvent { + static fromJsonTree(tree: any): HcsDidCreateDidDocumentEvent { return new HcsDidCreateDidDocumentEvent(tree?.id, tree?.cid, tree?.url); } } diff --git a/src/identity/hcs/did/event/hcs-did-event.ts b/src/identity/hcs/did/event/hcs-did-event.ts index 7b7ce4b..9ecaf3a 100644 --- a/src/identity/hcs/did/event/hcs-did-event.ts +++ b/src/identity/hcs/did/event/hcs-did-event.ts @@ -21,7 +21,7 @@ export abstract class HcsDidEvent { return Hashing.base64.encode(this.toJSON()); } - static fromJSONTree(tree: any): HcsDidEvent { + static fromJsonTree(tree: any): HcsDidEvent { throw new Error("not implemented"); } diff --git a/src/utils/ipfs.ts b/src/utils/ipfs.ts index 827cccd..1d22607 100644 --- a/src/utils/ipfs.ts +++ b/src/utils/ipfs.ts @@ -14,7 +14,7 @@ export class IpfsDidDocumentDownloader { throw new Error(`DID document could not be fetched from URL: ${url}`); } try { - const doc = await result.json(); + return await result.json(); } catch (err) { throw new Error(`DID document from URL could not be parsed as JSON: ${url}`); } diff --git a/test/unit/event/document/hcs-did-create-did-document-event.test.ts b/test/unit/event/document/hcs-did-create-did-document-event.test.ts index 6200a68..d2a4dfd 100644 --- a/test/unit/event/document/hcs-did-create-did-document-event.test.ts +++ b/test/unit/event/document/hcs-did-create-did-document-event.test.ts @@ -77,7 +77,7 @@ describe("HcsDidCreateDidDocumentEvent", () => { describe("#fromJsonTree", () => { it("rebuilds the HcsDidCreateDidDocumentEvent", () => { - const eventFromJson = HcsDidCreateDidDocumentEvent.fromJSONTree({ + const eventFromJson = HcsDidCreateDidDocumentEvent.fromJsonTree({ id: identifier, type: "DIDDocument", cid, From a6006ab0f18e78aec6930272b1109d77f3cf064e Mon Sep 17 00:00:00 2001 From: "Derek Munneke (Meeco)" Date: Thu, 25 Jan 2024 07:07:13 +1030 Subject: [PATCH 132/133] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/custom.md | 10 ++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/custom.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..48d5f81 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,10 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 9f5a709ec98e2055de29f990cfe06eb090296b1b Mon Sep 17 00:00:00 2001 From: "Derek Munneke (Meeco)" Date: Fri, 17 May 2024 13:40:14 +0930 Subject: [PATCH 133/133] Update README Add links to did method spec and hedera sdk --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ada595..4faf871 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # did-sdk-js -Support for the Hedera Hashgraph DID Method on the Hedera JavaScript/TypeScript SDK. +Support for the [Hedera Hashgraph DID Method](https://github.com/hashgraph/did-method) on the [Hedera JavaScript/TypeScript SDK](https://github.com/hashgraph/hedera-sdk-js). This repository contains the Javascript SDK for managing [DID Documents][did-core] using the Hedera Consensus Service.